Warp-SE/Documentation/GW4410A-Assembly.html
2022-02-05 21:36:31 -05:00

4346 lines
309 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Interactive BOM for KiCAD</title>
<style type="text/css">
:root {
--pcb-edge-color: black;
--pad-color: #878787;
--pad-hole-color: #CCCCCC;
--pad-color-highlight: #D04040;
--pad-color-highlight-both: #D0D040;
--pad-color-highlight-marked: #44a344;
--pin1-outline-color: #ffb629;
--pin1-outline-color-highlight: #ffb629;
--pin1-outline-color-highlight-both: #fcbb39;
--pin1-outline-color-highlight-marked: #fdbe41;
--silkscreen-edge-color: #aa4;
--silkscreen-polygon-color: #4aa;
--silkscreen-text-color: #4aa;
--fabrication-edge-color: #907651;
--fabrication-polygon-color: #907651;
--fabrication-text-color: #a27c24;
--track-color: #def5f1;
--track-color-highlight: #D04040;
--zone-color: #def5f1;
--zone-color-highlight: #d0404080;
}
html,
body {
margin: 0px;
height: 100%;
font-family: Verdana, sans-serif;
}
.dark.topmostdiv {
--pcb-edge-color: #eee;
--pad-color: #808080;
--pin1-outline-color: #ffa800;
--pin1-outline-color-highlight: #ccff00;
--track-color: #42524f;
--zone-color: #42524f;
background-color: #252c30;
color: #eee;
}
button {
background-color: #eee;
border: 1px solid #888;
color: black;
height: 44px;
width: 44px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 14px;
font-weight: bolder;
}
.dark button {
/* This will be inverted */
background-color: #c3b7b5;
}
button.depressed {
background-color: #0a0;
color: white;
}
.dark button.depressed {
/* This will be inverted */
background-color: #b3b;
}
button:focus {
outline: 0;
}
button#tb-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#lr-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#bom-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-grouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-ungrouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-netlist-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}
button#copy {
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
background-position: 6px 6px;
background-repeat: no-repeat;
background-size: 26px 26px;
border-radius: 6px;
height: 40px;
width: 40px;
margin: 10px 5px;
}
button#copy:active {
box-shadow: inset 0px 0px 5px #6c6c6c;
}
textarea.clipboard-temp {
position: fixed;
top: 0;
left: 0;
width: 2em;
height: 2em;
padding: 0;
border: None;
outline: None;
box-shadow: None;
background: transparent;
}
.left-most-button {
border-right: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
}
.middle-button {
border-right: 0;
}
.right-most-button {
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.button-container {
font-size: 0;
margin: 10px 10px 10px 0px;
}
.dark .button-container {
filter: invert(1);
}
.button-container button {
background-size: 32px 32px;
background-position: 5px 5px;
background-repeat: no-repeat;
}
@media print {
.hideonprint {
display: none;
}
}
canvas {
cursor: crosshair;
}
canvas:active {
cursor: grabbing;
}
.fileinfo {
width: 100%;
max-width: 1000px;
border: none;
padding: 5px;
}
.fileinfo .title {
font-size: 20pt;
font-weight: bold;
}
.fileinfo td {
overflow: hidden;
white-space: nowrap;
max-width: 1px;
width: 50%;
text-overflow: ellipsis;
}
.bom {
border-collapse: collapse;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 10pt;
table-layout: fixed;
width: 100%;
margin-top: 1px;
position: relative;
}
.bom th,
.bom td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
.dark .bom th,
.dark .bom td {
border: 1px solid #777;
}
.bom th {
background-color: #CCCCCC;
background-clip: padding-box;
}
.dark .bom th {
background-color: #3b4749;
}
.bom tr.highlighted:nth-child(n) {
background-color: #cfc;
}
.dark .bom tr.highlighted:nth-child(n) {
background-color: #226022;
}
.bom tr:nth-child(even) {
background-color: #f2f2f2;
}
.dark .bom tr:nth-child(even) {
background-color: #313b40;
}
.bom tr.checked {
color: #1cb53d;
}
.dark .bom tr.checked {
color: #2cce54;
}
.bom tr {
transition: background-color 0.2s;
}
.bom .numCol {
width: 30px;
}
.bom .value {
width: 15%;
}
.bom .quantity {
width: 65px;
}
.bom th .sortmark {
position: absolute;
right: 1px;
top: 1px;
margin-top: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #221 transparent;
transform-origin: 50% 85%;
transition: opacity 0.2s, transform 0.4s;
}
.dark .bom th .sortmark {
filter: invert(1);
}
.bom th .sortmark.none {
opacity: 0;
}
.bom th .sortmark.desc {
transform: rotate(180deg);
}
.bom th:hover .sortmark.none {
opacity: 0.5;
}
.bom .bom-checkbox {
width: 30px;
position: relative;
user-select: none;
-moz-user-select: none;
}
.bom .bom-checkbox:before {
content: "";
position: absolute;
border-width: 15px;
border-style: solid;
border-color: #51829f transparent transparent transparent;
visibility: hidden;
top: -15px;
}
.bom .bom-checkbox:after {
content: "Double click to set/unset all";
position: absolute;
color: white;
top: -35px;
left: -26px;
background: #51829f;
padding: 5px 15px;
border-radius: 8px;
white-space: nowrap;
visibility: hidden;
}
.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
visibility: visible;
transition: visibility 0.2s linear 1s;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: auto;
overflow-x: hidden;
background-color: inherit;
}
.split.split-horizontal,
.gutter.gutter-horizontal {
height: 100%;
float: left;
}
.gutter {
background-color: #ddd;
background-repeat: no-repeat;
background-position: 50%;
transition: background-color 0.3s;
}
.dark .gutter {
background-color: #777;
}
.gutter.gutter-horizontal {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
cursor: ew-resize;
width: 5px;
}
.gutter.gutter-vertical {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
cursor: ns-resize;
height: 5px;
}
.searchbox {
float: left;
height: 40px;
margin: 10px 5px;
padding: 12px 32px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 18px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 6px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
background-position: 10px 10px;
background-repeat: no-repeat;
}
.dark .searchbox {
background-color: #111;
color: #eee;
}
.searchbox::placeholder {
color: #ccc;
}
.dark .searchbox::placeholder {
color: #666;
}
.filter {
width: calc(60% - 64px);
}
.reflookup {
width: calc(40% - 10px);
}
input[type=text]:focus {
background-color: white;
border: 1px solid #333;
}
.dark input[type=text]:focus {
background-color: #333;
border: 1px solid #ccc;
}
mark.highlight {
background-color: #5050ff;
color: #fff;
padding: 2px;
border-radius: 6px;
}
.dark mark.highlight {
background-color: #76a6da;
color: #111;
}
.menubtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
background-position: center;
background-repeat: no-repeat;
}
.statsbtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.iobtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.visbtn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
padding: 15px;
}
#vismenu-content {
left: 0px;
font-family: Verdana, sans-serif;
}
.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
filter: invert(1);
}
.flexbox {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.savebtn {
background-color: #d6d6d6;
width: auto;
height: 30px;
flex-grow: 1;
margin: 5px;
border-radius: 4px;
}
.savebtn:active {
background-color: #0a0;
color: white;
}
.dark .savebtn:active {
/* This will be inverted */
background-color: #b3b;
}
.stats {
border-collapse: collapse;
font-size: 12pt;
table-layout: fixed;
width: 100%;
min-width: 450px;
}
.dark .stats td {
border: 1px solid #bbb;
}
.stats td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
#checkbox-stats div {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
#checkbox-stats .bar {
background-color: rgba(28, 251, 0, 0.6);
}
.menu {
position: relative;
display: inline-block;
margin: 10px 10px 10px 0px;
}
.menu-content {
font-size: 12pt !important;
text-align: left !important;
font-weight: normal !important;
display: none;
position: absolute;
background-color: white;
right: 0;
min-width: 300px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 100;
padding: 8px;
}
.dark .menu-content {
background-color: #111;
}
.menu:hover .menu-content {
display: block;
}
.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
background-color: #eee;
}
.menu-label {
display: inline-block;
padding: 8px;
border: 1px solid #ccc;
border-top: 0;
width: calc(100% - 18px);
}
.menu-label-top {
border-top: 1px solid #ccc;
}
.menu-textbox {
float: left;
height: 24px;
margin: 10px 5px;
padding: 5px 5px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 14px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 4px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
width: calc(100% - 10px);
}
.menu-textbox.invalid,
.dark .menu-textbox.invalid {
color: red;
}
.dark .menu-textbox {
background-color: #222;
color: #eee;
}
.radio-container {
margin: 4px;
}
.topmostdiv {
width: 100%;
height: 100%;
background-color: white;
transition: background-color 0.3s;
}
#top {
height: 78px;
border-bottom: 2px solid black;
}
.dark #top {
border-bottom: 2px solid #ccc;
}
#dbg {
display: block;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #aaa;
}
::-webkit-scrollbar-thumb {
background: #666;
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
.slider {
-webkit-appearance: none;
width: 100%;
margin: 3px 0;
padding: 0;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
border-radius: 3px;
}
.slider:hover {
opacity: 1;
}
.slider:focus {
outline: none;
}
.slider::-webkit-slider-runnable-track {
-webkit-appearance: none;
width: 100%;
height: 8px;
background: #d3d3d3;
border-radius: 3px;
border: none;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin-top: -4px;
}
.dark .slider::-webkit-slider-thumb {
background: #3d3;
}
.slider::-moz-range-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
}
.slider::-moz-range-track {
height: 8px;
background: #d3d3d3;
border-radius: 3px;
}
.dark .slider::-moz-range-thumb {
background: #3d3;
}
.slider::-ms-track {
width: 100%;
height: 8px;
border-width: 3px 0;
background: transparent;
border-color: transparent;
color: transparent;
transition: opacity .2s;
}
.slider::-ms-fill-lower {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-fill-upper {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin: 0;
}
.shameless-plug {
font-size: 0.8em;
text-align: center;
display: block;
}
a {
color: #0278a4;
}
.dark a {
color: #00b9fd;
}
#frontcanvas,
#backcanvas {
touch-action: none;
}
.placeholder {
border: 1px dashed #9f9fda !important;
background-color: #edf2f7 !important;
}
.dragging {
z-index: 999;
}
.dark .dragging>table>tbody>tr {
background-color: #252c30;
}
.dark .placeholder {
filter: invert(1);
}
.column-spacer {
top: 0;
left: 0;
width: calc(100% - 4px);
position: absolute;
cursor: pointer;
user-select: none;
height: 100%;
}
.column-width-handle {
top: 0;
right: 0;
width: 4px;
position: absolute;
cursor: col-resize;
user-select: none;
height: 100%;
}
.column-width-handle:hover {
background-color: #4f99bd;
}
</style>
<script type="text/javascript" >
///////////////////////////////////////////////
/*
Split.js - v1.3.5
MIT License
https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
///////////////////////////////////////////////
///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////
///////////////////////////////////////////////
/*!
* PEP v0.4.3 | https://github.com/jquery/PEP
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
*/
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
///////////////////////////////////////////////
///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": false, "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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BeuFeK7g+ZOFoKnGbqOF2mBNZBCFQ4WkEKeFnYUs+TIg8mDs+fYFnRAcECn5u/lUECOFCfnahSwQLvhdBRBQz4VU+bZM3QXPKbYgUYXCmFOF3kJDBcaFEhDnBeAF0tCIVJwgWJRLBZpYWKA3hRwFlwUijHus0AUWhdBFo1Ab+esFQhAr+K759oXDhWmsvkq3BaKpYMio+SH5xnmOmoAF9EVTVATwP/nURa5544U8BdsF94UARWsFtPwkRbxFZ/n+hd2FV/nTBSogHYWfFBQwjHn3eSwQ9WBuBUcFJSmV+XYFyQX3MDogSkXU+fkFPynKVFeFJEW/SG35kQUvEMWMawJwqGGQ1BB9+fDkqIWkdKhAkvlihSkg1kX3+UMw1BDNwtf5hIU+KYC8PPk4aDRF1KDwBX1BLEVzvhv59QUoEEWQ21hMhf2FDpCKheksDEWWlJyFpIVeRRBIDAV8hfeFckUORdeFCHA2RdIxOiDv+ZBFo8hhRaf5OAV/+SUpB/k4BcAFMiAQrGAF6oU5IBMQ0AXahTkgE1B6hSVF2SnIBflF6YZORXMFpTj9hdpFGIXn4CwQb2huhfGFSUXqRV753EU9RdMUqfkpWCeFDsxehbqh24WUdAwFwkXRIMlFQkXBhYpFToUTknfJdYiiRdGFHEXRRXGF3EV5uRPYM/RXGOIFcjSHRaWFsgUoiZHsZ0XS5AP0V0VqBUxeQyBK6OYFdYW+AKdFtYWZhTJeN0WNhSdFn0VPRe9FZRGthU+cbGkCkNT5CkUeoAr873nJSmVgDqClIj8Fd4WhoDDFGkW1YGxplaAQxeeFBaBsabk0+kXbdMVIbGnk4WeF5OExoEj6q4XxBaD4DJCEYFpYa4XJoCz5+MUlsARpyQlnhdjF/qC5mGj5+OboxQgMEIWaRUzFefwAhe4FYJAaSnuFgwUPoChq7kXVBSyQTyB1BTr60MWrRX+FwpAIxaBFQEUeoLKwgEUGAnTFsvmOhVxQVJDUxb/56YYMkOyhtIUwBYhUFGkEBeRFpWm8+KtF/UUskCt8foXqqH9QbGmIhan50CgqkExpWOBe+QQJ0kUAkU5pIIWgxZ7FTfkqRXpQPsU8xZzFhaDohT8FQcXgkHquZ4VExRiQosh7hf9QqZC02AhFqIXgkCHFooXSMcnFloXryfagBlxzBYlFGJDEhdP5nkXoULCQFIW+RabFi+EBRZLFvUrlRZv5QsUrYExFpcWToJYwZ/mxRUXFRoSbRbnFHqBAlDiFQzABxc/5tkWdxf4sH/ntRY3FbEVyhTjFa0r1xfqFr6BVxSFFBsXjxeXF1UVIRfPFUuA+RVPFtcVRUEaFBUWFoKaFw8XBxRnFYoUskLN4fUXcRZOgoYXOhYWgtoVjRWVG0mloyFGF00XzxU0mfoU0Up3FZ8Vw8C1GL8XmxeGFA8WbRbwFrcWhCpyF/UX7RYtANLSktMdF1OQEXBmF50Xi2BuSt0W3GCAlkCWnebc42KActGAl0uQQJV9FUCUnNOglFYVyNPAlGCXcOQmGMkWF6ija7Uj1GuLajdqJyqvqtOyiIDXqsgqV2l0aQEok2gsqmkLk2h3qo+rqbKMaMtEc2pvaKypcJfZstbrFuu7sp8LRKpPqntqc2isasyqXbO26ekJR2jsa3gqyJbnK5CVu8vtKxxqJ2sO6rEqB2irapipcSgoljsp3GhPaiEjOqk8aG9qPGuXKi9reqviq9mxoqpxKh5zhNDyaQKpW2h/KVdJ22gtIJepvGk7aIyrGJTna6bpHFPpJNCXImv0KTCUwmhia+FQbCnXKn7qRbFolP7pnrGZsUSUqqhXaXtqM/gX5/0XqmgCRWpqH2g4O4HqdSkrshppqbHfaXMqmmgo6j2L4GqaygjqoenqKTDoYeutKX9oGeph6sjr4esQarDrEegdKLTlEOmwav9pkOmARwZpoOqIa1HoaOpwacZpOubGaqDoIcYmaP6q4OiBomipyGnklbSWKGsDKqjq5mpQ6eDqFmog6IPFSeqYcSqyZJR2a8nplJcjKmMq8Oip6aOxcOup6rXln2q2aIjqJoLp6Z7I1JT2a1yVYiG6aJnoXJeZ6CIELJdZ647mogTc+9qFMXsrKEInRevzoin71mXUOxSruOs56vyXk0cClZZkpGmCl5ZkbgHLKIKWiysIy8KV6sZZye+lo8OYgrUKyZC0IRFDgeOsCvWyACNni2ehLGEFh+KXhIjgC+ATGEFilxDiyWN8gICyGLDQIJSBMWGqw1CDJGQTyW3TMAlPMtED6bI+4mQIibk/QV9TUUNuAu6B+4CagJKUusExY6zD5VLAIbRBmkoYgTiA67Iy0smghaZVyxyDWoveItlgSpQksXKKirFpYyCxZLD8Im3jLggZpSrD6pQoIhqVT3DRIuyLM+FhC7RJMmAuxAJEYSA8UbJhlGKDmKqWc3NJQ+SDCoqUUC8iMrOAg1mTZvN6luAi+pdmu4SJryO6lSCCJbLqQekiDUWsgkew3Mk3I+WwpOP4h8Bj8YrykfVDbgJfJTGzagMd0bMjh4NIh97oNLlGlXKAw/ARwiFTwOE7AVPBxfNngZMG5IM+gwfS7MIh+5KkUIB0YeSBvyHisxBQp4K9e1ABMvj98wOhdfO9cHKAzSGJQ+4xrsW6gg8GlYLw4dmDRsCF0R1zmyLngrglLviSUcdhf4HG+7iGphGusomCeYE2MMfYmoMVQ+EhOIfJmYvCX0Pi8O8G8lLT8krTr6MZoJdhWlFm02yDp3svBuqDYIHtQhlytOGD0TJhrQE+lDiI4MEnktXRPpXUa4AjrqFTsRfwYnDXg4mFX/pBQAqDU2qBloiBXDGsSFTCASomgeZDimPJJl8HckONgpSCVILyZtBETmY0JRuQC6RCggCyzSE/gMwxbgKRMjMx/SAsY+TSOaNXMCAYUZfHwa6wEZUMQRGXyeZcRjMxYdKSgxGXg0CRgIcy5WLGQnwyIEUjMxOa8ZWkQkpDtiOQYmnip0KjQpUbwLIDhFGV2nkCgjMzJWXj0QyAn6Hkg9swhYJb0ymUkYA7COpAhfHJl/CI/zETCfGX+EKpYZcyuMGIGaRBpIBvMpOBQRcRlqGC0IL6c7PBIhnxl+oXAgO4olC4iiXeagrQStDpga1xitEK0DiAWIZ50YrTb6LmgBrC7DEbQVqnlIMdcOIyASCHSoQgKWHq0EQhE0kd04bQVtCDUPmU2tEG0t+CUyqK0hCw+ZHggn9ThtM60wrCqKY60QLnDjMKwj7g+tLG0mOQaIIGZ7rSHjGMgAqA7JD4MujzBtMc80mS+tHG0zLSJtOVlnrT8MGW0GbTsFsllCWW5tAZII2WFtFwaskhRZYNlvwbpZT1lAYzvBcKJlYl3mimq+ObSIfhMp6RrZbtUMuSq0PcwlZSnEKqhuIw+tDEwg1BF/EkgbrSihKKge1AfjLIERviVMTdle2W7DIogcdyqtBdljrRCYGA8nyETyJiKn2WbIBtliExL+H9lqKG6PK8ec6YRZFZ88XCXZe2UrEi7ZV3IQQpxGOM0cOXE1P22DS5XIQ60KWr9oIoh8XQY+B6laEzO4rwK6KDqIL0CCWU+1jTIj2VdyLVqFoUmfKX+orStWOXgqrQIoGQEZOU05aV66WTfaqMQjOX1oAVqROVZtJeM59q85TH8PciWWjSlkci4dGW0/4wEWOGl+OWnpM3axCm/4IhMKIrLKMyhabQ/CuDIESGi0JvUtuqAyGUY0bRXWjrlgz6NRGrl6tFgDN60GUSGgM3CYAwY5Uq0MjDy5XMmKOWS5dciyOWyBKLl9nzvZTw227yTgADlurSe5UXIzuVwhL7lvSHqkH3aR3nbSKblZzE4jA6WcXzW5Rq0pKCe/E9lSrTNiE6M9uX7ZaacbfEK5Tm0OurCjMcqs2WCykck7+CfqQMECdA1OLrlMDRBDGblQeVG5QUMP2VvZRXlPgzWoMKM1OgemZ34yyiElP7lPgwtDMfI7eXhtM58ntRW5c3lgTqr9P40EeU7QNf0huVRdPQ0lYyl5Z1lg+UP9JrlvWX0jH3lOeWqyJ34neWp0CTlk2Wt5S8hMuXAGMdEqjCK0PzlPgy8MGcQxIJl5U+oXaDS5X5gibQ/LFUhmUBltD1Qn2CBYBvlAwQbUMIJ3uUJZbNwYuXL5TgEQKTLKBrlV+Vv+KAI1Yj4oXrlqEQRkITwl8mkTLvlNT7KZOLlK+UBfLoo7+WnpAEZsOXP5Zv4HwKIICrlZbTyRoc8zKGF5egVB0ApoCAVZeV8qkQVKeCuMEFlOBVI5ds+fnRsZHMA+SCJCC1lbGTpdO3QXDoT5XM+alDY5WDliqEr6OHlPrR/fGzIaPzu5Zv4MBWK0DBxSgSiFcKg91Bk/OoEAhUoEvfJwXgiFW4hZvxM5UoVzSDskDoKorTxIecFkBU2tKQVlOiXyfWgS/iSCCd8rXyg5ZiKCHHhwFJ8weXFCjmyX0hSfKG0pW5ByEX8v4ySzs4VxBWdZXYVZiHz5W/4lhWX5arlbGR6RIFQaBVsZKjIWWQZ5QllSnyLsFIVtOXIFZdIwbSaFXEVT9DNSIYVeSKRdvniaPxs5d0EXhXNIXn8DQo5FTdlLEwEFR6oVhVN5W60Y2xzAGYVdeWBFVbiZhU15QQVYRWK0OYV1z6JhVrK/jQttFHoBIzYDKbM57T0MpgMUso68baZozRSyuMQ/1DgpQZQFYA1YTVgRfQttCIgnsnYjNIVLbRftGoMkpw2Mp2B4xW2gKMVNVxf2Nr4sxVjFTClqETdFXA6BIxt2KiJvRW6MhX0wYxrFQe0xgz8kQ2MNxWApaeKK7SxjBXhqIwvFUpqjxULFcQyyMwnFYgMwyDnFaYyFfQTFbwAuhHTFfFMAxWglYvkY5k7/j2qQHQ+QsvZGkjvoH75gTzuXMd0o2AvYtnZuUj+fhtK0QqNSDl+/Uq4lUYwRkLt2YiVQ4FoysSycJWMSogRaL6mFPCVnqDBvn2EtErMWOG+RJUD7jXgeMFuWJRKKJVHYeYIoELclWdh1d6SggiVL+jfESNYmzrUpBqBYpVz7BKVyJU3btuEKBjrEf1K8WooGAZez0rRnD3oopVe8iZcm3TqPjiVoBy/tFzSepXylcIoqVz9SgbBx4TSmkTKFJXtDNFcapWGvoQMawKaCJa+DpXXYh/Kv7QlXiNYZmq/tOT+I1hOnL+00rklZOvZy0g5sGAFwpXwOLqVvpVKXPA4JD64Snqc8DjYPtxKnFzxlR5KJSRswWfoaUqwBH4c4ZWhSk6VGsHVXIFKF9lEwSaVH4KFlZtRW+hFSrmVL2julbaVmZUclRbejpWaPowgUdGwlU3YuKBXSu3+IXSPIDY+tlCB/sthWvGEyhA4xbI96PFsiwJY0EWKPeiQHLJKJnruUS/ogv4wuFb8uChDdN9KZUJ4nMd0uIw+rDC4fDooGAdgo5XvgOOVpPLQyiAo7iErcmespVhc/iW+x3IVbDC4GOooGFfBMLhqKgFId5WvrgfBl5UFgt0gZ6wBSDsSk0rGbk4hB5U8yusxPH48JgOVHZWtpWQBUOK9lQFITN6lWIyIc3gKlQVsPZWwym1IubI9lX2gVZW3dG9Kz5VxUehVdmz3lRfBt3TIVTg8NMpwVUuiiLgLsigYUFWbleaybC4blWOVlOpYGFrqPZW6KvRVOFW0VQKVnNAkVZhV0SGh6HWKjFVWirwoJt73lTdKzFWqQsrxr8xAJdEY03RZBBiJ1NiSVfLKS/6X4bY6slW2UHP+lRhGvosYxsgM0cyRF1g49ErR9Uzr/v2ZTF5qVXJVOPRaVWp+lckfBaTcvySnetIhELASYkXwy5gkoYIiqTy68gRYfSD9LDAYL1lbdJ2YB/Rxfiwi47zSIcQonFBqmHGgBCABVVci/GJefpli0uVj1M+id8R5IU5Z7NmHLAnwAVUYnEnI6X56mG5V3hAoKDqYnbxBpTVg2VXAYpccTaVX3l6lAmJ1IdSEY2SUIhVgt+U9gNlgYdmnMmsgjfyZIJQitEhL5Q+QnrC72eE8FGWdrOpgz9l6rPqYZ/SKLMEikhGGtoNVx2x/opc80iGr+SAgYiJqhiShVbDncO/Z0nyNVd38mSCSPPOYx1By9Ng8ZVjSmBgp21WR3Cgo0iELVQQg79mlRgNVG/DvVktV/5ArVV+09aJUMMtV0iHDjKmYp1UbUY9VYZxQ2QdVEBUcKYNQkjxk/B+AgAwQsCdV4o4bVcKglVSpiQIieKF2KYZgw1X8YCWMdgINLFDZ/VWZVU9VaLaXrtYqj1WH7G1hZYkdqjAajlFs/oFoPyCPVXfweSJ2MD5KmVXZ4JhQgCI88dLlqIaZIh36kiCZVY1QIojJOBqZR1XitA7CMtZHiE/lzQjNiMaY+85BpUzVGcKjZCRYR1WwyCeiHe5OVMAQo0B01RMWkRyPVX+sxQF+4HLVNOQIKMCAOVXRsKDVzviuhLf+bsipmI9VDFAhoMBiGqCtIMM0v6JFfoVQj1Xawkgi1SI3VRa04KKHwtLQsuQS5Hb4Mv4RQAwUNORW1TWYzSDS5bogjiKHwn2gZ3g05HCKhFwj+nn0GuX8YIGYcjDe1RjVcJAy/u8UxVX+ILk0OpiDmDTVsQytOKKIIJnk1WLVzJhGpaNVFGiJ0GHZqqIa5expXtlHoIeiwBDZ1Q4Il+wJLHmlVKXP2UdURDmWKebUcyxGCGLgK1WCSPFsxCIMInmlpMDAgJQiS1ihVYAMghWPwro4KTB5pcPV4lUCNFYipxBd/EugIjCYdGA8T5iVKc2IjJEGVQ7eXdmkijUY6bClUFWUFDnT1Y9CDfxvOfPVBxWayARoOHSVVOf0Sekb1QuY7qHeSISY5NHbWQRwEjI+qqcQFHSAEPpQXfyTsImgIjHlEf6hcBqkIIMI1EDwRi/8mUDXZUa4PsJLOEg2deoTBFSc8wI8CPGIj1guKvMCN+wINaFSLCqRIc5+s5nqQUKCmQDPasGwsiGtGGTg2upcQZbKdbSI9rOZNEhZfGhOvmqykA0Zr4DwEF3q2NQENWQ1Rer8vO1BhDUMFHBZM5VLOLg1KEgSvOVhAIK9iFlI/DUENecqu6klmdw1xypgNSWZsCGQNVlZRLRQ3rCCylQ0NUqFojWgNWVq9zgnLACC7jHENZ2+rAz6SOTqObBqNbw1jkiulAvRQoJxqmZIBtg2rMd8ltFcNcaqjQiKbiI1sIJQ/sI1lkRqNYnQDmoPlA418bobyNY16DV4rho1/0IxYcJ86D48nAVBfHyF5ag1YCHHfG7RxDW5ILCCX36hbmY1CCDNlXAap96KEGBIrESAyhk1cv7zPNjKYgjGLEpZeZpKjIkIkVGoNSNsUQJlNeLsSlnIOoQ1oiDUbtk1Y0rTCOJB+TXNNbMFwhqmMCU19wJ9DFk1jdRjSpEhcSyoNVkgghovKo4+1FnWXACCVHAESF2mO6xTNWGsSllRULN8VTB0SKHW0vKQNa4+wzWoVWECH6gLNdVhiFX6NdM1ZUisRL9KLyqEfsM1fppYPlh0jkhNNVECVzWGutRZfDqQNYL+4VnYyh8CvWwVNejKH6gA0dRZg6q7NRp6IVlUav81sEhH0HQa3zUT0ZM8cUGQNZOVdcicWWzKYzWC6hM1kUH3ApwQEMhdpmacQoJooK01/TV3NSUY+uqPNaCcQoLxMALItzXqgsS1XMhtNedKZYCnla81AzVRMBS1OLXqgougqUGQtdR+xAIJ/tRZD5UQAiEZLFlMGk58z9FItSE1lVR64MM1SzU0Aj1CWzUflRACpcHDNQc1tnw8tdVhHT4xfBy1pLXHfNFBFzWAymWAe4YXNac1x4A0tfs1uhqAlAvRGrV0tSWCLLUT4Jq1Vs4VUSc1kMrCVNhAsrV0NaguwxnFNUvBf/xN4LC1W4BpChd87rUVNU6amtSdNTRA7UpC1BMiDLWqWAD89bArGbS1uLUdNNi1lTXqgqmYYT79BuG19+J5NYG1C0p2AlfRgLUBNb6Ya1HUWXy1KbUXpLM1GVEWfMa1izVetX/8vDiNNRZggSFGfCcgdeoIzKFBqC4htaK15bVOtQG1v1TFtRvw0wAetdlgFCIqAsTgVbVxtaf8eVCTSJS16oJFUNa1pKjTSsiUWjwVNX81zQhaQTaMATVdoO21XLUkDEGhNzXVtbYCC7UktRfQJ74qAuJefTXDjB415aX1tRPgurWT4Oa1IzW4tTcU2LXXteO1CmE7iDa1Fko7/Km1x7WJNfWIlChaBFK1GnztIaK1jbWv/PwarLWIAnL0VsjHNXi8ATVeoKm1UCDptSz8ibVTtcm1t7WDtWOyQoK7MJO1z0hCfK+QuEYmtVS15vxH0dRZbZFeSoUouXrDNSegk3x+pQG1FOTDMJPVJBGcMQo1nUx0dUFq5NFjGAWk0lUmuLNQrHXzFUcW1WCDruv+o0w8dWx0jCEKVQs2e87EMbQhRkzp2JQY/erMdaYgnHUMdTYUZkA/1VYMTlHZ0sV0gJT54jp0bBHCVE5ihnRhdD0o2nV7dIj0QpTP8Op1dsiy8DZ0JnUGVGi+BpF9dMMoUzwOdLZ1OuqedOyu8jzfQHaQb+LASOZ0+nWC6IbCoXQ/PFcFa9QPyLYWVeJXBb5YPCjoWlTp9D7aiGVR6z5XiPQ+kqJSUUV05Egv8LYgMFH+0MV029UqLHeI6XR8qODSVyI1dIl0eXQ2/LhIjXAtyS4+iDztdJqp2ghDSAnRNnV6qTveJqCDdLRMpGiB0BV1yLyTYkGwGGK1dUcg3AipdTbR+kjmEQZ1CdFiNkjc5XWvVPA49ygfiN9AXXXHlVGZeXRDdcAYvCiXdJZ1M3VEKMt11Ag1dbN1gUgdSCqFuqCLlc903AgdNJ7Rc3W9dcuqNB4eZd0qFg4iFJ10L2VtdfjRObD0CLd1PXSnSPzIj3WxCiTIguUnMBwoj3R2rpzl1wjhPMTUv3UwGNcI8WwawT4gn3U/MPSwgVGcyNcISsJ2yLhum2T5CFVR7iEE7LJISPU6dR4OoWSw9bhADUgODpzoDzBQ9TkhTODJYXlMKBZVlYDwuMQBKC48gPV49c2pEzDfdYJRdrLP8PYWQEio9Td1KCCIPHRRMDy2dECwGnWdxDQI4XQI1Ht0wiCd6CuopDCGdUdQbsj0CLz1ZnV07FgIkgJccIZ02aB5iALAYz4N0Q7IKvVdNQVGXshGPCaIfExemeHIUvUg9SLsVEgi9VLl1wjX8FF05sRshp10/DDICEWIVyLS9UxgunQfSOrl/3UdYO+RAMjy9Dc8Bgxpddz1zPWi8Fl1eg5u9V91ukCwVUtab3X0WoV0NvW2dE913XXeyFN1cfUb0XHIKvUs9dXRECJkSQ8wMBgd0fsgFPbgsDj1edGPduCwyPWcSDTAUdzF9Rj1z/Z5ePkIBfUdvkQkkPUJ8JxIO2DmEaxEP3wkSDh4VPXPEL51ykJNoAkozvWpdCuVLfUbAKvcnEgitOJI9PVDykgxciDWxN08NFyl9RNI5hFJ9YX1mPbdPB0I3XVtFH8ps/UldZwwycT09WH1f1EJ5C9E+fV89bykcaCw9SX1gMSxkNOoVul7dOKgcPnY9Sf1H7gGHln1ivWvRFhgTIg01PZ1b/Uj6dcI4pTOdU/1hhH69R51d/WriHlMJvWIlVf1VKiW9ReV78i8mCbAsSlvyJEcAMS7PMB89pVqtKDEuzwe9TbRT8h99X+IOp6PyFE1X3XLGlVIEZQYDbgm6WS8pIhMAfVR9fDELtDhdEv1gMTK7NQNa/Vbde/1Johp9Zt0VbBU9SQirx6DLg6QPPWedqPBf+gZyFSo4vUJ0Wfof+Xn9ZX1Eg1ldQwNa+hKKC8oSfVJMPJp4txSDXt0eUTnBej16g0vUczcq/WIPJhl+rHVydCYhUpH0SZ0vcygZdvsSOrRwG/ZWS56RT0ourkTzM0W6ew7dEDo+FHP5MpgPnSRdGgw8DIkInyoDg2wPNqgUOrWDR3KYPTE7Bl0i3Ylvi0xRWGZEMaKqCyBDVLqocCQPIIwPg1rUYkNyrIwzOXkHg0ZUL1RoGVl+PrqnVA5DbYNv+nudOkNFg1Kwp10OlD18kShS5jhdDENnX4mDbUNEQ3nPKENw77gqLkoHywNDVd05Xo4JMb2qZgpSC7AsdFDmPENyXX/+ObRUQ3FKLRgNg0tDUVhyXCxoNPwww15dPtgsQ2sMBhgDSHgqEN0LcydDesNAaYcTD+0FcRwwBF4chT7DV5Ahw0HFbwoHCG+sMoAeCGPpRjApw2fFaxkoDIrwDuo1w1I9M8NZw34JF7AVw3E0acwXsDlpZJgmlXTIAcNXw36fjcNqyi+9GQyeNHVXJ8NgpHwOBcNe0mbSgzR+1HQjRjRx4BAjeCNfRU/rFd2vw1RoP8N3w1PmIywfw0ZMqURpjqT3HPAwI2s0ZuRBI04jUSNEI2YjdYyYI1HDSEyVI0Ije8NLLDIjd8N9fzMjbiN9w0p5EiNtw3kjapVxw3b8OiNFxX4bGaCzsA01JS0IyBAwPbkZw1CjcKIKI34jQqNZw2bEHCNsiAsjQIUiobYjRqN7Zn1NhbR7I2ajSeRXI00jRiNAsp0vuj00DBSjUj0ko0qjYCNJw0CjTJVWo32jSKNgJWYjRyYBo2s0e6NJw2EjQnJP7RHXB6NqlX+jd6N1I2+jZCNXbABjTJVL+zajdyNuo1G7krcEY1f2PGNwY06jWvVo0ExiMrAyo000aKo0Y0mjaKNZo1TqAmNEwAFjcmNMY2pjXUOv7RqjQ6NiY17hDmNoY2YjZMShY3sMQ2NJY25ja6NZo1JaLWNjI1I9PCNpY3CdXqNWDKZjRSN/JHCjYiN46CNjVnkMmydjSfV4o0yjTCNVYg09PsgDNElJOONOhTLjS2NdY1mjRxeC42yjQIUW40w9C6NuNH1jX1wK421vmqNPo2jjaFVzo0ojZeNxo0bjSSNHY38jTCND40MjXKNw42XDU+N5aTvjZQxn40TVF2NZI0HjQqxJI26VS+NgjE9deuN340rwL+NpDGQTeqNvY3EjYQxoDIZjVBNWY2t6SV0IY3fjas8V42kMZhNI43QladBE2FSRvLRutEeDjmwTtHNZQ9hsSC/kRLRbKmA+TRRTr6qfLRNkYHgUZNhPKJQUSRRseSXvPBR5tGmfCJGOtFG0RWk+WwG0ShR2XSBHvZQ/kGa0SRN5TBW0SRRcD5kTQrRGcGyTf5RJgp8IacwjE3aUcDRDE3e0VRV2z6DQRv1c2GvUqOB1nlovnW0z/VpgaUNAk2vTI+BXkzBvoPwqg0h0Q5yTNKZ2l2IzMm98o5NkkJaUf9Chr6ETXpRek0eDpRNelECUbj1A/oIjupNQU1OTTFBA8DqUbZNQEHVQfy+Ph7k5bJRylGSTcwo7cDqUaJN9EE+0fpNN/mRSPxR5kZZTX3SHYG+TZNhlk07UaICXk1h2seILk1OvvFNx348dbywaTVeWjdSR8Bx0aAYCdGDPlfAXlFV0SpNOaDPUQFR+k228TnRY1F5dQ81phGF0YwpoJJ8QaXRB4gcuBH4ldHJUXIh29DkUZNRyYjUheI22VG0/P1NB8D5Uf+hciH+JovRPdH9TapYdeoD0Q1I/jTZLFlB91hUSKfexGHZgZdN+k2aELm1J033TVMYRFE9UcvRhuX4dYsSO01NTR1N601DTXOwe9FeLPdNzxCzUQ9R001sCGfRv9E3Ufbmvg3K0RtRK00vURPRR1EZwWdNtVEP0aOIbymnUR/Rm1Hg0sFmytHRUBpNAaDeYZGBYM39TYtNaVGgMbvJzU0fUevBq00QMc/8Kk2piEjNLALQzQDNKDHSULBZF1Kv4JgxqDEiTd5IAaY0ze+s03lxjRROF+Q0MXIUos3CMWcNgJRizYwxAhSSzVwxLNFljaeKZ8mzIFJ1JDG7jfB4F+TY0QzRMs1SzZrNoWx00UrNl+HwvkQl4AQ9SeV5AwLgBK6EQOCDqEQCcgRekCyYeAIOza0gvQzt5l7yUszp6Ru5hwRYUvuiioHgBOu8/gyHuesERVCf4Oict27wGCCQ4c0fVibI1uAVDF2WQTwUIH7NiFBP1LSQZ+jNrE/U+eKuzSu5jBZwio7Nqyr2tuasJnn2zc6ZI+Bb6FTBNATu+GXNqXnIdkXN+KQq1nnNrSD5wh3Kmc2A+bap6iiRlnXNDLmyVlXNiwyiApPOwZCe4L5BYuaY4Dlgw830tpHNpyCq8qoWugT5zS1Qvpa6kPnN5nlwhFjQbc1fuA0Kq835zVtIJqTx4DnSHAwZ5t0ge82zOa/Ok83gIE7y9rbOWPrg08g+Ar/UO7zcoElIFPrgBJpcqJAPzQPN4+iPENfNRlbbMDWQ582Q5ovNTc3HzYwW/81rILlBXZbfzbbNkU0LzRbN681CzcklLYWpJatWHdzdLDr0JZjWRMIwNQzaeP++5ASoMLSQ0SRCGRIEOC2BYAQYkkESBNKN8nnLqfS27iDILaBwhkHkBD1NRC2c0FI60o7bLEV5275xhMnwSCA0LYPRyYS/TeV5A8EkhLwtoHBWQa+EeLDEZTAYrHqU5oIt55zOQXcEoi3MZa61NgRuEm0Mv9FfvpTmawggLWDoWC3MBFIt2ayyViagXc3cUTFhai0wkbap4Tq4hAYh983SLZ0QZ6TULWHAzRzohGQt9YQvwQQta01n2HUUOi5lWF3N7BI7zegtxGVyuGdavty2LacCjrR32MYseuntQeQE4GScLdMgES3gWOQpZ9iSQiEtvXIGLfCgMG5F4LgtMS2YIcIFQJWZQNr0ZtwntAXi6DKywBsVhS33EAt5zdSxTGHiJS2xTPktqzh3eNr0VS0HFRUtDS2F4Ce0wBVFLWtZO+nWBSxKJqBAgo4sJerBUJKCzrAVSsxgU+CjkKKBrsoOIttYd+QTKvhIzmDjLSte+dbefhuQygL51tiVAIyGfEIm8Ep1RoCaDum3WFTQ3qoLFOdYOebWqpgJpIICEDPqYHiESqNmGxpTLbJYixIb6qMt7VgPLTMqgy2LAjctOkq9LeZCJrC/KpSccmTHYBV8fy29WDMtF+qacA3KzpB4rBXqq3T7LY4w4nwb0GQcU5DCSjKMu9AuSi8tFkqcWXbcEK1lXtaM9c4fgiCtuPHx2fZRgHp41WOimIBvQqpCSlEdmk/Q30pDnOhqlg69WNPSoMq5KODKjK1cyhwoWuzXaXStfj6raRR+OkoXSb5KqU1UGvytDYJj/Ph6KEIFghm0w5r10WsCTWCZmsKtTFiyrYIanBwdgpSt6oxm1G9KtK0A/ALM8FWsrT58FPgIkQqtLzlRAtgc9MqarTitEWQcraqtQXzgnNq1zpCOoCwqNq1XlaKtcK3HZJat8CBsylQcM2wQrWMc5q2eQYatUSbnShvQFdF2rZPBysqVwf6tKf7IrZP6Kq0E8my1ysoytSGtEioJoKp6ia2sesrK8z6GrepliAIFeDxVkq08KiTAOz6ZrdhAtXwFrVTKrQk/tTmtLK2eoAQ13wSEyk1gv0rJrRuViq3GrcSAL6zerYDKQa0xrUU4Ecg0dfC0E/iraS0qPTRjQMx1LqiLGMOtymo9NN2QzHVDlNDY15FRBOmMOxjjrTyNGLSjrVLYc61gpP2tU614TWKRxfkf6ADS17gwJrFgIVJuyNo89cbhXm0gVKpnrW9hL8zSpi6oll7rINEKvpTfEesgd0S0NSCwsp7ExIdiZkphYKCKnngGXusgdwK+lFlZh6BSSk+t/QqHoGiqvpTgHIeg2xFcBURQYxBgraetRxiiHCBto8aulIecm3D+cpIWbFwAbTDGMDX8cPsQ+jj4baGw1kW+YKr5OG2loPKqLnhP3i+t8Pmd8EDgN60wJljoBSwPrdKmu5IbnLRtgfklXusgVG10GBocP61kbXxt761XMpZ43G1qzHht3flxZTnIWvjMbYTgVBxobfRt27Cgbeht65KCWpo42G0IbaTsG8bEbXmwhlBfcjptcyAfyuRtmm36Wgj4Km1ybYpa/PjIbbjSB6288rJtdSC2bWZtkm15sGKaUPm32Dlg8K2UoJZ45P5tIEZtQm3zcHptLXIkBNFcMG1z8uxtUm2QbfZtAWWngg1N4w48QkuiGiC6Kr6Ufj6JbVaKQG3CmNxwgZot8jbWvGx4IHw6T60OIc1iM5VYDG2Vt7ALlVwFekQVbAVlq5UZoLBWVW3/MOcc+8batXlthLX2+eq1GiARigr5Qz6pbZTqLnjdbWB4N0pNbfVtXLpCBZ8lE+l1Do8EkkxtmXDYlkDdTLpq8E22OknG29isRDoF7JzfUlx1yHiTbe3Y60LIDH8Mc20bbWTkS237bXe0e22eTH2ZJs0AuV9qutJgSqfUZYaV9GaS1wIQUJ7WYXgR+f4AYFbM+JNYAXy+7JnmtbyUAl9tYFbj4QZYiQiFVhD851hHeBXc35ZLckxY2z5a5ddtrwKLqtGuHKgk4q3w45DfllKY8OR3qqsuv23Q7Uxq+RYfbWJYj23aPE7mZtF9BXU4f5ZspfeQb223thVmEfnXcH3WL1iqQvEh64auFv0K95CFHF2WcKbI7aLw0jHN1AAEOO3PIIm0O+as7eDtds7ucjjtReD15jTtegW13NZEICzBAv9t3QTCICTtvYLA7SDuvQifbTVwMRYi9VWCMO2JtNrtcmQo7dvWfFBGQoTtPy4TSEMt3O1GCg8a1kKHBfL5SlZS7bbtc9Zi7aOQA8RW7Utwwu247ZJWnO1aWIbtbapwLRtZrEEtpAMU7EgR+SSgwopUmFeVUwATSEVaxRa8bPeQYe0/LlfpUwWZQLQgpW6XJa9tNJCnpBOw6i2h7efAglYHUR/5OCAraI7WHviF7dHtpW50Oh/5Y2Ax7UQ6CflpIIEhFha+WKHt5e2O1q7AUYWnEBIt6FoLVaHtx2mjba0VRSoMKFcYjQi19EBQQ+2z8GX0i0SD7dDY+4gntJF0aZIRkOClo+3z7frkD3hL7VLYM+1NLWvto5Ab7cFMU+3r7frkNBGEJWklJrA+QghY34pNYPWC4PmJCudK/FGgQmftHEq37edYOLTUSjx1lErP7Q/tViLDWDJM7nyjZkyVM9wQKiftT3l8WAf8gB3mQqsUIIK/7UEF9CAl/IsSRkLPTqt8r+1jLZBswaqP7STiyB3aPIKKT96/kOhZFkpvEiiFl1lTuqCMkpX37bgdX5BRBcMgL+2hUvMtYMgz6nVGZkq/kOPZdiBBLPgdPtrETr30LyK/kPBZXkpPCuQdXB2lNaDpLsXf7fwdlMhIHSqiECrAKmlKB/HSqh6SX+2N0VcCwmSyHa6EcQISHWEFflnCHRGVwe0ZShtQawrYHYstPB0AAiQd3B3rWNQdBB1GHbXgrwIVFrZK8MBFSpodpDU4uPgd/FrufOoMG5zmBURB/B0WHFftRZE+iraVUh0H/NYdT+1iHcaqUbSWlUId9DXfUL5K7+0ErdjVO+mB7cH6jyzwVTuFgMpU0DtKiR2CGmxgGW3g+dfUY0rpHXHtdPDYytsSgNi/kDfMxqo7cKVtllCViIUCyR1XlVWINW05Kn6tnB0+rUwd3RDVHQs6ghrOsJB+llBs3vwdY6ioyg0dD0o8in8cllChrVistq3NImJVws3fJe0VWgUsDOuKesrSscutfVZTHdB0bfTsnMsdBxUXOOjARR1hjAd4Wx3rHQnQ6lXzHUbY+x3THUp1fIy69v/0ZmALrNCms3BWhIv01x29pGv0MMZX9B8wH3lU+Cf05qEpQBo4x/RhJGf0ZtH6OM8dxVXAonf0Dx2P9MxyNx31jLb5nPggDNP0kJ2mxtCdtozSKB14Fx1XIQ10BnjvHf/lMAxY1arGONXu4Ya2msaRUOr8RfAOcjGW6vyBPK5yvJD/4IdUbmBwnYK0LAgPRTS5/jgUnTWQBpHe5knGXpZ8ZYOg0Pg30DFyaRAk0EV43J05YD3mpcoC6CG2fGWtaFE4QuC5pk0g2eCSjkydQOBB5vptL5acIPlsVXJynRQgxuYpxmqdzCAk8BnGJJ01kDqdnXLuDE3cIowD4Mo4Rp2PEDdIZfZanSgQafpQ+T+WNp1WnSFu0VVgBmadd24PNAb6mjjWnWiIHcZenTsCqp1uneCsA8ZJnEG8USmjxk3mR1JAUHPyH5wFvKR0V3q6QKA2sZ0rxopQi3iejGFtZW7anXTsWXKTDRmddixEbUqdAGjvpgSdNZDencj5PEzunb+me0kejGSiIXJFnUDgoJ3Z+fmdNWKQFgLoqeYV1b1mtZ3FVeOlosYdnSEh6m2NnfZYvPLmnQcQtJTTbpHGh+a/4OKYdm2SNu/gFoUNnR+2ZRiLyPydCZ2BHpgmQ50w/GLwrp1I7uQVaCD8+PNgw2Wrqv6d9DbkFaJlNsYncuQV98xJeL6dp3pLna2d8kZC8g+Y5OB8quSdTp0bZaH6vsY9nWAMkdz8OB+dDE7TjtadWxgqZj+d/dYybUqdffhOOMnoRpC9yYMNfPnznesJG8Yv+PFkHaUL0c14a52iYGJWSJ1mrmhdksyXnVhWfZDO5jhdR52OLNnyp50J/HOWN52N8h2lCZwt8v+dWFbExA+dLnzhzvw4kWC8JrUYz5SBeNads1BATh+dnF0CctxdRizabWWdlnQSbZu2FOClRh14//gb8hTg87BJeLSdAxDuojhdns6iXUGdKDZf4AfAS52S7l/gBQjUXbmucZCN0SnGfF3aGeRyHF12aUxtn87sUNVoLXLWndhY7Z1KnRFlLE4gLspOp6BTtKAwJ21dVgWMFu4TbU5dBDI3CKtt2vS20B5dIk4+IC20Ll2ZTEQutqkAldNmpjo/FOvYvQi+XTFdEV3bZlFd3kDBXdsV8thBXTYyIV2Alpdt/9XHgJ06g0jPips4ZeoJ9gZKtJQ53hIobRqkIM5+5V3filI1lTxQcCVdqEk5PFOoqy1iNc7cut7ygpBw7vZGEK5CHwJN3vA47qqtXVvchG1a/JE4h7xmhuR1oDWVPCw2kIKT3pB01EqlXWSu0STzXUFEfrycQHb87hxvvNJ5B+o74EDBLJgggjtdQjw0zjVqf/xukTdEEzoQAt8RtijIqKiCfTKKxAUckBYkDAGVL1wzGjs1rXVtXaxaNPzE/gaV+10xLYK8w10U/Lw+v7QLygosoj7ulTPKbbjXahWNdvys1NM8S10cSij8J7pw3S+1mrSLXWtdjPwxlcn2N7oRBENqQN3Sqtjd+Bh8UO8CPVEV9qLwP13p3mSukEGyQgjd1vZ6COFKnxRyPv1ddN1vXYrc9aiQ/CDdXV0nrbi1O7S2PPyecQJv9II+EihOJezdF+j5XRlKEN3vXa5tj10M3Udd8N04ZWdcpqmy3eTdh1yWbYUCmJRvuqLdlsr43UPouJzkgtxRINx2UHzdxN3exHeEwaqdrMdqE3Vs3XLd4Bi9DAOcsW0xulHtoHrkVUG1AzEfOpWEXzVzfN7Ebt1vNe1ggLpe3XS1KCJrUQqV07X7fIR6EPTO3eiYOLqk8QE1Ed13LmlaYgJ+Pq9E+bUn6Bi6aeiWtTHdffZZbWARdgKtwU7dsHWXfBykA2jB3R00rCl+3dG1O5Vr3Pl10bVdPkHdybUDCIHdYd153X6tX0RAtayQ2rWvRF4ae/D13ada0gIVHY12lzWt3aHdmd1Cgvx8gry1WskCFdFnXS4qw93hrcjcULUP/K7d5LqIdZn+3XYvSq05GnooGGu19Ey+3d3dFPyFrR12czWsDJPmisT4pD+1W91jXSNaiTUZrTdESrUY0vrqvCj93UECKdyZ3ePdKd0Q/D2tEx0O3t0Y4zhq4mGMeRGrXDJ1C60v6N6CgD1r6Adtix1Mjf/dvxgEfJA9Cx1X2NA9P92idBA9CD3mVUft1nJ2krPZIPjl+UCkVtlPCZf0lNTAWWAgIfI40BdZ/0nkctg9KnG0Yi1y3ZBP3g6M6j7fHc8QC3KsRL/8tIQ/YeryMFhC8u4KzlwOjPqBisnvEUw9qTjwwK+ZtsyKgYrJI7JdNc2sislhkZxZMo7N9MJZhD279Lio/Fm4Pd8dRqpxJCYEFc3P9PA5wiX0PfA5ndr0+MQ9wFmUTS3ysj2GPbBt8/TbIGSyBkC4/uY9fD0gST4EislcWbvQz3rz9GvA9/JcYB3GBj0ZOKWgYqGv+eQ9VrL2Fr+m6D0V1tmuWXJTULiyMIQ+Aiw9okI6hF9OAnIesFMRcXJxPRNiM9bJrBv0ij1krf3eKj1hkQE9k3ImPV49y9Zc4KI9ZTjuPQI9yT3hOAJU2QKKyfJZcxwy+iw9dpE1PdD4w1BukZiAj5hgnfUgRfIlPcCdYaqtssgse/nWaGJcZK0j3t8drD0LMusw46ZNPQ0RET1pPROIaIqJPXc6S2XjmWg9eggkPddB8/QTLSvZg6C/IFYsttkGVJNyaK0r2aQ9np1QGZY96+od+SctQPJC5oU9GIw4Afw99zDEycJZPCXxnQuBK9mr2kc9VYT8WYYlWvg/LY/ZLWAyOPlGt9kRZAJyNrqX2bmu+jimEQM9y9DKXWWgYj3HZEC9AuLYOc+saT2nBo5Znz3L9Ms9hj2QbfitLz2ISlYs11kXcWC98L2uWUcS9j3n5T7Z1NqmOOC9+tmd2q6dvSAqWfXgzHL/Pf3ZhBWpON894TjfBCT5Ny0fPRlCTz0Q2cSAwRx/9IEQnwpjPUQ96L35PUOkIXIArWWyFT0MvXxQHLLSvXdEwy37cp09eD3rPTqEExCFPVi9MT1dQms9B1kaoVly/S3BPeK9CYWsTpgMR3hsOWx18thC9Oa9AV085CAME/jijBO0Vr1+FL3+VYWGBWa9zr0TtO699jQuvc2FhDF2veIMFr2LxF69HUraXlzRX2qmEbzslO0hxT4MOxJ/bZ7tBZajZkAih/lk7d0Eib0blQrtbQQdyThVGb0xvQ0ut1iq7eG0oOa0rHoF9oFF5YKw4Mq67W/4Eb0VvYs+MUR1RorsLu2XAoAEbGBTLPztl1DFClm9qkKm7R5Eab0a7RNIRO0KgeLs0u3fbbuQHzXDvf+kd+R9SpjtQlqjvem90NnmCu7gJBku7VLCZASyPb0dA6qEhUy4xJz87U29ShUmIEO9073FCvE9xb2QPkYKx70k4leqNQqDvbdYTO0NCsoq8FWD8CexqEThPL0dt20TvUYQS71vvd0Es73B+e7tYgqTva8sbO0oFrAthK3liQ5R1ZEtpE+GIuJR7cpgMb2RsfHtLe2FveZGxwUJ7T29nah7BdXtaH3YhBnt1kVlvSride157XB9Uszx7RRUps6OLDbtH/DCiuR9DAWYfUv4d+QkQmjw5JlKFVhgpO2ofXR94iXt7bfYVb1UtAwFuBQMSL2tfkz+NOC0C+2rOAnQwn0H7X2NRu5MuERIKuQ77U20ZVhbNOPt4KVifYp9In3BTCp90+0SfQttEXYaffvttfRCfbJ9Wn20jSklBPE2DO9QdgytoK/IXdrjvPWMrgxKBEkMngzKtKf4xTFxDDh2gQzPDJEMmrQ2Th595QyTMBiWLn0fMLPsDzYOffNQKQwWhE4Mj07+DPWgYAQLDL590X1LBD59fi3tSOwEiX3p6c2ggU6pfY0MsuXmfQ0M6o1NDM2JTowVVtekrrbdDEnNsKwDca62gwzCoMMMgU4PjFWwGi1LsIHKmwx9IHtmGaSxfcRlTcrxLu1951RYYDgEzX18Zcfl4WUGVOMMjwzf+McMornXDLGQMUSkSVcMXwzTfVOcmuCjfTG0g2ovDIiWNglBDGUMzmVTfSRhoH04nbQReJ2mlkERTdBN+BaEK1BMldqgEEZH5bZa4qUgnCnN1H0FgknkDMyFvWSV0mlxSWW96r1rAkaE/Dad+HRg8y3kMHzwrWVXmNeCvErtPK1lXvBiWCD9Rgq64F4G0mkraEJakTrNBtJpNlHLfZ6wN32MMAvl2jDBAo99DQooueZGN33IqHd9YEn4/RRUeQqIkksGraDNHAhIx0TXfV8QHygd5dvSZX3CMMnmPHUTfeEI7eYs/Y8QYX2laNT9SYIfqfnwdb08HDWQXP1U/bj9Qv3/KFD9gv0QLWLwp32pqJhR/gzs8P+kNMlnEFkG/E3utOD9Qc3XNWh9ybAfzasq5gomsDD6OvQ8hkflPj2WLdL9Av3TbE3QTs16/a7i5OBuzfCK931lfS6whP2MtGL92dXLfflstv1jASbaR331UODy9YLGtBQdiBBuWBnNDv3EZd60VeasXOTgcBjTbj99EX5iLTUgxIo55scyHdgpoBrQq+UM/R19u6b0/Xj9Hdi5bKm9RP3nVOrtSARk/YTgN1SE/VksgVDSSBnmSv1lICFk+AbhtNis81B1/fb9/vKf4FX9eIo+/dEtyCJlZTb9pf0PCjUKof25/bDI+f0u/RAtWjwL5R79ff34TCl9n86W/QwG3v2t/eogSqgVCvlG4PpkqeVsuww1/cKgMvHVZToslf20GhL9+njKLefIC/2o/WSp9/gz/Zj9Y/27pgH9Z/3YyGXmov3ynRe8A/2S/RQg5EKjzkJdfGX1YpkKCP0PDD1REv3CYCCQd9jzkmr9fwbXDPu5gP0G/Tsg+FE/fSPeX/3hwpv9BT1//csxif29/W/9fFg//Tx9T/1qpJNlo/3oA/7IOP1oA3xlxJGYip39HJ0TyOQ6+v0j4JJlERZUA2ZgiRAR0AJ9UETAjFO0bVArFS0irAPnbdp97a4sA4utgRCojI+4nANgPRm4zMnUtMdgAgPY6M6QlGDgpdSFeIxsA7cVHAM7QlEAMgOEjCGMygOifX0wYgP8A9utYb2mlsyM9Mq3veoE6zBDNWzt/9yb+DrUAwjJvVTtbQRSobVhr23RvWigKpSQrKYDT71M+KVW0AXTWKf4KkTFvXBqOYZM+NGw+b2W7cSKhekHvfO9eQreA1zt2nzPZXWaNb20IjgERvgFoeLtxzBM+LRI0y0Q/P+kFgPfSjm9jgO+MITKBb1ltr/pJb0V3EDleMKhA5tgMRZzHLlhegXJA2rMprLjvUxayxgdgtkDa6baKtUD/OoyzBrt5QOnpGJEBq0u7acGdVr+AHkDDnwE5gScaQo7vajtjgNMmCRVX7386oMDpO3WA7VqeQ2/vdYDQQpUfnMFCwMxCigh3lgzA6sDyLDeWM0DF0wcraPJDgqq3Ce9EGXtagq0JFW4/PM9/u241RB9uiT2FsICP3B4ueYDvy7tWFI1AwSWIFWCVqrCisgsnFGU7RdlHkSUbSjMAINKoZMDgkhV7W2wwQPlevMtaJTcGa8DuSiwg9ccBgSUbRR9oDBnWkJgmELN7bB9kwOSvCb5lH1FWgQcu/wANRItRIOchWx9kwPQoSh9XH2fA1dqPkVvaImaS6bz4Qh97UjtA++icwWofUEKFiFuhZyDdjrqYNAFMyD4On4Q5IM0xCmKYkRiXJTtUIPxWktA8wPUojEK5b6M7Snt5YowUIqFmH0I5XWmUYU9wgMD6d7QBS6yfloilJyFylRSOsmt5IOkfTqKmUB0sfHtYsTmg/m+ye28g3j4xGFn+ah9TAPm9BVywuTD7W8V1/CafRPtFfRug4Z97IwkiP6D4KWxYMLkzNEBg0AIqn1GfaaNGyYhg5GDtfR+g8vtPoOF+aZ92QjKjGRJIoyQ1EF85oySjB7kOUIajPKMZlzySWmDwoxqjNateLwADFqMpkhmjMeUHx0JnE782YOXHezgpox/ADWDGuUu0FaMgsrlgx8d7YP2jDBYW4zOjDBUOK3ujITgo+09fIowrwR+jCjUC7EHfV5a6LgacRmdxWVMyvODyp375bjUc4P6MRwQEEW8JRMxGZ31lOgEJMJi5dntJ+rLOacgl+aAERxc7JBH3IeGQcoI/JxsZUae6OXVWox2+Z7oO4MoEDcGHkQfRJ7NGAi8JY+DCrRFukdUI4PqNVl82cWBUCTRj+qXGJeDTKDgQ3EmwqB63E78UKH6nU/4haqhbIhDdpAPXQhDdZ0pQBSxSErNiMWdWEPRqoChz+BQ8P+Dr4PIlLVg64N4Q51Y2nHZLVrKauIhjN5xo0wesPRDzHVMQ9tt1MBpjFbJECC0DItEdENsQ4Hkx+zMQ+sdrENLGGGMC7SdoMx1o03OXWHJEnWzwDUYMnbgpXdo9bSCwGmMX0jt2PJDgboUgKMYK2b+6b3+XqHwgMCwYYDWgOURkYBGQ44DJRHGfcMYmkNrmnByQWAOunpDIYAGQ6dAUYDYAGiAZkMmQ6aAxkMoPRGCf9VeWt7Jt9j70AHm1+K9+tdlH2Cg5lZYLNUf0N8cX76XwvA172FINXqEH718UkxgbC2XwgXeXFJpio5Yo2QHfJ0EC9FWWCFkfSBuGtFDDkh0BB9g1Yg0IDPC2JVcUgc1FUOOcJIW9i1n4HjCU7AaOMZY+UMOIIOsl8J59EuSUmXETIMkFeCUIN1D4UOi0ChQnNLQUFMmIUN0+ax6Y8LAbXVDsiFTQ2PsVUN0NWNDSUNDAuVDEUPJkIVDgEy9Q/rgOUOzQ1lDnuA7QyNydcIxlR9gm5AnWHLiZBwnQ+Y1CUP1YJ7QYhq7Q0j+83BtFPdDDswHsM1DdVh58Bqw2oiBISZUW15oDNlwIH3RHTvasR2YRn3RVW08HsWy8JiMCGDDrR0Y4h7IAtRI4NvBeUPZruLsDYxFQUjDOGgow+DDlOozwg01TvBZHbDDy9ZFzeSwRYozwmBw81BLMa/Mg0PAUCxtxMPnHKlDQzV44GMcmUMQ+a8sSOAnwWPCRzUHYcWtPFgj+mGsSOBgVYNDKzUFQ+1V0vJjwps1SOBfladivMM0w8WI90OpIOKhPB75smPC2si4IFjDGOJV+tc1PYyNHS/CmsOowyTDGfqsw7TD6sPgiB81qMPmshzDuWENjLytCUNgojuS/NCNHBzDfMN42HRqFsMKw31wcUFjwjC1B2Fm3oLDgv5sw8i1OsO5baRJcLDMw1i1tJBGw6lY58I+rHrD2MO68pu+jMMQw3HDLC0Rw8zD0wBa7DHDxsP5MNOM8pR0wxUEwKxI4BU+ueLx/qjKBcMew3LiWupI4D7DCUOysPss/sMxYSZUErX8w+W1DcMitRLDUrUmVDK1d2GLQ+XDCiGKw7WyJlTdbWrDkcMDMSYtQ8ODQypl22EDwErD9sanlV3Do1o5wgk10FL4w8PDZrVuUsvDg0OcnetDU8P9w6C49rVzw2dD+tS9wwxB0UOmqN21B2ECw9dDPrVI4LR+G8NxoVbDC7I5wgxYa2GaRO9DVrVbwznDxsMxteHDMMMrw4vDuBD+IK/DBrLQw8E4NRw5wqZB4CBdDDTKYCMz0ZXDfYpgI/ZCXMMH3QvDxrVNw1csG8OVtU7w3MXxWEzy8MP96qFBj8PNtagj+5TTyMMZbMNII6fDtcPK1NSQzMNIdU7wH8PDw5e1blL0I4NDE7XvwzhoLCOHtf/D1sN1wtXhz8PtoA7DXZWaGaXDbLX6VCu15MPSUd9DKfBIngdhksMcI7O1+8M9Q4Xg3Blaw9PDZ7bILWPDCUO0I1rDicNwdWLS28MikhwMofoHYQlBLCOftRAjMzD7tXXCPhlrIHgjkiP7Nskh9HFlw1Eo6cOQIwIje4BGI/fDoCMcDLYh/8PsI5ojA7V0I0VBzMNodVvDidCTQ6ry2HUJw7HDeHX+UpkgO8NW6fYsC9hg2QlDVyJHwxUo1HUf3aNBBprBXaXJJiJTbYXJeSNnbcZUsaH5IwcVZCIdFdNGknUfYMIDsVQeNEJMYVSOnBUjZSMlIzYyC3kfQqpMKDJ3ecfty+KchZCwH+3p7H75Ue2olUwd4OBuhX0jpB2jIxe9be6kHbeh7wPTI15KsB2qg/AcGRQvfWj0AB09I7KFsMggHRsjToOyWSsjTJWz4OFKiyO/vTVR9oyIHXMj+iVKjKgddoX6JXsCNSxeheMjCyPMHTe92gIX6kQdgyOvI6Qd33UAAnedH+20cEiDW6iTfHQdG/kYmlcjzyP6xXfqdyMSZIqFjyPuHUteHZLHXb30hpUIoxxK6lRQPpTt2K1hHU9dlO2vEUmKRUpYNNF8zh1DBXfqdt2krfEd0wOBrlECVR1V7UzDTB0dzMntEQ5Uo8s+ce3bIdkdvXJxvYy03DWlHTCRbO0VHWCjlW0f+efAxe1NHfUdp9RJHXVtBYKso+dK7R08o9wMjbUDHa+9lKNgEQqjUYU5sGmtIx2R7bmu/H2ZI3UOsx3Q2IKReqNPNHeNhDGGozz5Kx2bHa7JsD2jGMcdZqO/GDajL1ASQ6sdDqOIPTsdzqNeQzCVppYcDBdDgUxWzVk0J2HS0KRuVVlcUpgsj/hBoyQE7eZ+o5PDkQaYioHwGG0TVP7NA3oC0B9gkUrCBNE9BYxUVt3CzlzpozUKefCRCsmjv/wH+M8R72EJo9FZXFLYilME2YJcUmNqFaNekAiozs1VfsKgiFL2zZH61pxoDKnZakTJWY9DslnDhC0RlCCmUmpEJKC40rRIRgpeqJrg/ng5ows6Y6O0BJgQQASVoz7WTZYVBHOjVukjo6WjBtg6+gf4oxG20hIKNQTlfjygccU9pAkBtqDxkbwE2lmPksvCcJa3XXFS+6OhoyZZPKCwOaGjvaNroz60RjChvrbS8zI3oyht86OZCl6j4HCbMqGjd97PMBLRZ/hpo5ICj834WIbwRwg3zZmjIJBfo9uk/63Pmj/mnKTfrU+jpG6Ho3ejH+bgY2TwcnAdpJW6FtLChvn5u30xHSStIJY+mPO+aAzrso/43UqAUgxqlGO4kWgM8DG0Y2O+f0MkLROE+OSc0kwUpG6jUMgt0IrcLbOEDUGc0mmKlGPaim1DgmO8BLZVebCWTUxE2dFO8Jfs+7Vb+NJjImPCLROEDYptQ9s1tGMOIU/8Ci3LXExjOIlCFtpjRc2s0mday1waY3A6Ei2kY9xj/tCLJL3o8MPtxrxjH7gsLbZjTETiY54gOOqwMve+nNJc6m5jBmMYXGqAakRVVAohHulyY+SkFcOBY7wgfmNqKp4g86qUYxmyPKA4GtFjWxzqoD/BYmMRYzygWJiUYz6ytqCdSpRjoJIXoArcy4Q0UOnDMlkRLRD0mqE8nHVB8mN86pljACEVY+5jgUBJYzVj3mNrZFgtsDKQfpQg86oug/s4p9jE0CM42TI2Msaj/nq9Y09g1IkcBMttdHzKzdiMp9gGQD1j3jLdY00tg2NTY6s4k2NjYxdtFlWupllMsYJtIGZq4TTCCm0gTpzmOWcQVj1z7JTsekIXrUdjcbJnUntjtJ6aQnOSzsYeOdMwvZCpOLisyf0EHNOcduzByqhtWXJ3Y8qw/133+KIl2WXjXUl452PMsJKQyjjYuUwwRFoI+JC5ZxCMbbzycKi0Spxtv2O76mxwH62+xnlJBG2AbWjj+lKObfT4eAgNyhog513qbFpah6DcvVRUF0PgnIs6v2OPyvNwjm2g4z6g7JCHYzAmzSIpsLtjRCamUGsKm2N6nFW4BqptIAwCVbhUisetOL0aYicKAm3l+TuF2wo8bcSyRjq3CgjjRjp5SqxtjONuqCCQMOOQ4wmq32N3RHTwIW2UbZLjQ2QcbVxgv60641JtoG0a4x5tWm0t8iwO/G0vYx352FGpXIeg1j2y48zjFPgrxipQ0uOW46/5YuOUsJzd88ZC45ptL12kow9G4FDWIQcwC7J2JWqyeW3msuE0GBotbY1t/x7TqlHjZuMONOnDjaC8iupsB6p4IHYqKeMjHHggGOoZ49ohB+x0ainjeorHcH2KCUz+sj1t8eOYemXjsqgoDPGyeCAeitXjySENbWq86mwxYwNtrHrN4wljt3WJms3jubKJbfmym2zaKpXjtONKGlYwRCDR42DK/2MFmirjfSV1ZU2yPxQIymnjweMybH8cYePkxEVkFcNJ40WK0Uy4ynHjXuPF/ixtSePh45xsdYoL4zUc0UxnslnjNMpn482K1W1NxEfjiSM+MMXjyza5bY3ju+O9mpXjHWOLxB4QU20TtNZx623k0RJU3+N3tL/jO22xjUxee3i9gFxDGAqBFH/jBxUAE3xDUBMQEyATh+2LPZ8Fj1gIrQlmlyhsTKIcmuIpglioLRGa4sKBeBOhvpriEoFYE8EC6FXC0E/8ikoQ9DY5h2ISSrAyJoEuqJKVpPL6OSuCzlwCWHrdLzIOcAriRt0dUDJZgr4cE3Q9PQh/7qfpY1BRQiRC1cJOgeIT5/zx8G6BlIhrWNzdfBO2XgySGnYtkfc4xBO5oxi86hMyE7oBonHaE8sSCKAJsdITBhNmPfaozxH/OKo+3BMLWME4loGa5hZkuhMFOfoTOAId+ls5ThNHWEOBEzzU1joTQCI7PMYTzhMHQPWCGzyKmIsCLWavPFYTR1itgXYT1korXQRjgMOF+SY+qBPI8d0smuJ6NQ31O54WSLRBWWBjvnJYIkExUFkT5qxyWKXBGzwBAukTlcHFEypjKliGQbsIAtQqWGwtPzDCY7UTTrKKMPBVblhVE5BUBRNz3vu1xfX3vo0T6bY/ME9KTQR43u0T3liDE85B/RNvSlQx3EE5WleVkxNlUP5aPKPXzQJBwxNZ7sZ8SVDLEypkJ8HF9R0dSoRsteCwsMoqZDfBXLzzvuZYD8FpE7ZkmH4E9dkTSWgFQZD1VxOcwRlRZxPmWJVB5RPHE0s8dUHVE89k7sZNqPTlHYJiNu1BPzAZY08T7xPrE6dkbZUbPJsgHRO90FktY22EFDR8JxapXQ7Am/7/FgldjIk/rKr1atgJjNnASJPLSsZxcJPyyodCtUwLrZbiNSNYOKxEBx0EkyE0eJM4kzoD8gY9qmMYXcpOcKl64PUobblKRAJAEbi+XEMho1UYS7BekOrhq3zMkzWQ9FhFgrxiGG2doD5cWBHW6vLwKaNVGFFwn+BCJk2CSAhZo/KTSfxwqHmjEXJdggusgr5cQ+KTVRgTIkEw5aO6k1q+XEPVo4aTlaOIhDOCdfzLoL2cmPynKK2jxkSreraTI+D4cDZ8lpMDoMaRFoJGkwrQHcoek2aT/V4Sk3qTLCB7I46TZmBCSlP6QFD3rRBq4nwUcTlgkZM2k5wISuMpbD18bxSvo6VKqy3Jk7yTuoQaApHsvpOIXBL82ZMZk63CKpPJQ6MwLpyTfIqTCZOFk+Z8p7LfrYPWjTnFGPpQz+DE3PyT8ZNjoJO4MnxCcUBwf6Myk2DB5uES0WMY9LK9kxT69JMXQ7xcjPoCkwxtqOjtkzmAKZMibs2TPJMYoHrgOnzjk5+glZPufHgII5NGbE5QCz0NSvcDqYPLNGRjlqAUY6wMO6W3MDRjx5N5wZ8wDGPnk0xjlqDD0XH8vEE6YBxjWvzW3MgtgCrcLZL8/GOvymwtgPzxw1+TATWVSAltb5OFArSe7mOnZfu1FoJnvjpgGUOsDCsc8LD4RmmtIFNFzRCEs8EwU8++OmCXSun8fq3oU661EFOtY7QwlMO6k5BTJKaNtYhTtJBP6iE1tJ54U8AeIHWk3bnj8FPkAvuTr5M5gPVDpfwPk7Ogzi2sUzeTXYZfvpxTSFN3SZ217KM1sGljx5McQRAgzWhxrWNsn5M4oOw1aIi/k9JTaa2y7AVsYlNZY4RToFPyhpDKpFM+cPJTi2U0Q7AugPCSTEnppfwZjMx1+lO8AKmMUD16OnGM6x28EAZTLHQ2QyTAAD2eQFZTVkw2U55M2+kzTHNM+gALTGuYKAAoAJYANgCrTK2AawAWAKB9IAAAAMIIKiAAyADoANtMNgAoAMFTEerY6K00BRGyQAUAcVPBU65DNwisAJlTjVxiQAAAXgcAZgDSDOsAM0HOQ3yAOgALTD/AEADBU6AABQCiAJwAYABOAMFTO0wgACyA6VPGGBnczlRWQCyA+VOFUwQcQIAKACyAZVMSZMshsADtAKIAjkBOACgAyQCVALJALgCPgPZD+UD9wmwAPhh4AIeAIgAoAGuYa5hNgGdAxwBlAG1TxAD/0NX8dVMNU01T5gAtU21T8VMdU0lTRxiMQL1TvgBGjYNTIgDDUyZWHgDjU5NT01OzU2AA81OrmEURtkDLU8B4a1OUgJtT21NgALtTtoD7U/oA/ECCQMQAUADBUyyAJ1ONUw4AykDOgGWJ4VOUAJSA0VOSAKAA7VMmQKk5CGymEULoqVO40+uAmVNEOS5D0dQ9UwQABVPmAMVTRxhDU6ZDTFyVU4kANVMgAIjTZ1M/ABdTIgAk0+Tob13QbFIgVNM000qAj1NC6GVTbkPbAO9TrwBTUzNTAkDfUwtTf1NLU7dCq1PrU2wAINM7U+YAe1NisWwANgCHUzB87NPNU8pAl1MJU1BOLeJEbK9SgtN9UyLTDNMeQ65DTFxvUxNTUtOfU7LTP1OUESAwANPK08DTW1Pq0z8AmtPinFDTIgACQKIAQkBw03NMIgDs08jTVfBo02FTcdlY07FTV1N40y3siIlmKp6hYABpU/HTpNOUiGTAOVONtPdTPwB00756jgCM02UAzNPVUypAbNP1U41TBtOtU9zT6dO807acVezJ0x4A1NOW0wg4T1NsAGLTdtMS0w7TDgDS019TLtMMYWfh4UDu01vAQNMbU17TYNMa0xDTWtMgADrTRABHU3VK+tPnU4bTNdPG0yw+dTSN09sAzdMPU63TotNGQ7bTVwBjU93TsoC9087T8tOI4YrTYDAe02PToNPg0yKAkNPQ00HTsNPw02HTFdNOABHTqNOqxuFTo22x0zgAONO10xccvZkp02nTGVNdNVnTQibp6LnTCED4Mittz1NF0xVT3NMs02XTi9Oc08vT2tP/074UrZkW05PTJthcYNbTFwAU053TSICS0z3TTtNzU2fTg9MHCJfTI9Mq0yAAatMT0z7TU9PecbPT89PXssgz64Bc02gzCVMzlIAzTdNC0+uA6zCsALgzsDM20+LTRDNH09CApDNy079T59PbSlQzLMCj06rT49O304IznJz+02wAgdPB08/TbADh07KAKNMJgFHTZslsAD/T/QA801xcfVyHQsTTtdNk0xP42dMQM1vTedNIk/TTwjP4M8XTCDOl03tM5dOnU1XTRtPGGIHYgfh2M3wzvwBW084z6IAH08Qzx9OSM/3ThREyM4gUcjMLgAoztDNKM5PTd9PT08wzetOv094zK9NaQMAq5jMBMy3TQsBt04XTNtNhM+IzrICRM+QziyFD00rT1DOe0zfTyTMqM37TD9OaM6HT2jOv0+/T+jOf0wAAqjt9xjN/08bTCYwcGKigQDM802iATdhZ02MzWDOLxOWkGlUhMzwA5oAl06zTbDNmABwzM9P/00QU/1AIfJMzL4CcOTjAeDPogKIzh9MfUzLTZDPSMxQz0tAiAFfTijN1MwwzKTNMM7rTx1MZM0vT1dOcMyjAeZFiGOJDvDOW04w5uzOzMzgA+9OjU+EzEjPHM1IzrtPCgFEclzOJM9cz/DOMM/NMCYBLMyszpjNIfJR88G1bM2YAE64YLkUz+DP/MxaAhzOO08CzUTOLUzsWFzM1M9fT3tPQs7czsLP9APCzqDOrMwlT6zPEfN0AqLMwWGTAdIB7M7yABzOAs2Uz+LMVM3ts4LMks1czZLNoszCzzoDUs88ztLOvMxBl393sQ58zD1PfM6yzvzMEMyUzRzN90zyzYLNxM42ACTN0M8oz5RGUs7VTjzMoM2KziLNvM6YYQzMys8LTcrNnkQqz2LP208qzp9OnM5UzBNDEs/IzNDNas/UzOrMis/qz7DM0s0azkrMcGI8gTLM7M/Kz7dN70xyzpTMn0yczoLPd7HyzzrO1M4KzvtO6s54zldNPMz4z7uRzFX6zdHyQM0EzFrOMkR3TSrN4syqz9rO8s+qzd4Cas0kzNzMNMwmzorMps8HevrPF5NKzm9OBM8yzKjM5syGzhDO4syQz3LOFs2qzTrPxMy6zZbPksxWzHrNeM8mzWTOpsxszdbPUGJmzTbM/M8GzIjNts5yz4bMgswPTDrPnMytT/LOQs3GzwrNws56zyzPes2szxrN6DgGz2bNss38zobO2sxGzy7NFsz2zGrN9s1CzQrMUs0OzSbMGs9WzpcAHsyjRR7MHeEGzmLP7M/OzYbPlM12zUbPFs9sApbN3s/Gzj7Mc016zhrP7s7WzU9QfsyyzlrOzs1izZ7P5s3azkbPlEdGzvbOxs/QzA7Pus9uzw7PPs6OzNbNpswdGSMBTs4GzCHPfs+yzv7Pns0uz0TNnMxhzN7NYc9qzkNN4c0+zkHMvsxQU47N+TXBzzbMns4qzALN/s52zaHNEs2uzMbOks9hz97ODs6xzEHO7s1BzdLNvsxGwPHMzs5Rzp7PUcyhzF7N0cyuzDHMls7ezm7MPs9JzmTMvM2OzGHw6QEpzX7O5swJzNHMEswrTInOA07pzEnNgcwZzI7NGc0RzXHNkeGZzFHMWczizC7P/s8JzjrOic5hz4nPMc6ozTnMEcy5zr7Mwc586HnMts3OzebMdswWzfnOrs3ZzTHNusyxzVLM7swizazMUfMQui0ios+iz9Apeczaz6nO0c4Sz/nPJc0FzqXMhc+lz+HPsc4RzpcBTHVQKuXNms9CzekAYs4VzXdNWc6qzgHPXszpzKXPls7hz1XNsc7JzHHO+sBh8WgTHeJmz+XPHeO1zYjOdcwBz6HNAc0iAIHN6c1Jzg3Myc5lzdLMcdTlzU5STcz2ubXOts3FzETNCc5ez3bMBc4xzFXP9c2lzerM1c8NzdXOcc8R8pnPNc1mzn7OecwdzlnPFc9ZzMTNJcxCzrrOXc1Vz13NDcxtzKMCX+NoYTXMNs4VTU3Pp6DNz7bNHcwlzJ3Pdc2dzvXMXczhzV3OJs+tze7N0s6dtjXM7c/YzLXMDUwVzb3Pec4JzcPOac1eziPPAc/ZzwXN+06FztXPhc58I4zjjc3kzk9OtcwTzsXPvc/FzqHPw8wtzPXMU831zKPP/c2jzhnPis4iTCiScGGDzSIC480KzLPPTc4TzRXMc8xpzpXPfc+uzv3P889Tza3NC84izkaCg8zjzgTOQ83xz1rMdcx9zXXPc8+TzS3OU85VzavMA8+jzcnMowEb42vMTc5LzevNWs8hz8vMlczZzZXM/c/2zknMDc1bzGvNrMzOt23MO87rze3Os80hzanOu859z9HOLc7AAy3MOc1uz6vPOc8Lz6UCNI4HzTPMMM9LzUPOy84bzEfPG87ZznvOgc/HzvvOJ86YzLTAM8wb2eXMh8zLzbPNE83NziXPac7zzyPPe86jzVbN3c6F+9vNp83jzSyGh8z+zh3NAsyTzivP182bzfPNN8wLzLfN08/Sz0hhcwNFz+vMu87DznPOk86dz5XMCs3Hz+nMJ82FzSfNuQJaY7fMV8xnzM/Ph83PzCvPu80rzYnPL81TzlbMZcxjzWkBrjdjzQfMQ85XzmfPV83LzB/Nu819zg/Mx8+bzf3OW84LzxfP/09zIZfPi87tzu/PO8/vzffPz8wPz0fOx82fz4HN+88bTjprb809zTvOIcz3z7PPP85HzWnMQCx/zqvPn8zdzQPNS6CA9jPM78/jzVfNh873zXLP980fzb/OQCxbz2AuA85fzCdOi8wQLCAv383vzpAuLs2gLZPNL8xuzK/Orc0Xz6/Ml89lzN/Md81LzRAsP8yQLKAugC4fzr/MYC8PzjnNr87TzG/Nb1P/zOvN380ALSAtUc6wLvnNc83nzyvNe87ILvAvyCyXzOTOp84QLXfPEC8gLNfNG8/Nz2gsn81wLUAs087dzdPOVUfAL4PPM8yILLAviC2QLYAsUC9ILjfN6C9/zfAvQc8RzoiSTs5Lz07Pmc1nzs3OWC3XzPgun89QL0As/88bTIPPGC0wLqgsqc/xzFgs581YLHvM6CwXzq/P6Cw4LCgvSNGEErCEZs6EL5HMxc2ILGQuoC7nz2Qs2CyrzI/Nf82PzhQvjgy569bMS842z5QvuC1ULEgsv81HzPPND874LhfP+CwYLv/MtCzx4IQsdC8ezwAsaC8dzC/MI85wL9Qt+C00LJfNjC6YYinNPc2ELr3OP89nz1QtZC8fzgXOxC5/zNAvW8xxzRQui819Q0/PTCx4LbAs1C/sL53OHC1gL8QsBC8bTqwseDqRzZQtTC2oLqnMzC+QLUgv9C+/zMgtDC8sLowt7/bJ+EwtfMy9zFQvmC0/zPQvsC4vz+fMrcz7zwwsFCysLoIumGLwQlwtfC+kLMIueC5ILfQum8wCLgwt5C8iLuAvlQGiLWsSYi2kLBvORC5kL0Qv/C1QLRwtPCyML8nMwc5o0lIvQ8z5zswvgC/SLmAsNC8cLMAsBQOSL1EjsixELMPOwi7cLlAu8i0sLF/M28z1AQos9tBsLnQtXC90LuIu9C+gLPIuAi8SLwIsvC/KLbQtkc58LVIuz8+KLewuSi5qLPAski3QLZIsV/YMzpQuTC5CLXQs4izcLJosxC7YLcQv2C6SLt0DWiyazeosfC/aLyouOi5oLcwsm8wsLugtAizKLpwuvC4XkIovbCzSLuwt0iwSLDIuPC+6Llouei8UL+vbvC3aL8HNQi+oL1wuBi9yLCYtSi2GLOAspi9ZZaYvuQOCLsrN+i1iL1Itii6qLcIvzCwiL3AtIi9qLgotei3BZ0YuVCwGLXIveCxqLRIvmiy2Lcotti0kaHYvQizsLxovxiyGLuQv9i+GLd3MT8wnqI4s5iyqLTosTi42LdgtyCyiLIItDi/tgC4vfC7mL3Yt/CwWLZovNizOLjguRi0LgO4vYi2OLdYsSiy6LiwtFi7QLsotWi2WLU/OKiwaLHIvE814LB4uTi4iLzfMni80L5IsqgReLNYuci78L+Ivfi02Lv4vFi4+LqYsKJBpOQEtGi9eLzou9iw8LfItMixuLOotDixcLr4tVi4aLIAuISyuLOQs/i6Pzf4sl80kLXdwPFe0LKgtuC/6LV4vLi1oLtQsHC66LjIvJi9BL3dHIsxRLgAvUS9WLCEt0S0GL1guMS3eLWoskS7/zRgvkSznTjvPMCzRLsYvji/RLdwtI8yhL0otQS6cLDXMsmRxLEkupC++LtfOyS6aLfYvHi0pLs4sHsyWZ8Et4S7xL+YvgS2uL+Qsei4ROtHwosykLXEu4Sz8Ln4tgS6uLbovri1ZLu4g2S2pLwfMaS6KLIEtOS+qLh4u6S5BLD4unCwR8qkviS95L9kuaS1EL2ku3i6GLQkv6S44LcAsBGLZLLgvp81FLvksfi3iLAUvmS65Llksli3/z7EsRS1RLpguiC6OL0kv4S7FLyEtMS0mLbksFS9fz4UtCC4gLDkt7i6BLOUsuS8xLdUusS3YwnkvFS64LpUsOi7RLeYs9i4FLCkv3iycLrfP5MmJLTUuSS9xLJkvDS1+LHUu1S/lL3UsDMylLXkslS8yzg0sVS6ZLI0u5S51LK0unCynz00smC1tLUku1i7tLi0uESxBLxEuJSwoLc4uUGAtjaUvbM2+LmUtaS3xLDEv3CzVLqEssSyNzAfMnS3ZLA0vnS35L2UscC0tLP0tdS39LqxUAy89LwgtAy3NLjkugy/CL10sWSxaLrEv6wL1LM0s+SzGL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a06hlIACQAVrUWv4MrFraGvtq08ziWuua0zS+CA5MqG4ZHP92HJ+bMtyq88rmHk3MKbzeWsgACVrEWuFa91hxWurTH1rZQvh6tPT+6trK5YrLEs1a3VzRmuyfgbUsMuVCHorrivAS6UzOWtda50A4Wsha5yza2s9a0NrkWsdC6Nr3nHjaxCrUEvTa+Fzs2trC6LQAbPNa8Y6WWs7awFrG2v5a31r22tha09r+2st0wNTR2urKydrCWtsAC5rM2t1a/QYnBiOKw9TN2vLawhL92tzQN1rvWtba6trr2u7a6VrB2ufayyAx2tkq5BzZ2sb8xdri3LXawUzt2tvS1kRRWu5a49rCOvPa3DrhOtva2Rzh2so699raOuycxjrPNNY69hROOtLaz5rL2vk68MY0Ot7a/1r0OEw65TryOtxaz9r1vP064ZrgOseFMUtiotg66zrZOsDa0Trg2sFa2zrMusU6yNr/OuVawerVdPC68FTWOu2zMzrLivg63hLkOuOQJzr8uvS6zzrXOvK6+fh1OtvK6OrGutOMp2sZejmiDrrlQhS63vh7OsPa3LrpOsu64rrJOvva9vTKus/q+hr6ut/a0lrouvoRPPAjusta/LLV4sG668ARuse6wTrXuu86+brRnEC67TrLVM2673YduurZvRhjsvbM5LrwMsm6wfhbuuba9zrB+GJ60jrFusp69brQeu1a5nrq17ecU1ruOt666QL0esOALHrsOue66briOsfaxXrquvxa0Lr1esA65nrGPh3U2ULeeutaziLLeuygG3rJevu6z7rwtNU65XrU2sD6+drIeuDxuHreOtCywXr/mtQ68TrvOsK653rw2vl68nrveuC64HrIAD/ayvrmetpyRLrjevO6/Hr0OFF6xTr++ul62brR+tjazTrVevn68HrV+vXUOvrTeseC5PrK1O761zrz+uz63zrPev+61VrBrPp66kyV+sbkn/rd+vkYa7rO+tgG6AbxetJ6+/rVutL61/rNeuZkE1WrS036yzr+esd64XrKBvF62gbSutv619rWBtdSzAbjTKZ67WM3Suj67frxBv366QbhuvAG8brJBtgGxgb1BviaytLdBsXa2v498vDjRHrd2vw64/r3usz6+gbVBuW6/wbaMuCGyHrOFQg68LTY+uR6xVLgBvV8KgbW+syG93rx+uQG2rr1WvL65jrIeviWKBADetEG+PrUesSG2QbT+s6G5QbehuYG/IborOKG7Xrrd4qG7nrLBtWGxobNhscG9ob3Bu6G77rEBuo65/rF+smG5nrv/kIG6wbSBte65Ibe+v2G1IbvBtyGyOr2BthGwzrphvlOlEb3hvSG+tr/htsGzwbshuL67QbxhvpGxEb2CuEG7rriBuygJob0+sUG4kbhRsn66nrykCuG3gbFcAs0RYblRvRG9Ubvhsx65wbcesxGwfrc+vbMwvrjRuhG9/rrRu+wiPrHQtqG+IbyBt+G+QbCRtl644bfBspG8UbOBuD6xMbx6RMG9MbXhvqGzkbHOt9G+3r+RuBG/PrfushG6kb4xv1a3bujJEdG07rXRtsADUbhxv7G0sbQRv6G+cbaxtpGyLrtevuQEwAWRt7G3UbcRsgG4sbr+vLG8kbXGunayUbXxsTG62+5hvMG5Yb/xsJG4CbXBvHGw4brxtOG6sbAhuQm5rrG9INa9sbltMzG/jrAxvsG70beRtEmwUboJtFG5ib6xsr612Ac2tTG/ibuxuzG7EbthtSG3UbLxunG8EbH+sXG7VrtJuXazzoC2uiGxvrnYvWG3MbJJsLGwEbqJscm28bXJsfG8HrvJtUCh4bQTMEm5vrEpsHG6Sb3Rvs6+ybwxtnGzKbVJufG9ibvJvY6xUbdxvZGwCbLJvxG6qbWptBMyMbBht962fr+ptOMoabTOvGm2IbhJsam8yb8xt2G5abIJtomysb4Ju/a9SbJhuGm1isfxtMmw/r5ptAm96bXeu+m2CbEGtOa1ibjptPsrQ9oZtumw8bPRut608bbJs+m1Kb6Jv+m/3rgZvpG7ybQtYpmyqbKJtqm+KbZZtWm966uZtxmxCbBZsi60WbPBglm8KbPhuimxmb6ptpm5qb2Zvam5ybNBt6m3KbT7Kx/c2b5Uv7G0ib/Rvum4Mb4BvSm32bChsJm73Y8puSqMObi4sT6+mbU+uZm8Cb0Zs5m36btZsBmw6b85uDm47AS5u7iyqLjxsdm9lr8OtVmxkr25vEa/Gb9ZsGm0+ya+sum0KbI5tmm56brJsbm4frFJujG9ybAOu8m9frApvKmy2bo5sRm8ibZJsnGz2b05vOG7ebe5upMn+bv+tPm//rJ5urm0AbZ5s7a5ebNpvvG/2bPJsPm/AbCFtVG52bHptim16blZvdm9abOpszmy4bc5uwW0+ydcL0m6DrjJupm+ebbZtrm6hbF5ukW9Wb15t0a3WbMFuNMrybjBtHm5eLrZuEW+2bFZtgW5KbEFs1mzeb3FsDm8ZiS60560qbDFulm2Jb5ZvEW8pb6FvkW1Bb0lvYW8ZiAlQCWytrqptjm0cbalvsW1ebsZtSW7ubMltZBAjAelsQ68hbWhuiWxObL+ubmxJbnFtKq5Rbd5uJmxcNwCA2W/rrdlu1Gx+bQxtkW72bmlsWW9pbaZKEID5bzet+W+ubUZufmzGblJuzmx5b+5uktJkbeFv3G0xbwlssWw5bBFuTm0kbCVvuWzxb41KktOUbAFuKW0Bbr5tEW++bsVuBWxxbZltcW6Fbv5sGfliosJs7G/CbYZvEmyJbqluOW+Sb8Vvfm7KbYVtr/j0gkVsAG9FbrFtdm85bQVuQWxibiVuFWzibARjl2GlbppuImyBb45s5W05bcVtbm3VbblvQW5Zb1xvDW0hbzFsoW9lbGVu5Ww0btpun60YbSVvUW/3pgUD7Wyubh1v2W11ba1s9W5tb+Vs7WwNbIfYtWwybbVuMW6ebx1toWyZbGFu6mzNbwetbMLibd1sim5lbR1tPWydb61s1W6Zbb1taWwDrYNvoi6moENtCW+Gbb5sWmyRbE1u1W4jbDVsr6yjb/EZ4m/RbP1tKW91bsuv/W2xbuNsI231bWFvI28Mg2hiKm4trnRtLWwZbK1tGWxTb4luTW5Jb9Vv5m7NbKNtGm6VbZNvlW8tbWNuRmzjbG1suW1tbfqvQG1RbjTKC286bwtus2wib7Nvi26BbXNv1G1+b51tNG5SAAtuM24uKoqjo28Bb6turW7DbL1vS2/jb/Nug2wbbyZuLW6rbZZuGW88bgNsaW9NbBVs22w5ixZv22+1b2+um25zbz1vgWzzbrluy2+jr8tsoUnQ0TZve279bo1tU2+NbUttB2zLbd6t062HbcFKe2znmxtsVW51bVVuS2/DbQNsUW+9bDNsOYnXrGdti25Vb2NvGWzTbedshW9bbtWso28PrJdtq22XbEtsV2/HbeNt02yDbtdsG24+bytsmmw7byltO21mblduu23mb9pse2046piAN247bHNvO20PbwVtu2wXbhNtd2/BbPduum+TbAdu5G7HbCesu23PbI9uXW/rbDmL5zJPb/dvT24Pbrdu0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awj7Uvs5u0j7x3uTa4L7pjNYe2b7ovsde9z7Evu2QHz76Kv4+697ivvve9R7/Ctjy+N7X7t2JVT7c3u0+2Vr+Xug+0z7Dnu8ext7UHtV7L3+nPvu++L7KKte+7b7lbs62wL7xvvO+w/LYfsw+0p7kTvW+6p7mfstu2BzvvsK+wPLAft6e4oAZPt5+7xOi7rTew87/3sR+wt7dPsg+wb7sftre/H7fLum+yULfrvB85b7cPt7ezb7t7sQuw77yzsJ+xMmCDhN++177nse++n7+UDe+4c7svvsK5p7A3vcK6FTEVOXOyl75Ps9rnP7mvvRy9r7kfuBM/T7BXs2gEorxXujK9WrbPvTOm77C/tp+7ardXuqu9QLOfvKq//Twvv3+/P713tZazz7Gfvj+4OzlfsnO/772/t6IPX7N8sryJ+4gRhH+7ArNjNxy8+rjjO2a0nLgzs9+yz70/vs+g5iQtsqO8Ez1YtNy5577Wsny6/7izuT+1C7GAeYKwgUNxiU6/XLHzvXu35zRAfEe53LRSs/y6prG/sE+1v7UdN6a8H733vQeJICoHJxhrAHXTtzy/ArcKtWyU4zeAeoB+D7ufvoM3wHEHgZoLQrhTOyqz279AdFy7a7Z/Pv+9WrDdBYeARcRbu4B/Jr+7uty6oHnrs++2v7rAexexwHwCsQB5hrOyjjCzdGYita+3ArCAfyW4grVrNDK2gHN/vcazYHJQvNaAoHDcv4awYHx8tGB/27/PukB6d7GAfJhs3Cl2su0L4HTasEezULDAe9e4Uru2ssB7U7VftnOw4AFzsq+3v71zuSsTjooDNU+087LkMvO7DLbzuw+4MrkgdG+x/7MLtzu3XCXbvLu8oHcbtl+1O7R3sz0+h7KPsKCwW7z/R1u0u7Dbt0B40HgAdQG9K7ifsM6Nu7/rs9BzG7fQdZu00HKHt2mye7ybtpLHUHvQcNB1MHAwcMu0MHujp+Mx66I7v1uxMHywdNu9MHVtt9+/yRiniLB7sHcQc3u/V7bjusS/MHPJynB2O7kwf7B6sHsweMuxsHhlS6B7i7DPu8gG675eQHB1W7Sbv9+6N43Qe7u6K7DwcTu78HubvSBxN7/fsCTHcHurvnB8G74IeJuwF7ybutJkCHnwd/M98HMSCIhwO7AXsFu6iHsIdXu3sHYIdPBxdbLwdku/gbaIcX+5Z7oIcHuyv7arsbuzUHsd4Cmx8HVIfzezSHKLt0hwI7ZIedB3i7F7ush5iHh7uJB7rbHHOdB09LOAcsh9278If9B5cH07vch3O79caUh5KHBAfKu5yH8TtyhyEyJwfbB+MH9wdEh7SH2Ideu2d7nQdbB8yHo7twh8qH5bv6h9XbpLtGh0iJJoc7BzqHUocrBzKHQAemB6kHIAfV+6FTFzuGM1FT2Qf/0zc7Q1xYvgUH7YzPOxwKmbOlB0X7K8sVB+t71ofyh4UQBIcgh7qHHIeWh6SrGgeDu3O7q+WKh/UHjoePB86Hgwfqu5t7q2aD+18zpoeEh9mHxIe5h2sH+YfDB/FUdFvmsyWHCYdlh3qHJIfCh817/ft7CpmHSweNh0mHzYdNe6j7bYfAQPGHrrsBB7S7yYf0hyWLybtkjB2HZwfmh6u7FYfPB+sH5IfjXIOHoTPDh1y7o4dchwuH8wdGKMuHXwerh9a764dqh5uHAIcO61qHwIdDh+yHhLuqhyS7cwfHh217p4foh9SHiYeXhweH14fqhzzYoXJThw6HM4cXB8QHr4dHh8cHcYf3h/yHe4fuuy+HrbsxhxqHJ4d2h9qHZoc1e+1rgoeHe3mHDIcah9uHQEdKh3BHKodgR+u7JYsFu7L4O4cYhyBHPwc9h+0H1zvph+sw+EePh12Hz4fER077fofphwOHaEdZh9+HCIc0R5CH7bvDlMn7YwdnhyuHF4cjh6xHVQfsRxFUtYcvS/WH54dPh3xHc4dJBxozcvtke377Hoe8K0HLyXvcB0L7O8h05NMoQYeO0CGHEC4lB+yc8nsSB587cfvoB3y7xJQnFt47WbOiRzxH4kdrh82HqYfIhyZHNxZ3h9BH3Ee7h7xH1keSRy2HdPNs+0VGn4ewR117LEfuR72HYcsPy6KSFEdsh1ZH+4f8R7f7wUcVKnyH6Ed+R9KHv4fgRye7XkeDYKFHAodXh0lHZIdeR8tCjEedh8xHCUeMB/OHVYfOe7nYiNhpR4RHWIeRR5D7wUfD2OVHrkcRRwFHJEc3y8FHt7S5R9OHGEcWh1VHpXstRwXTsUdMRx1Hs4eJR9hH1wf2R7xY5vuTCxZHLkfhR6BHXUes+w/LmJJ1R9NHREeNR7RHE3ujR61HTkcPh2FHVEcSR0NHVweYe6NHtUdtR1+HA0c/h4VHpIebh6NHGQCLRztHbkd7R7KHl0fsnDDJN0f5R06H90fHu2SHNypY2KlHx0e+RwOrg0fnRx5HQvujRzFHXEdbR+lHWEf7R817o0frC5tHwEf1RzNHAUfAB0+7oAcKR1wHYCuf+6pHeQeWlBpHB3hogMUH8lvhh8trbgdSBwJHcbijR/8gL0enR/5H70ely6EH/ntne19HIwc+R6WHr0c5h7THlYdWS2z7XQdUx/FHb0eAx4FH4Cv5+9VgvMf/R2dHQoeCx81HJ5GRxizHDYdsx+WHHMdFR1zH+fv/AKLHH6tNhytHbEd7mgSJtwe/R6zH1McFRxLHTUfpy/n7Yod9R3lHBsf8x0bHq0caagSJvIdgx/DHS0eVR5rHZMf8e1jYTIfih5NHBEcIx8tHiscXR8VHnYOlR1C+nsf2h39H6sfdhy7HxrujR8HH5sftR3zH7McCx8bHtsdY2JTHesdyx5bHCcfWx1rHbVYI2B7HsccnR/HHCseJxzbH5Me6R/bHE0ehx/rHhccax37HQMfO+/ZHZXhqxxF7Ece1x5LHa0e6R7rHcMdxR2LHNMfFx9nHVu7owJqHXcf9R9XHLcd9x67HA8cgbL1HDsfdx+HH1EeRx0m7Dccix2nHYke3Rw1HrcfIx9p78kddMyPLSkcYxxN7WMez0s37IzOFB/jHoYeS80THtAcOax4HdkfsnJX0Tccl+zXHgMe2R4zH9kcJ1LLHq8fyx0/HWccTx4HHbDnGOvnHYcfNx/PHrcdJx9rHizinoA/Ht3tFxz/HUUcue5GgUCfw+zAniEecxyWLbPtShIgno/vIJw97h4cBx2z7nugfx5ZHa8eIx6AnJcdux0w0NxszxyPHPceGxygnSsdoJw/Ls4SYJ//7JCfjx3AnPt6e8MwnnvusJ7An1UcnkSnmhCdTR8QnvsdsJ4vHd8czM8PHFsejxyAnoifdR/wn5NBcJ0v7Iie8J7fHLJycJyvHRCdfx2PHKievx3fHcBiKJ8/7CEc4J3+HAcdMxxyclCcVxzBHVcc0J1bHdCf+x1ZLZicEJwYntXtGJ2oHG4emJ2/HCKuAJ9Ync8e7R7InuifowInWgifex07HrifGB3a7GAdmJzuZzifwRxlHFfuuh8c7KMfbx+c7BGOq+51jompMabjH0ivnx4Ezl8euB1GHvftzBw3HgEeSJ3HHNieZx3YnB1MnewzHkSf2RxmHMSeYR7NH5AeMJ2IMDSedRwvHcic+3sNZGidCJ1onMic6J80n/Ccp6j0nISfCJ87HpCf9x3/HvsnBJ5RHfSd+JwMnpLv4J+RHIyezJxnH2CduJ7gnysf8J+FAbScAxwsnyUf5+6hHpScFx+Un6yfhJ2OHrEvcx1BHIcdWJ+nH0ifzJ5UnbcfJxznoZMsiR5XHdyenJ9/HjydgJznHPpSWmLsn4sffJ2QnJUc+lCUnNyfOR6Mncyd3R/4ntSe6R9cn3icfJ74n0Kf7J59HDcdHJ+Cn4McVR2EnwQdWh0Und8c7Jysn20dQp+vHMKfGR/inHxUYp47HYyfYp9L7BoewpyycDEfHJ0Anj8faJ0CnkyeOJ8MnTKc+J8AnDyfGJ5lHj0csnN0nXKeIpzynyKePJ5vHhPvJJxkH4Ad7x5+7i8S5ByPcx8dWM6fHBMdhh7pHZQd70yTHlQfVuxA9bqOUp7PHoqckp0KHL8cYB5u7LPQzJ0SnaydfJ3ynw0eYe/37+vZmu3WH7yefx1anrKc2p1DHfYfDjVGLhKcQx00nRwf92KA9AKe9xyin/4cBp8zQQae0J+6nD0emJ/anBzwRp7YnUacfR6Gn4zjzAPGnFSeJp0hH44expzyoaadnJzinESf+p+M4E9s+p1incScepyb7WLtKfLmn1qcbJyYnyEd/3VWnJac+x+MnpKc3h1i7eqcIpy6n9ydipxmnqCesS5u78VHVp26ntaf8pwHHA6c5p02noSdlp9Gn9acpp5krk6fUp9OnSadjp3O7hn5Dp/0nbKe/xwOn4acLp8SnPCebpzqnf93rO52nmieupxunvaf0J/2nq6fep8KnXaefJ8On5yePe8wHz3uyR2kHuntsAN0zzTu+hzC7CqeXpBl7M3vKp8GHRQc5J4VTeSf6R1f7zPs3x4aH16eS4OunvKcjpw179MdPJ4vE16dgcrenp6fdp0anB6f/B16naGf6p9QnSKdYZxen9idZp7hnhx0np70nZ6fwZ4+nmyekZ88+sNRwZz2nCGflp8779qd3xIxnRGfMZzOndGfSGPIru6dUZ0xnNGd1pzxnlHzM20iTEKerJ5hn+6fEZ3XHn/tsZ7T0/GdSZ8on2GfIh/JnFHMUZ5CnAmecZ0Jno6cOJ2xnK0HoZ5RnSmctpyGnK6dMjTtBHGfSZ1xny6d6Z16nsGeKZ/en56fWZ5mnV6fmZ/1AlmfKZzJnyGdk2NenCmeGZ5pnxmc0p3b7OIfQZ+ZnGIsOZ4RnVmc6Z7and3Nmp3xn/meSZ45n1Gf5pxcnIofXpyKREWeGp1FnKWfuJ7Ono/4R6xpniWeRZ55nzmd9p2ln5mfEoB5nJmfipwkn8vvuh+kHsoDdM0H7+8fpJ+c4ZDlZJ1pHjqfrgGBnVItap9GHeKeBJ4DwVWdBZ1n79vutB9Un3meTx0zbFqe+px0nc0dGjdi7w2dLpy5nHHN3+5wYFLuWJxJnlqeBZ8tnZWcYKw/LW7szZ6WnkMfcZ5cnD8v6JEtnJ2c2ZwwnLnu/splnLKdOZ9FnLGdSx7nYnbv3Z9AnNadPZ6dnq2fnZyUkl2d+pwcnLntOu+9nSCefZzlntGdnZy57WEBHZ82nI2fl+89n7ceBJ9Dn/2dzZ4Mnr2dDZyDnWCdg57SnuKeop+ycNREo5xMnv8dRJ39nmOcsJyVnX2fXZyNH+Odau2Tn3CcU5+DnwmfU54End2cJZ9tnSWeCZ4znumfjh2/Hgrt050on1WdeZz8nU2cehsF7+GdSJxzn2mdc5zFnqPv2R1QKG2fFh86nGGeS59lnOOer+8+nMkdsB3JHDWcfpz0AVgetZznkYzgdZ8Bn2keEx+qnEYd/M31nhSd4553Ak2GE58/HSGfC53QV0hhG+PbnpmdbJwg45qdu5ypn82ee54yz/OeGJ7tnl6c/Zwtnx6dUJxLnxWeC56Vnwef7ZwtnO6ds57NnROfsJ+M4ZlXi52Unkedw580HK2ex57P7qacB5y4nQeckZ5Dns/sTpwnnx2cA51lHB2eDp/nnsSdXZ9nnnkdV542nZeew54XnsmeI5+M4Tedp5ycnGeet55NnUydRB97nQufAp87nsn5fW+a7SudGZyrnDOdq56ln0MfsnLGkg+fR50XnB0fz533Yi+eU5/XnwMer56nnhWfs5z3nded7Z7Ln2+epu+Hn6edZZ9PnwWd0p2Sntudh55tnmKct5wfnMedH553AN6dd58ynH2cPp9Lnd7u1Z6+n9Wfvp9UrrmWyp0Z7B8eRen+nSqcZUyqnIGfmAD1n5QcGR+4HEPuqJ8tB09O754nnDufjZ4777Kdy58kwMOdTp4/ny+c55yC+FKcoF+XnqOeLJwdnLTDr51/n32cEF/lnACen593n5+dR5xvnh+dBR0aN7Gc1540npBeA557n8Wdv59ynD2fJZzPnuWc3Z57n4WfN57gXFecLh3f7rG6UF0IXEOch557n7mccF+0nSed8J57nBmd8FyKnAhec53IXTOcr5y/nGhfEFw/nkhd4J+QX9mfiF4uneBdt5/s4WBdKFxYXe6cX56NnIWf0p9IYfmeaF3en++cmFw4nWBdiF+4XyueeF1wXNue8Z45HfheT5wEXqheIF2IYGWf2F1pnqueX57jnAqeAvnQXd+dUpw4XTBdUF1Tn+heEF2PnTqe3Jx4XjBeZ5zMHUkfFK26HSSc659Ur4OFGM9+nvgCUnn84RtlU+x0rLkNdK0yzvSuzAP0rV8fX+wgXZ3tQXdBr/Guhq4JrfzNUa9oXxKu1xyanpLtv0DsrMmuIBwJrsQdpFyhrThdX5ye7QQaTKzir0xf9F7MXsRfRq0PnkyfMnK6jUxfOB8BrM6tYp14XJYuUiUxraxfrqxsXgWcnF+jL5EK9F+RrAxcuQ0MXH+eEuzcXI3N3FyerDxdXF1Pnras+5xgHZxdZkqarXxcga7Dnbxd3c7sXT6sHFzMXIJehJ2CXdPPLF5CXXKvrFzCX1KdwlwoLExeIl8mr0JdHF6CXgRcLh9yJ5xdQl8iXOJewl3iXAcdncCbYk6uya3hrCGsCh2iXpjPiZIHYVJcXFyxrSgeol2SXVks1ZDEE1KvUlxRrgxfCa6DnKLv0l+gz0o6fF7yXjxdogM8XgpevFxyXJYtQXizkPJcsl3JrbJdzF8KXCVMsIBOripdEl5cXKJeql7KXrEu20qVHWpdIlzqXJJfslxEX3Rf8icyX2pesl9qrxxf6lxxzPRdil0qXNJdCa3SXDpd3c4aX9xfil98XGedqly9FQkrely6XfJdPFwKXWOdClx6X8JdZBkGXNpfKl3aXuJcWlxgHv9jzNKsXsZeul/yX7peJl+MX2FExlyaXtpcXq/aXWZdLF1YhhJd5l3GXBZcJl62nZIcUl7mXWJfEl/oHlZcSxxKnFgeNO4J+VRfKRz6z9pTz6OH7J/vt+1H7+vsKs4b7/WdkhxHePDMY+2L7VvsvFzj7VhdjFye7Vyhjlxs7oXsap6J79Ocv+wLHzZfxe9v7egD65xzAKkuwMj2XgPt9l2f7nfsKswUnRkdzl5Lg+WddZ0Kzw/vv59KX05c2R47nw+cmcQP+15eb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e9a3kDekl8M3+Jdet+hsPkAut9rLmqfut/a3J7uOt9BszSuLl363Grd6l4G3AcdS0Gxho/hZYr63rrd0t5G3szfVqzG3dCyz8GG3zssRtya3Ubdkh0q3KSvKCyK3+ZfZt6W3ubf0a1K3GZRyuDi76rf5J3W3vzdO5/GeRZTNtx5zcrd2t/W39Tfst023Vbdqt6K3ibcMt/6XEejLNJW315eyt+O3fLfJt5yXFE4zty23Y7dtt/23HbfD57lwbdjTeCO3L0utt+BnAbdat3KXsbwrt72387c/F4y3WecsFwyXOtRnt9hLa7eHt5q3HrcjcxS3OeiHNPG3WbfogLy3l7eTtwA3f5A+lKxAIjcSSwm367dHty+3s4tvt2bTcbcGt1+3trfgd2W3GDdQd7SEobdMC6B3T7dJt8e36MtQd5B2Rbe0t9+3ObebtzsXd7fWyZy3+osHt9o37bfgt9YXDobj0NK3q7c1twR3VHeCVze36DO2XPR357dgd8+3iHfkl8u3pHeqt/u3j7eUdxu31Hd957UXHHcPt4x38Hfcd15nWTc1+7rnf9c8B5R4L0wgiVT7uLfZU/i3TLOEtzkofHOktyE3C4cF9Gm3/5uft+G3brfMdxZXiGdmN33nAgR0NIFAMrfkc323CHcDt2d7a/gngCq39ncWs453MndEd7/HFEYSd8yHFHc1N053PneQa6M2/ndct0J3QXfed6J3Tueew2iJBlx4d0a3lueEdzF3w+dxd38nzLhod3B3yXfmd/1Xs+d08+l3C2YZtyZ3xbdmdyJ3LHdP5+MrHfret+RnIHfZd00XKXcVdxC3VXcibiG38DeT0+h3wnfBd6l3kyeFd9B3qVd6OqV3tbfldxZ3COfi2Pd8TrfFd7B3pnfDd913TXc0d0R41XeAd4W3WXczd0x3I3d5d8IXY6thd8O3s7cOdxe3fpf8tw0rX1D3twF3kXcltxt3gNcFpye7rnfdt3u3z3Pnd2V3c3ejd9QXBXc6kKd3EXdSdzl3l3dMt5kXy6sqd7t3DHfll7N30Xfzd9Z3gEofd+R3j3cg95h3EHdXK/kyu7d7d553B3cFF3+3UKtXNJD3vovQ9+t3z3ebd/IXkmtAiJj3mYtfdw13uXdXd/l3RqsTd++3ZkedoPV35VM/d9e3lXcqq1T3BbfhAIl3Nrffd7j35Pdbdxxzhnez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"))
///////////////////////////////////////////////
///////////////////////////////////////////////
/* Utility functions */
var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
pcbdata.metadata.revision + '__#';
var storage;
function initStorage(key) {
try {
window.localStorage.getItem("blank");
storage = window.localStorage;
} catch (e) {
// localStorage not available
}
if (!storage) {
try {
window.sessionStorage.getItem("blank");
storage = window.sessionStorage;
} catch (e) {
// sessionStorage also not available
}
}
}
function readStorage(key) {
if (storage) {
return storage.getItem(storagePrefix + key);
} else {
return null;
}
}
function writeStorage(key, value) {
if (storage) {
storage.setItem(storagePrefix + key, value);
}
}
function fancyDblClickHandler(el, onsingle, ondouble) {
return function() {
if (el.getAttribute("data-dblclick") == null) {
el.setAttribute("data-dblclick", 1);
setTimeout(function() {
if (el.getAttribute("data-dblclick") == 1) {
onsingle();
}
el.removeAttribute("data-dblclick");
}, 200);
} else {
el.removeAttribute("data-dblclick");
ondouble();
}
}
}
function smoothScrollToRow(rowid) {
document.getElementById(rowid).scrollIntoView({
behavior: "smooth",
block: "center",
inline: "nearest"
});
}
function focusInputField(input) {
input.scrollIntoView(false);
input.focus();
input.select();
}
function copyToClipboard() {
var text = '';
for (var node of bomhead.childNodes[0].childNodes) {
if (node.firstChild) {
text = text + node.firstChild.nodeValue;
}
if (node != bomhead.childNodes[0].lastChild) {
text += '\t';
}
}
text += '\n';
for (var row of bombody.childNodes) {
for (var cell of row.childNodes) {
for (var node of cell.childNodes) {
if (node.nodeName == "INPUT") {
if (node.checked) {
text = text + '✓';
}
} else if (node.nodeName == "MARK") {
text = text + node.firstChild.nodeValue;
} else {
text = text + node.nodeValue;
}
}
if (cell != row.lastChild) {
text += '\t';
}
}
text += '\n';
}
var textArea = document.createElement("textarea");
textArea.classList.add('clipboard-temp');
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
if (document.execCommand('copy')) {
console.log('Bom copied to clipboard.');
}
} catch (err) {
console.log('Can not copy to clipboard.');
}
document.body.removeChild(textArea);
}
function removeGutterNode(node) {
for (var i = 0; i < node.childNodes.length; i++) {
if (node.childNodes[i].classList &&
node.childNodes[i].classList.contains("gutter")) {
node.removeChild(node.childNodes[i]);
break;
}
}
}
function cleanGutters() {
removeGutterNode(document.getElementById("bot"));
removeGutterNode(document.getElementById("canvasdiv"));
}
var units = {
prefixes: {
giga: ["G", "g", "giga", "Giga", "GIGA"],
mega: ["M", "mega", "Mega", "MEGA"],
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
milli: ["m", "milli", "Milli", "MILLI"],
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
nano: ["N", "n", "nano", "Nano", "NANO"],
pico: ["P", "p", "pico", "Pico", "PICO"],
},
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
unitsLong: [
"OHM", "Ohm", "ohm", "ohms",
"FARAD", "Farad", "farad",
"HENRY", "Henry", "henry"
],
getMultiplier: function(s) {
if (this.prefixes.giga.includes(s)) return 1e9;
if (this.prefixes.mega.includes(s)) return 1e6;
if (this.prefixes.kilo.includes(s)) return 1e3;
if (this.prefixes.milli.includes(s)) return 1e-3;
if (this.prefixes.micro.includes(s)) return 1e-6;
if (this.prefixes.nano.includes(s)) return 1e-9;
if (this.prefixes.pico.includes(s)) return 1e-12;
return 1;
},
valueRegex: null,
}
function initUtils() {
var allPrefixes = units.prefixes.giga
.concat(units.prefixes.mega)
.concat(units.prefixes.kilo)
.concat(units.prefixes.milli)
.concat(units.prefixes.micro)
.concat(units.prefixes.nano)
.concat(units.prefixes.pico);
var allUnits = units.unitsShort.concat(units.unitsLong);
units.valueRegex = new RegExp("^([0-9\.]+)" +
"\\s*(" + allPrefixes.join("|") + ")?" +
"(" + allUnits.join("|") + ")?" +
"(\\b.*)?$", "");
units.valueAltRegex = new RegExp("^([0-9]*)" +
"(" + units.unitsShort.join("|") + ")?" +
"([GgMmKkUuNnPp])?" +
"([0-9]*)" +
"(\\b.*)?$", "");
if (config.fields.includes("Value")) {
var index = config.fields.indexOf("Value");
pcbdata.bom["parsedValues"] = {};
for (var id in pcbdata.bom.fields) {
pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
}
}
}
function parseValue(val, ref) {
var inferUnit = (unit, ref) => {
if (unit) {
unit = unit.toLowerCase();
if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
unit = 'r';
}
unit = unit[0];
} else {
ref = /^([a-z]+)\d+$/i.exec(ref);
if (ref) {
ref = ref[1].toLowerCase();
if (ref == "c") unit = 'f';
else if (ref == "l") unit = 'h';
else if (ref == "r" || ref == "rv") unit = 'r';
else unit = null;
}
}
return unit;
};
val = val.replace(/,/g, "");
var match = units.valueRegex.exec(val);
var unit;
if (match) {
val = parseFloat(match[1]);
if (match[2]) {
val = val * units.getMultiplier(match[2]);
}
unit = inferUnit(match[3], ref);
if (!unit) return null;
else return {
val: val,
unit: unit,
extra: match[4],
}
}
match = units.valueAltRegex.exec(val);
if (match && (match[1] || match[4])) {
val = parseFloat(match[1] + "." + match[4]);
if (match[3]) {
val = val * units.getMultiplier(match[3]);
}
unit = inferUnit(match[2], ref);
if (!unit) return null;
else return {
val: val,
unit: unit,
extra: match[5],
}
}
return null;
}
function valueCompare(a, b, stra, strb) {
if (a === null && b === null) {
// Failed to parse both values, compare them as strings.
if (stra != strb) return stra > strb ? 1 : -1;
else return 0;
} else if (a === null) {
return 1;
} else if (b === null) {
return -1;
} else {
if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
else if (a.val != b.val) return a.val > b.val ? 1 : -1;
else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
else return 0;
}
}
function validateSaveImgDimension(element) {
var valid = false;
var intValue = 0;
if (/^[1-9]\d*$/.test(element.value)) {
intValue = parseInt(element.value);
if (intValue <= 16000) {
valid = true;
}
}
if (valid) {
element.classList.remove("invalid");
} else {
element.classList.add("invalid");
}
return intValue;
}
function saveImage(layer) {
var width = validateSaveImgDimension(document.getElementById("render-save-width"));
var height = validateSaveImgDimension(document.getElementById("render-save-height"));
var bgcolor = null;
if (!document.getElementById("render-save-transparent").checked) {
var style = getComputedStyle(topmostdiv);
bgcolor = style.getPropertyValue("background-color");
}
if (!width || !height) return;
// Prepare image
var canvas = document.createElement("canvas");
var layerdict = {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
bg: canvas,
fab: canvas,
silk: canvas,
highlight: canvas,
layer: layer,
}
// Do the rendering
recalcLayerScale(layerdict, width, height);
prepareLayer(layerdict);
clearCanvas(canvas, bgcolor);
drawBackground(layerdict, false);
drawHighlightsOnLayer(layerdict, false);
// Save image
var imgdata = canvas.toDataURL("image/png");
var filename = pcbdata.metadata.title;
if (pcbdata.metadata.revision) {
filename += `.${pcbdata.metadata.revision}`;
}
filename += `.${layer}.png`;
saveFile(filename, dataURLtoBlob(imgdata));
}
function saveSettings() {
var data = {
type: "InteractiveHtmlBom settings",
version: 1,
pcbmetadata: pcbdata.metadata,
settings: settings,
}
var blob = new Blob([JSON.stringify(data, null, 4)], {
type: "application/json"
});
saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}
function loadSettings() {
var input = document.createElement("input");
input.type = "file";
input.accept = ".settings.json";
input.onchange = function(e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = readerEvent => {
var content = readerEvent.target.result;
var newSettings;
try {
newSettings = JSON.parse(content);
} catch (e) {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
if (newSettings.type != "InteractiveHtmlBom settings") {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
if (metadataMatches) {
for (var k in pcbdata.metadata) {
if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
metadataMatches = false;
}
}
}
if (!metadataMatches) {
var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
if (!confirm(
`Settins file metadata does not match current metadata.\n\n` +
`Page metadata:\n${currentMetadata}\n\n` +
`Settings file metadata:\n${fileMetadata}\n\n` +
`Press OK if you would like to import settings anyway.`)) {
return;
}
}
overwriteSettings(newSettings.settings);
}
reader.readAsText(file, 'UTF-8');
}
input.click();
}
function overwriteSettings(newSettings) {
initDone = false;
Object.assign(settings, newSettings);
writeStorage("bomlayout", settings.bomlayout);
writeStorage("bommode", settings.bommode);
writeStorage("canvaslayout", settings.canvaslayout);
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
for (var checkbox of settings.checkboxes) {
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
}
writeStorage("markWhenChecked", settings.markWhenChecked);
padsVisible(settings.renderPads);
document.getElementById("padsCheckbox").checked = settings.renderPads;
fabricationVisible(settings.renderFabrication);
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
silkscreenVisible(settings.renderSilkscreen);
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
referencesVisible(settings.renderReferences);
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
valuesVisible(settings.renderValues);
document.getElementById("valuesCheckbox").checked = settings.renderValues;
tracksVisible(settings.renderTracks);
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
zonesVisible(settings.renderZones);
document.getElementById("zonesCheckbox").checked = settings.renderZones;
dnpOutline(settings.renderDnpOutline);
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
setRedrawOnDrag(settings.redrawOnDrag);
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
setDarkMode(settings.darkMode);
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
setHighlightPin1(settings.highlightpin1);
document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
showFootprints(settings.show_footprints);
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
initDone = true;
prepCheckboxes();
changeBomLayout(settings.bomlayout);
}
function saveFile(filename, blob) {
var link = document.createElement("a");
var objurl = URL.createObjectURL(blob);
link.download = filename;
link.href = objurl;
link.click();
}
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {
type: mime
});
}
var settings = {
canvaslayout: "default",
bomlayout: "default",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
darkMode: false,
highlightpin1: false,
redrawOnDrag: true,
boardRotation: 0,
renderPads: true,
renderReferences: true,
renderValues: true,
renderSilkscreen: true,
renderFabrication: true,
renderDnpOutline: false,
renderTracks: true,
renderZones: true,
columnOrder: [],
hiddenColumns: [],
}
function initDefaults() {
settings.bomlayout = readStorage("bomlayout");
if (settings.bomlayout === null) {
settings.bomlayout = config.bom_view;
}
if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
settings.bomlayout = config.bom_view;
}
settings.bommode = readStorage("bommode");
if (settings.bommode === null) {
settings.bommode = "grouped";
}
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
settings.bommode = "grouped";
}
settings.canvaslayout = readStorage("canvaslayout");
if (settings.canvaslayout === null) {
settings.canvaslayout = config.layer_view;
}
var bomCheckboxes = readStorage("bomCheckboxes");
if (bomCheckboxes === null) {
bomCheckboxes = config.checkboxes;
}
settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
document.getElementById("bomCheckboxes").value = bomCheckboxes;
settings.markWhenChecked = readStorage("markWhenChecked") || "";
populateMarkWhenCheckedOptions();
function initBooleanSetting(storageString, def, elementId, func) {
var b = readStorage(storageString);
if (b === null) {
b = def;
} else {
b = (b == "true");
}
document.getElementById(elementId).checked = b;
func(b);
}
initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
if ("tracks" in pcbdata) {
initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
} else {
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
tracksVisible(false);
zonesVisible(false);
}
initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
var hcols = JSON.parse(readStorage("hiddenColumns"));
if (hcols === null) {
hcols = [];
}
settings.hiddenColumns = hcols.filter(e => fields.includes(e));
var cord = JSON.parse(readStorage("columnOrder"));
if (cord === null) {
cord = fields;
} else {
cord = cord.filter(e => fields.includes(e));
if (cord.length != fields.length)
cord = fields;
}
settings.columnOrder = cord;
settings.boardRotation = readStorage("boardRotation");
if (settings.boardRotation === null) {
settings.boardRotation = config.board_rotation * 5;
} else {
settings.boardRotation = parseInt(settings.boardRotation);
}
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
}
// Helper classes for user js callbacks.
const IBOM_EVENT_TYPES = {
ALL: "all",
HIGHLIGHT_EVENT: "highlightEvent",
CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}
const EventHandler = {
callbacks: {},
init: function() {
for (eventType of Object.values(IBOM_EVENT_TYPES))
this.callbacks[eventType] = [];
},
registerCallback: function(eventType, callback) {
this.callbacks[eventType].push(callback);
},
emitEvent: function(eventType, eventArgs) {
event = {
eventType: eventType,
args: eventArgs,
}
var callback;
for (callback of this.callbacks[eventType])
callback(event);
for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
callback(event);
}
}
EventHandler.init();
///////////////////////////////////////////////
///////////////////////////////////////////////
/* PCB rendering code */
var emptyContext2d = document.createElement("canvas").getContext("2d");
function deg2rad(deg) {
return deg * Math.PI / 180;
}
function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
var point = [
linepoint[0] * text.width + offsetx,
linepoint[1] * text.height + offsety
];
// This approximates pcbnew behavior with how text tilts depending on horizontal justification
point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
return point;
}
function drawText(ctx, text, color) {
if ("ref" in text && !settings.renderReferences) return;
if ("val" in text && !settings.renderValues) return;
ctx.save();
ctx.fillStyle = color;
ctx.strokeStyle = color;
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.lineWidth = text.thickness;
if ("svgpath" in text) {
ctx.stroke(new Path2D(text.svgpath));
ctx.restore();
return;
}
ctx.translate(...text.pos);
ctx.translate(text.thickness * 0.5, 0);
var angle = -text.angle;
if (text.attr.includes("mirrored")) {
ctx.scale(-1, 1);
angle = -angle;
}
var tilt = 0;
if (text.attr.includes("italic")) {
tilt = 0.125;
}
var interline = text.height * 1.5 + text.thickness;
var txt = text.text.split("\n");
// KiCad ignores last empty line.
if (txt[txt.length - 1] == '') txt.pop();
ctx.rotate(deg2rad(angle));
var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
for (var i in txt) {
var lineWidth = text.thickness + interline / 2 * tilt;
for (var j = 0; j < txt[i].length; j++) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
lineWidth += fourSpaces - lineWidth % fourSpaces;
} else {
if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
}
lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
}
}
var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
var inOverbar = false;
for (var j = 0; j < txt[i].length; j++) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
offsetx += fourSpaces - offsetx % fourSpaces;
continue;
} else if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
if (txt[i][j] != '~') {
inOverbar = !inOverbar;
}
}
var glyph = pcbdata.font_data[txt[i][j]];
if (inOverbar) {
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
if (!lastHadOverbar) {
overbarStart[0] += text.height * 1.4 * tilt;
lastHadOverbar = true;
}
ctx.beginPath();
ctx.moveTo(...overbarStart);
ctx.lineTo(...overbarEnd);
ctx.stroke();
} else {
lastHadOverbar = false;
}
for (var line of glyph.l) {
ctx.beginPath();
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
for (var k = 1; k < line.length; k++) {
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
}
ctx.stroke();
}
offsetx += glyph.w * text.width;
}
offsety += interline;
}
ctx.restore();
}
function drawedge(ctx, scalefactor, edge, color) {
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
if ("svgpath" in edge) {
ctx.stroke(new Path2D(edge.svgpath));
} else {
ctx.beginPath();
if (edge.type == "segment") {
ctx.moveTo(...edge.start);
ctx.lineTo(...edge.end);
}
if (edge.type == "rect") {
ctx.moveTo(...edge.start);
ctx.lineTo(edge.start[0], edge.end[1]);
ctx.lineTo(...edge.end);
ctx.lineTo(edge.end[0], edge.start[1]);
ctx.lineTo(...edge.start);
}
if (edge.type == "arc") {
ctx.arc(
...edge.start,
edge.radius,
deg2rad(edge.startangle),
deg2rad(edge.endangle));
}
if (edge.type == "circle") {
ctx.arc(
...edge.start,
edge.radius,
0, 2 * Math.PI);
ctx.closePath();
}
if (edge.type == "curve") {
ctx.moveTo(...edge.start);
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
}
if("filled" in edge && edge.filled)
ctx.fill();
else
ctx.stroke();
}
}
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
var path = new Path2D();
var width = size[0];
var height = size[1];
var x = width * -0.5;
var y = height * -0.5;
var chamfOffset = Math.min(width, height) * chamfratio;
path.moveTo(x, 0);
if (chamfpos & 4) {
path.lineTo(x, y + height - chamfOffset);
path.lineTo(x + chamfOffset, y + height);
path.lineTo(0, y + height);
} else {
path.arcTo(x, y + height, x + width, y + height, radius);
}
if (chamfpos & 8) {
path.lineTo(x + width - chamfOffset, y + height);
path.lineTo(x + width, y + height - chamfOffset);
path.lineTo(x + width, 0);
} else {
path.arcTo(x + width, y + height, x + width, y, radius);
}
if (chamfpos & 2) {
path.lineTo(x + width, y + chamfOffset);
path.lineTo(x + width - chamfOffset, y);
path.lineTo(0, y);
} else {
path.arcTo(x + width, y, x, y, radius);
}
if (chamfpos & 1) {
path.lineTo(x + chamfOffset, y);
path.lineTo(x, y + chamfOffset);
path.lineTo(x, 0);
} else {
path.arcTo(x, y, x, y + height, radius);
}
path.closePath();
return path;
}
function getOblongPath(size) {
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}
function getPolygonsPath(shape) {
if (shape.path2d) {
return shape.path2d;
}
if ("svgpath" in shape) {
shape.path2d = new Path2D(shape.svgpath);
} else {
var path = new Path2D();
for (var polygon of shape.polygons) {
path.moveTo(...polygon[0]);
for (var i = 1; i < polygon.length; i++) {
path.lineTo(...polygon[i]);
}
path.closePath();
}
shape.path2d = path;
}
return shape.path2d;
}
function drawPolygonShape(ctx, scalefactor, shape, color) {
ctx.save();
if (!("svgpath" in shape)) {
ctx.translate(...shape.pos);
ctx.rotate(deg2rad(-shape.angle));
}
if("filled" in shape && !shape.filled) {
ctx.strokeStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.stroke(getPolygonsPath(shape));
} else {
ctx.fillStyle = color;
ctx.fill(getPolygonsPath(shape));
}
ctx.restore();
}
function drawDrawing(ctx, scalefactor, drawing, color) {
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
drawedge(ctx, scalefactor, drawing, color);
} else if (drawing.type == "polygon") {
drawPolygonShape(ctx, scalefactor, drawing, color);
} else {
drawText(ctx, drawing, color);
}
}
function getCirclePath(radius) {
var path = new Path2D();
path.arc(0, 0, radius, 0, 2 * Math.PI);
path.closePath();
return path;
}
function getCachedPadPath(pad) {
if (!pad.path2d) {
// if path2d is not set, build one and cache it on pad object
if (pad.shape == "rect") {
pad.path2d = new Path2D();
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
} else if (pad.shape == "oval") {
pad.path2d = getOblongPath(pad.size);
} else if (pad.shape == "circle") {
pad.path2d = getCirclePath(pad.size[0] / 2);
} else if (pad.shape == "roundrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
} else if (pad.shape == "chamfrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
} else if (pad.shape == "custom") {
pad.path2d = getPolygonsPath(pad);
}
}
return pad.path2d;
}
function drawPad(ctx, pad, color, outline) {
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(deg2rad(pad.angle));
if (pad.offset) {
ctx.translate(...pad.offset);
}
ctx.fillStyle = color;
ctx.strokeStyle = color;
var path = getCachedPadPath(pad);
if (outline) {
ctx.stroke(path);
} else {
ctx.fill(path);
}
ctx.restore();
}
function drawPadHole(ctx, pad, padHoleColor) {
if (pad.type != "th") return;
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(deg2rad(pad.angle));
ctx.fillStyle = padHoleColor;
if (pad.drillshape == "oblong") {
ctx.fill(getOblongPath(pad.drillsize));
} else {
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
}
ctx.restore();
}
function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
if (highlight) {
// draw bounding box
if (footprint.layer == layer) {
ctx.save();
ctx.globalAlpha = 0.2;
ctx.translate(...footprint.bbox.pos);
ctx.rotate(deg2rad(-footprint.bbox.angle));
ctx.translate(...footprint.bbox.relpos);
ctx.fillStyle = colors.pad;
ctx.fillRect(0, 0, ...footprint.bbox.size);
ctx.globalAlpha = 1;
ctx.strokeStyle = colors.pad;
ctx.strokeRect(0, 0, ...footprint.bbox.size);
ctx.restore();
}
}
// draw drawings
for (var drawing of footprint.drawings) {
if (drawing.layer == layer) {
drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
}
}
// draw pads
if (settings.renderPads) {
for (var pad of footprint.pads) {
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, colors.pad, outline);
if (pad.pin1 && settings.highlightpin1) {
drawPad(ctx, pad, colors.outline, true);
}
}
}
for (var pad of footprint.pads) {
drawPadHole(ctx, pad, colors.padHole);
}
}
}
function drawEdgeCuts(canvas, scalefactor) {
var ctx = canvas.getContext("2d");
var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
for (var edge of pcbdata.edges) {
drawDrawing(ctx, scalefactor, edge, edgecolor);
}
}
function drawFootprints(canvas, layer, scalefactor, highlight) {
var ctx = canvas.getContext("2d");
ctx.lineWidth = 3 / scalefactor;
var style = getComputedStyle(topmostdiv);
var colors = {
pad: style.getPropertyValue('--pad-color'),
padHole: style.getPropertyValue('--pad-hole-color'),
outline: style.getPropertyValue('--pin1-outline-color'),
}
for (var i = 0; i < pcbdata.footprints.length; i++) {
var mod = pcbdata.footprints[i];
var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
var h = highlightedFootprints.includes(i);
var d = markedFootprints.has(i);
if (highlight) {
if(h && d) {
colors.pad = style.getPropertyValue('--pad-color-highlight-both');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
} else if (h) {
colors.pad = style.getPropertyValue('--pad-color-highlight');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
} else if (d) {
colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
}
}
if( h || d || !highlight) {
drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
}
}
}
function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
var ctx = canvas.getContext("2d");
for (var d of pcbdata.drawings[layername][layer]) {
if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
drawedge(ctx, scalefactor, d, edgeColor);
} else if (d.type == "polygon") {
drawPolygonShape(ctx, scalefactor, d, polygonColor);
} else {
drawText(ctx, d, textColor);
}
}
}
function drawTracks(canvas, layer, color, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.lineCap = "round";
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
ctx.lineWidth = track.width;
ctx.beginPath();
if ('radius' in track) {
ctx.arc(
...track.center,
track.radius,
deg2rad(track.startangle),
deg2rad(track.endangle));
} else {
ctx.moveTo(...track.start);
ctx.lineTo(...track.end);
}
ctx.stroke();
}
}
function drawZones(canvas, layer, color, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineJoin = "round";
for (var zone of pcbdata.zones[layer]) {
if (!zone.path2d) {
zone.path2d = getPolygonsPath(zone);
}
if (highlight && highlightedNet != zone.net) continue;
ctx.fill(zone.path2d);
if (zone.width > 0) {
ctx.lineWidth = zone.width;
ctx.stroke(zone.path2d);
}
}
}
function clearCanvas(canvas, color = null) {
var ctx = canvas.getContext("2d");
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
if (color) {
ctx.fillStyle = color;
ctx.fillRect(0, 0, canvas.width, canvas.height);
} else {
if (!window.matchMedia("print").matches)
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
ctx.restore();
}
function drawNets(canvas, layer, highlight) {
var style = getComputedStyle(topmostdiv);
if (settings.renderTracks) {
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
drawTracks(canvas, layer, trackColor, highlight);
}
if (settings.renderZones) {
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
drawZones(canvas, layer, zoneColor, highlight);
}
if (highlight && settings.renderPads) {
var padColor = style.getPropertyValue('--pad-color-highlight');
var padHoleColor = style.getPropertyValue('--pad-hole-color');
var ctx = canvas.getContext("2d");
for (var footprint of pcbdata.footprints) {
// draw pads
var padDrawn = false;
for (var pad of footprint.pads) {
if (highlightedNet != pad.net) continue;
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, padColor, false);
padDrawn = true;
}
}
if (padDrawn) {
// redraw all pad holes because some pads may overlap
for (var pad of footprint.pads) {
drawPadHole(ctx, pad, padHoleColor);
}
}
}
}
}
function drawHighlightsOnLayer(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.highlight);
}
if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
drawFootprints(canvasdict.highlight, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, true);
}
if (highlightedNet !== null) {
drawNets(canvasdict.highlight, canvasdict.layer, true);
}
}
function drawHighlights() {
drawHighlightsOnLayer(allcanvas.front);
drawHighlightsOnLayer(allcanvas.back);
}
function drawBackground(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.bg);
clearCanvas(canvasdict.fab);
clearCanvas(canvasdict.silk);
}
drawNets(canvasdict.bg, canvasdict.layer, false);
drawFootprints(canvasdict.bg, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, false);
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
var style = getComputedStyle(topmostdiv);
var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
var textColor = style.getPropertyValue('--silkscreen-text-color');
if (settings.renderSilkscreen) {
drawBgLayer(
"silkscreen", canvasdict.silk, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom,
edgeColor, polygonColor, textColor);
}
edgeColor = style.getPropertyValue('--fabrication-edge-color');
polygonColor = style.getPropertyValue('--fabrication-polygon-color');
textColor = style.getPropertyValue('--fabrication-text-color');
if (settings.renderFabrication) {
drawBgLayer(
"fabrication", canvasdict.fab, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom,
edgeColor, polygonColor, textColor);
}
}
function prepareCanvas(canvas, flip, transform) {
var ctx = canvas.getContext("2d");
ctx.setTransform(1, 0, 0, 1, 0, 0);
var fontsize = 1.55;
ctx.scale(transform.zoom, transform.zoom);
ctx.translate(transform.panx, transform.pany);
if (flip) {
ctx.scale(-1, 1);
}
ctx.translate(transform.x, transform.y);
ctx.rotate(deg2rad(settings.boardRotation));
ctx.scale(transform.s, transform.s);
}
function prepareLayer(canvasdict) {
var flip = (canvasdict.layer == "B");
for (var c of ["bg", "fab", "silk", "highlight"]) {
prepareCanvas(canvasdict[c], flip, canvasdict.transform);
}
}
function rotateVector(v, angle) {
angle = deg2rad(angle);
return [
v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
];
}
function applyRotation(bbox) {
var corners = [
[bbox.minx, bbox.miny],
[bbox.minx, bbox.maxy],
[bbox.maxx, bbox.miny],
[bbox.maxx, bbox.maxy],
];
corners = corners.map((v) => rotateVector(v, settings.boardRotation));
return {
minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
}
}
function recalcLayerScale(layerdict, width, height) {
var bbox = applyRotation(pcbdata.edges_bbox);
var scalefactor = 0.98 * Math.min(
width / (bbox.maxx - bbox.minx),
height / (bbox.maxy - bbox.miny)
);
if (scalefactor < 0.1) {
scalefactor = 1;
}
layerdict.transform.s = scalefactor;
var flip = (layerdict.layer == "B");
if (flip) {
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
} else {
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
}
layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
for (var c of ["bg", "fab", "silk", "highlight"]) {
canvas = layerdict[c];
canvas.width = width;
canvas.height = height;
canvas.style.width = (width / devicePixelRatio) + "px";
canvas.style.height = (height / devicePixelRatio) + "px";
}
}
function redrawCanvas(layerdict) {
prepareLayer(layerdict);
drawBackground(layerdict);
drawHighlightsOnLayer(layerdict);
}
function resizeCanvas(layerdict) {
var canvasdivid = {
"F": "frontcanvas",
"B": "backcanvas"
} [layerdict.layer];
var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
recalcLayerScale(layerdict, width, height);
redrawCanvas(layerdict);
}
function resizeAll() {
resizeCanvas(allcanvas.front);
resizeCanvas(allcanvas.back);
}
function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var dx, dy;
if (len_sq == 0) {
// start and end of the segment coincide
dx = x - x1;
dy = y - y1;
} else {
var param = dot / len_sq;
var xx, yy;
if (param < 0) {
xx = x1;
yy = y1;
} else if (param > 1) {
xx = x2;
yy = y2;
} else {
xx = x1 + param * C;
yy = y1 + param * D;
}
dx = x - xx;
dy = y - yy;
}
return dx * dx + dy * dy <= d * d;
}
function modulo(n, mod) {
return ((n % mod) + mod) % mod;
}
function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
var dx = x - xc;
var dy = y - yc;
var r_sq = dx * dx + dy * dy;
var rmin = Math.max(0, radius - d);
var rmax = radius + d;
if (r_sq < rmin * rmin || r_sq > rmax * rmax)
return false;
var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
var dx1 = xc + radius * Math.cos(angle1) - x;
var dy1 = yc + radius * Math.sin(angle1) - y;
if (dx1 * dx1 + dy1 * dy1 <= d * d)
return true;
var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
var dx2 = xc + radius * Math.cos(angle2) - x;
var dy2 = yc + radius * Math.sin(angle2) - y;
if (dx2 * dx2 + dy2 * dy2 <= d * d)
return true;
var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
if (angle1 > angle2)
return (angle >= angle2 || angle <= angle1);
else
return (angle >= angle1 && angle <= angle2);
}
function pointWithinPad(x, y, pad) {
var v = [x - pad.pos[0], y - pad.pos[1]];
v = rotateVector(v, -pad.angle);
if (pad.offset) {
v[0] -= pad.offset[0];
v[1] -= pad.offset[1];
}
return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}
function netHitScan(layer, x, y) {
// Check track segments
if (settings.renderTracks && pcbdata.tracks) {
for (var track of pcbdata.tracks[layer]) {
if ('radius' in track) {
if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
return track.net;
}
} else {
if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
return track.net;
}
}
}
}
// Check pads
if (settings.renderPads) {
for (var footprint of pcbdata.footprints) {
for (var pad of footprint.pads) {
if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
return pad.net;
}
}
}
}
return null;
}
function pointWithinFootprintBbox(x, y, bbox) {
var v = [x - bbox.pos[0], y - bbox.pos[1]];
v = rotateVector(v, bbox.angle);
return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}
function bboxHitScan(layer, x, y) {
var result = [];
for (var i = 0; i < pcbdata.footprints.length; i++) {
var footprint = pcbdata.footprints[i];
if (footprint.layer == layer) {
if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
result.push(i);
}
}
}
return result;
}
function handlePointerDown(e, layerdict) {
if (e.button != 0 && e.button != 1) {
return;
}
e.preventDefault();
e.stopPropagation();
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
layerdict.pointerStates[e.pointerId] = {
distanceTravelled: 0,
lastX: e.offsetX,
lastY: e.offsetY,
downTime: Date.now(),
};
}
function handleMouseClick(e, layerdict) {
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
var x = e.offsetX;
var y = e.offsetY;
var t = layerdict.transform;
if (layerdict.layer == "B") {
x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
} else {
x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
}
y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
var v = rotateVector([x, y], -settings.boardRotation);
if ("nets" in pcbdata) {
var net = netHitScan(layerdict.layer, ...v);
if (net !== highlightedNet) {
netClicked(net);
}
}
if (highlightedNet === null) {
var footprints = bboxHitScan(layerdict.layer, ...v);
if (footprints.length > 0) {
footprintsClicked(footprints);
}
}
}
function handlePointerLeave(e, layerdict) {
e.preventDefault();
e.stopPropagation();
if (!settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
delete layerdict.pointerStates[e.pointerId];
}
function resetTransform(layerdict) {
layerdict.transform.panx = 0;
layerdict.transform.pany = 0;
layerdict.transform.zoom = 1;
redrawCanvas(layerdict);
}
function handlePointerUp(e, layerdict) {
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
e.preventDefault();
e.stopPropagation();
if (e.button == 2) {
// Reset pan and zoom on right click.
resetTransform(layerdict);
layerdict.anotherPointerTapped = false;
return;
}
// We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
var ptr = layerdict.pointerStates[e.pointerId];
ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
if (Object.keys(layerdict.pointerStates).length == 1) {
if (layerdict.anotherPointerTapped) {
// This is the second pointer coming off of a two-finger tap
resetTransform(layerdict);
} else {
// This is just a regular tap
handleMouseClick(e, layerdict);
}
layerdict.anotherPointerTapped = false;
} else {
// This is the first finger coming off of what could become a two-finger tap
layerdict.anotherPointerTapped = true;
}
} else {
if (!settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
layerdict.anotherPointerTapped = false;
}
delete layerdict.pointerStates[e.pointerId];
}
function handlePointerMove(e, layerdict) {
if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
return;
}
e.preventDefault();
e.stopPropagation();
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
var thisPtr = layerdict.pointerStates[e.pointerId];
var dx = e.offsetX - thisPtr.lastX;
var dy = e.offsetY - thisPtr.lastY;
// If this number is low on pointer up, we count the action as a click
thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
if (Object.keys(layerdict.pointerStates).length == 1) {
// This is a simple drag
layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
} else if (Object.keys(layerdict.pointerStates).length == 2) {
var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
var scaleFactor = newDist / oldDist;
if (scaleFactor != NaN) {
layerdict.transform.zoom *= scaleFactor;
var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
}
}
thisPtr.lastX = e.offsetX;
thisPtr.lastY = e.offsetY;
if (settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
}
function handleMouseWheel(e, layerdict) {
e.preventDefault();
e.stopPropagation();
var t = layerdict.transform;
var wheeldelta = e.deltaY;
if (e.deltaMode == 1) {
// FF only, scroll by lines
wheeldelta *= 30;
} else if (e.deltaMode == 2) {
wheeldelta *= 300;
}
var m = Math.pow(1.1, -wheeldelta / 40);
// Limit amount of zoom per tick.
if (m > 2) {
m = 2;
} else if (m < 0.5) {
m = 0.5;
}
t.zoom *= m;
var zoomd = (1 - m) / t.zoom;
t.panx += devicePixelRatio * e.offsetX * zoomd;
t.pany += devicePixelRatio * e.offsetY * zoomd;
redrawCanvas(layerdict);
}
function addMouseHandlers(div, layerdict) {
div.addEventListener("pointerdown", function(e) {
handlePointerDown(e, layerdict);
});
div.addEventListener("pointermove", function(e) {
handlePointerMove(e, layerdict);
});
div.addEventListener("pointerup", function(e) {
handlePointerUp(e, layerdict);
});
var pointerleave = function(e) {
handlePointerLeave(e, layerdict);
}
div.addEventListener("pointercancel", pointerleave);
div.addEventListener("pointerleave", pointerleave);
div.addEventListener("pointerout", pointerleave);
div.onwheel = function(e) {
handleMouseWheel(e, layerdict);
}
for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
element.addEventListener("contextmenu", function(e) {
e.preventDefault();
}, false);
}
}
function setRedrawOnDrag(value) {
settings.redrawOnDrag = value;
writeStorage("redrawOnDrag", value);
}
function setBoardRotation(value) {
settings.boardRotation = value * 5;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("rotationDegree").textContent = settings.boardRotation;
resizeAll();
}
function initRender() {
allcanvas = {
front: {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
pointerStates: {},
anotherPointerTapped: false,
bg: document.getElementById("F_bg"),
fab: document.getElementById("F_fab"),
silk: document.getElementById("F_slk"),
highlight: document.getElementById("F_hl"),
layer: "F",
},
back: {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
pointerStates: {},
anotherPointerTapped: false,
bg: document.getElementById("B_bg"),
fab: document.getElementById("B_fab"),
silk: document.getElementById("B_slk"),
highlight: document.getElementById("B_hl"),
layer: "B",
}
};
addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/*
* Table reordering via Drag'n'Drop
* Inspired by: https://htmldom.dev/drag-and-drop-table-column
*/
function setBomHandlers() {
const bom = document.getElementById('bomtable');
let dragName;
let placeHolderElements;
let draggingElement;
let forcePopulation;
let xOffset;
let yOffset;
let wasDragged;
const mouseUpHandler = function(e) {
// Delete dragging element
draggingElement.remove();
// Make BOM selectable again
bom.style.removeProperty("userSelect");
// Remove listeners
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
if (wasDragged) {
// Redraw whole BOM
populateBomTable();
}
}
const mouseMoveHandler = function(e) {
// Notice the dragging
wasDragged = true;
// Make the dragged element visible
draggingElement.style.removeProperty("display");
// Set elements position to mouse position
draggingElement.style.left = `${e.screenX - xOffset}px`;
draggingElement.style.top = `${e.screenY - yOffset}px`;
// Forced redrawing of BOM table
if (forcePopulation) {
forcePopulation = false;
// Copy array
phe = Array.from(placeHolderElements);
// populate BOM table again
populateBomHeader(dragName, phe);
populateBomBody(dragName, phe);
}
// Set up array of hidden columns
var hiddenColumns = Array.from(settings.hiddenColumns);
// In the ungrouped mode, quantity don't exist
if (settings.bommode === "ungrouped")
hiddenColumns.push("Quantity");
// If no checkbox fields can be found, we consider them hidden
if (settings.checkboxes.length == 0)
hiddenColumns.push("checkboxes");
// Get table headers and group them into checkboxes, extrafields and normal headers
const bh = document.getElementById("bomhead");
headers = Array.from(bh.querySelectorAll("th"))
headers.shift() // numCol is not part of the columnOrder
headerGroups = []
lastCompoundClass = null;
for (i = 0; i < settings.columnOrder.length; i++) {
cElem = settings.columnOrder[i];
if (hiddenColumns.includes(cElem)) {
// Hidden columns appear as a dummy element
headerGroups.push([]);
continue;
}
elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
if (elem.classList.contains("bom-checkbox")) {
if (lastCompoundClass === "bom-checkbox") {
cbGroup = headerGroups.pop();
cbGroup.push(elem);
headerGroups.push(cbGroup);
} else {
lastCompoundClass = "bom-checkbox";
headerGroups.push([elem])
}
} else {
headerGroups.push([elem])
}
}
// Copy settings.columnOrder
var columns = Array.from(settings.columnOrder)
// Set up array with indices of hidden columns
var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
var dragIndex = columns.indexOf(dragName);
var swapIndex = dragIndex;
var swapDone = false;
// Check if the current dragged element is swapable with the left or right element
if (dragIndex > 0) {
// Get left headers boundingbox
swapIndex = dragIndex - 1;
while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
swapIndex--;
if (!hiddenIndices.includes(swapIndex)) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
if ((!swapDone) && dragIndex < headerGroups.length - 1) {
// Get right headers boundingbox
swapIndex = dragIndex + 1;
while (hiddenIndices.includes(swapIndex))
swapIndex++;
if (swapIndex < headerGroups.length) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
// Write back change to storage
if (swapDone) {
settings.columnOrder = columns
writeStorage("columnOrder", JSON.stringify(columns));
}
}
const mouseDownHandler = function(e) {
var target = e.target;
if (target.tagName.toLowerCase() != "td")
target = target.parentElement;
// Used to check if a dragging has ever happened
wasDragged = false;
// Create new element which will be displayed as the dragged column
draggingElement = document.createElement("div")
draggingElement.classList.add("dragging");
draggingElement.style.display = "none";
draggingElement.style.position = "absolute";
draggingElement.style.overflow = "hidden";
// Get bomhead and bombody elements
const bh = document.getElementById("bomhead");
const bb = document.getElementById("bombody");
// Get all compound headers for the current column
var compoundHeaders;
if (target.classList.contains("bom-checkbox")) {
compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
} else {
compoundHeaders = [target];
}
// Create new table which will display the column
var newTable = document.createElement("table");
newTable.classList.add("bom");
newTable.style.background = "white";
draggingElement.append(newTable);
// Create new header element
var newHeader = document.createElement("thead");
newTable.append(newHeader);
// Set up array for storing all placeholder elements
placeHolderElements = [];
// Add all compound headers to the new thead element and placeholders
compoundHeaders.forEach(function(h) {
clone = cloneElementWithDimensions(h);
newHeader.append(clone);
placeHolderElements.push(clone);
});
// Create new body element
var newBody = document.createElement("tbody");
newTable.append(newBody);
// Get indices for compound headers
var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
// For each row in the BOM body...
var rows = bb.querySelectorAll("tr");
rows.forEach(function(row) {
// ..get the cells for the compound column
const tds = row.querySelectorAll("td");
var copytds = idxs.map(i => tds[i]);
// Add them to the new element and the placeholders
var newRow = document.createElement("tr");
copytds.forEach(function(td) {
clone = cloneElementWithDimensions(td);
newRow.append(clone);
placeHolderElements.push(clone);
});
newBody.append(newRow);
});
// Compute width for compound header
var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
draggingElement.style.width = `${width}px`;
// Insert the new dragging element and disable selection on BOM
bom.insertBefore(draggingElement, null);
bom.style.userSelect = "none";
// Determine the mouse position offset
xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
yOffset = e.screenY - compoundHeaders[0].offsetTop;
// Get name for the column in settings.columnOrder
dragName = getColumnOrderName(target);
// Change text and class for placeholder elements
placeHolderElements = placeHolderElements.map(function(e) {
newElem = cloneElementWithDimensions(e);
newElem.textContent = "";
newElem.classList.add("placeholder");
return newElem;
});
// On next mouse move, the whole BOM needs to be redrawn to show the placeholders
forcePopulation = true;
// Add listeners for move and up on mouse
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
}
// In netlist mode, there is nothing to reorder
if (settings.bommode === "netlist")
return;
// Add mouseDownHandler to every column except the numCol
bom.querySelectorAll("th")
.forEach(function(head) {
if (!head.classList.contains("numCol")) {
head.onmousedown = mouseDownHandler;
}
});
}
function getBoundingClientRectFromMultiple(elements) {
var elems = Array.from(elements);
if (elems.length == 0)
return null;
var box = elems.shift()
.getBoundingClientRect();
elems.forEach(function(elem) {
var elembox = elem.getBoundingClientRect();
box.left = Math.min(elembox.left, box.left);
box.top = Math.min(elembox.top, box.top);
box.width += elembox.width;
box.height = Math.max(elembox.height, box.height);
});
return box;
}
function cloneElementWithDimensions(elem) {
var newElem = elem.cloneNode(true);
newElem.style.height = window.getComputedStyle(elem).height;
newElem.style.width = window.getComputedStyle(elem).width;
return newElem;
}
function getBomTableHeaderIndex(elem) {
const bh = document.getElementById('bomhead');
const ths = Array.from(bh.querySelectorAll("th"));
return ths.indexOf(elem);
}
function getColumnOrderName(elem) {
var cname = elem.getAttribute("col_name");
if (cname === "bom-checkbox")
return "checkboxes";
else
return cname;
}
function resizableGrid(tablehead) {
var cols = tablehead.firstElementChild.children;
var rowWidth = tablehead.offsetWidth;
for (var i = 1; i < cols.length; i++) {
if (cols[i].classList.contains("bom-checkbox"))
continue;
cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
}
for (var i = 1; i < cols.length - 1; i++) {
var div = document.createElement('div');
div.className = "column-width-handle";
cols[i].appendChild(div);
setListeners(div);
}
function setListeners(div) {
var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
div.addEventListener('mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
curCol = e.target.parentElement;
nxtCol = curCol.nextElementSibling;
startX = e.pageX;
var padding = paddingDiff(curCol);
rowWidth = curCol.parentElement.offsetWidth;
curColWidth = curCol.clientWidth - padding;
nxtColWidth = nxtCol.clientWidth - padding;
});
document.addEventListener('mousemove', function(e) {
if (startX) {
var diffX = e.pageX - startX;
diffX = -Math.min(-diffX, curColWidth - 20);
diffX = Math.min(diffX, nxtColWidth - 20);
curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
}
});
document.addEventListener('mouseup', function(e) {
curCol = undefined;
nxtCol = undefined;
startX = undefined;
nxtColWidth = undefined;
curColWidth = undefined
});
}
function paddingDiff(col) {
if (getStyleVal(col, 'box-sizing') == 'border-box') {
return 0;
}
var padLeft = getStyleVal(col, 'padding-left');
var padRight = getStyleVal(col, 'padding-right');
return (parseInt(padLeft) + parseInt(padRight));
}
function getStyleVal(elm, css) {
return (window.getComputedStyle(elm, null).getPropertyValue(css))
}
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/* DOM manipulation and misc code */
var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;
function dbg(html) {
dbgdiv.innerHTML = html;
}
function redrawIfInitDone() {
if (initDone) {
redrawCanvas(allcanvas.front);
redrawCanvas(allcanvas.back);
}
}
function padsVisible(value) {
writeStorage("padsVisible", value);
settings.renderPads = value;
redrawIfInitDone();
}
function referencesVisible(value) {
writeStorage("referencesVisible", value);
settings.renderReferences = value;
redrawIfInitDone();
}
function valuesVisible(value) {
writeStorage("valuesVisible", value);
settings.renderValues = value;
redrawIfInitDone();
}
function tracksVisible(value) {
writeStorage("tracksVisible", value);
settings.renderTracks = value;
redrawIfInitDone();
}
function zonesVisible(value) {
writeStorage("zonesVisible", value);
settings.renderZones = value;
redrawIfInitDone();
}
function dnpOutline(value) {
writeStorage("dnpOutline", value);
settings.renderDnpOutline = value;
redrawIfInitDone();
}
function setDarkMode(value) {
if (value) {
topmostdiv.classList.add("dark");
} else {
topmostdiv.classList.remove("dark");
}
writeStorage("darkmode", value);
settings.darkMode = value;
redrawIfInitDone();
}
function setShowBOMColumn(field, value) {
if (field === "references") {
var rl = document.getElementById("reflookup");
rl.disabled = !value;
if (!value) {
rl.value = "";
updateRefLookup("");
}
}
var n = settings.hiddenColumns.indexOf(field);
if (value) {
if (n != -1) {
settings.hiddenColumns.splice(n, 1);
}
} else {
if (n == -1) {
settings.hiddenColumns.push(field);
}
}
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
if (initDone) {
populateBomTable();
}
redrawIfInitDone();
}
function setFullscreen(value) {
if (value) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
}
function fabricationVisible(value) {
writeStorage("fabricationVisible", value);
settings.renderFabrication = value;
redrawIfInitDone();
}
function silkscreenVisible(value) {
writeStorage("silkscreenVisible", value);
settings.renderSilkscreen = value;
redrawIfInitDone();
}
function setHighlightPin1(value) {
writeStorage("highlightpin1", value);
settings.highlightpin1 = value;
redrawIfInitDone();
}
function getStoredCheckboxRefs(checkbox) {
function convert(ref) {
var intref = parseInt(ref);
if (isNaN(intref)) {
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.footprints[i].ref == ref) {
return i;
}
}
return -1;
} else {
return intref;
}
}
if (!(checkbox in settings.checkboxStoredRefs)) {
var val = readStorage("checkbox_" + checkbox);
settings.checkboxStoredRefs[checkbox] = val ? val : "";
}
if (!settings.checkboxStoredRefs[checkbox]) {
return new Set();
} else {
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
}
}
function getCheckboxState(checkbox, references) {
var storedRefsSet = getStoredCheckboxRefs(checkbox);
var currentRefsSet = new Set(references.map(r => r[1]));
// Get difference of current - stored
var difference = new Set(currentRefsSet);
for (ref of storedRefsSet) {
difference.delete(ref);
}
if (difference.size == 0) {
// All the current refs are stored
return "checked";
} else if (difference.size == currentRefsSet.size) {
// None of the current refs are stored
return "unchecked";
} else {
// Some of the refs are stored
return "indeterminate";
}
}
function setBomCheckboxState(checkbox, element, references) {
var state = getCheckboxState(checkbox, references);
element.checked = (state == "checked");
element.indeterminate = (state == "indeterminate");
}
function createCheckboxChangeHandler(checkbox, references, row) {
return function () {
refsSet = getStoredCheckboxRefs(checkbox);
var markWhenChecked = settings.markWhenChecked == checkbox;
eventArgs = {
checkbox: checkbox,
refs: references,
}
if (this.checked) {
// checkbox ticked
for (var ref of references) {
refsSet.add(ref[1]);
}
if (markWhenChecked) {
row.classList.add("checked");
for (var ref of references) {
markedFootprints.add(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'checked';
} else {
// checkbox unticked
for (var ref of references) {
refsSet.delete(ref[1]);
}
if (markWhenChecked) {
row.classList.remove("checked");
for (var ref of references) {
markedFootprints.delete(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'unchecked';
}
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
updateCheckboxStats(checkbox);
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
}
}
function clearHighlightedFootprints() {
if (currentHighlightedRowId) {
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
currentHighlightedRowId = null;
highlightedFootprints = [];
highlightedNet = null;
}
}
function createRowHighlightHandler(rowid, refs, net) {
return function () {
if (currentHighlightedRowId) {
if (currentHighlightedRowId == rowid) {
return;
}
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
}
document.getElementById(rowid).classList.add("highlighted");
currentHighlightedRowId = rowid;
highlightedFootprints = refs ? refs.map(r => r[1]) : [];
highlightedNet = net;
drawHighlights();
EventHandler.emitEvent(
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
rowid: rowid,
refs: refs,
net: net
});
}
}
function entryMatches(entry) {
if (settings.bommode == "netlist") {
// entry is just a net name
return entry.toLowerCase().indexOf(filter) >= 0;
}
// check refs
if (!settings.hiddenColumns.includes("references")) {
for (var ref of entry) {
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
// check fields
for (var i in config.fields) {
var f = config.fields[i];
if (!settings.hiddenColumns.includes(f)) {
for (var ref of entry) {
if (pcbdata.bom.fields[ref[1]][i].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
}
return false;
}
function findRefInEntry(entry) {
return entry.filter(r => r[0].toLowerCase() == reflookup);
}
function highlightFilter(s) {
if (!filter) {
return s;
}
var parts = s.toLowerCase().split(filter);
if (parts.length == 1) {
return s;
}
var r = "";
var pos = 0;
for (var i in parts) {
if (i > 0) {
r += '<mark class="highlight">' +
s.substring(pos, pos + filter.length) +
'</mark>';
pos += filter.length;
}
r += s.substring(pos, pos + parts[i].length);
pos += parts[i].length;
}
return r;
}
function checkboxSetUnsetAllHandler(checkboxname) {
return function () {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (checkboxnum >= settings.checkboxes.length) {
return;
}
var allset = true;
var checkbox;
var row;
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
if (!checkbox.checked || checkbox.indeterminate) {
allset = false;
break;
}
}
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = !allset;
checkbox.indeterminate = false;
checkbox.onchange();
}
}
}
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
var th = document.createElement("TH");
th.innerHTML = name;
th.classList.add(cls);
if (is_checkbox)
th.setAttribute("col_name", "bom-checkbox");
else
th.setAttribute("col_name", name);
var span = document.createElement("SPAN");
span.classList.add("sortmark");
span.classList.add("none");
th.appendChild(span);
var spacer = document.createElement("div");
spacer.className = "column-spacer";
th.appendChild(spacer);
spacer.onclick = function () {
if (currentSortColumn && th !== currentSortColumn) {
// Currently sorted by another column
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
if (currentSortColumn && th === currentSortColumn) {
// Already sorted by this column
if (currentSortOrder == "asc") {
// Sort by this column, descending order
bomSortFunction = function (a, b) {
return -comparator(a, b);
}
currentSortColumn.childNodes[1].classList.remove("asc");
currentSortColumn.childNodes[1].classList.add("desc");
currentSortOrder = "desc";
} else {
// Unsort
bomSortFunction = null;
currentSortColumn.childNodes[1].classList.remove("desc");
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
} else {
// Sort by this column, ascending order
bomSortFunction = comparator;
currentSortColumn = th;
currentSortColumn.childNodes[1].classList.remove("none");
currentSortColumn.childNodes[1].classList.add("asc");
currentSortOrder = "asc";
}
populateBomBody();
}
if (is_checkbox) {
spacer.onclick = fancyDblClickHandler(
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
}
return th;
}
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
while (bomhead.firstChild) {
bomhead.removeChild(bomhead.firstChild);
}
var tr = document.createElement("TR");
var th = document.createElement("TH");
th.classList.add("numCol");
var vismenu = document.createElement("div");
vismenu.id = "vismenu";
vismenu.classList.add("menu");
var visbutton = document.createElement("div");
visbutton.classList.add("visbtn");
visbutton.classList.add("hideonprint");
var viscontent = document.createElement("div");
viscontent.classList.add("menu-content");
viscontent.id = "vismenu-content";
settings.columnOrder.forEach(column => {
if (typeof column !== "string")
return;
// Skip empty columns
if (column === "checkboxes" && settings.checkboxes.length == 0)
return;
else if (column === "Quantity" && settings.bommode == "ungrouped")
return;
var label = document.createElement("label");
label.classList.add("menu-label");
var input = document.createElement("input");
input.classList.add("visibility_checkbox");
input.type = "checkbox";
input.onchange = function (e) {
setShowBOMColumn(column, e.target.checked)
};
input.checked = !(settings.hiddenColumns.includes(column));
label.appendChild(input);
if (column.length > 0)
label.append(column[0].toUpperCase() + column.slice(1));
viscontent.appendChild(label);
});
viscontent.childNodes[0].classList.add("menu-label-top");
vismenu.appendChild(visbutton);
if (settings.bommode != "netlist") {
vismenu.appendChild(viscontent);
th.appendChild(vismenu);
}
tr.appendChild(th);
var checkboxCompareClosure = function (checkbox) {
return (a, b) => {
var stateA = getCheckboxState(checkbox, a);
var stateB = getCheckboxState(checkbox, b);
if (stateA > stateB) return -1;
if (stateA < stateB) return 1;
return 0;
}
}
var stringFieldCompareClosure = function (fieldIndex) {
return (a, b) => {
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
if (fa != fb) return fa > fb ? 1 : -1;
else return 0;
}
}
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
var compareRefs = (a, b) => {
var ra = referenceRegex.exec(a);
var rb = referenceRegex.exec(b);
if (ra === null || rb === null) {
if (a != b) return a > b ? 1 : -1;
return 0;
} else {
if (ra.groups.prefix != rb.groups.prefix) {
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
}
if (ra.groups.number != rb.groups.number) {
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
}
return 0;
}
}
if (settings.bommode == "netlist") {
th = createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
});
tr.appendChild(th);
} else {
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
var valueIndex = config.fields.indexOf("Value");
var footprintIndex = config.fields.indexOf("Footprint");
columns.forEach((column) => {
if (column === placeHolderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
th = createColumnHeader(
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
tr.appendChild(th);
}
} else if (column === "References") {
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
var i = 0;
while (i < a.length && i < b.length) {
if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
i++;
}
return a.length - b.length;
}));
} else if (column === "Value") {
tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
var ra = a[0][1], rb = b[0][1];
return valueCompare(
pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
}));
return;
} else if (column === "Footprint") {
tr.appendChild(createColumnHeader(
"Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
} else if (column === "Quantity" && settings.bommode == "grouped") {
tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
return a.length - b.length;
}));
} else {
// Other fields
var i = config.fields.indexOf(column);
if (i < 0)
return;
tr.appendChild(createColumnHeader(
column, `field${i + 1}`, stringFieldCompareClosure(i)));
}
});
}
bomhead.appendChild(tr);
}
function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
while (bom.firstChild) {
bom.removeChild(bom.firstChild);
}
highlightHandlers = [];
footprintIndexToHandler = {};
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
if (settings.bommode == "netlist") {
bomtable = pcbdata.nets.slice();
} else {
switch (settings.canvaslayout) {
case 'F':
bomtable = pcbdata.bom.F.slice();
break;
case 'FB':
bomtable = pcbdata.bom.both.slice();
break;
case 'B':
bomtable = pcbdata.bom.B.slice();
break;
}
if (settings.bommode == "ungrouped") {
// expand bom table
expandedTable = []
for (var bomentry of bomtable) {
for (var ref of bomentry) {
expandedTable.push([ref]);
}
}
bomtable = expandedTable;
}
}
if (bomSortFunction) {
bomtable = bomtable.sort(bomSortFunction);
}
for (var i in bomtable) {
var bomentry = bomtable[i];
if (filter && !entryMatches(bomentry)) {
continue;
}
var references = null;
var netname = null;
var tr = document.createElement("TR");
var td = document.createElement("TD");
var rownum = +i + 1;
tr.id = "bomrow" + rownum;
td.textContent = rownum;
tr.appendChild(td);
if (settings.bommode == "netlist") {
netname = bomentry;
td = document.createElement("TD");
td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
tr.appendChild(td);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
if (references.length == 0) {
continue;
}
} else {
references = bomentry;
}
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
columns.forEach((column) => {
if (column === placeholderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
if (checkbox) {
td = document.createElement("TD");
var input = document.createElement("input");
input.type = "checkbox";
input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
setBomCheckboxState(checkbox, input, references);
if (input.checked && settings.markWhenChecked == checkbox) {
tr.classList.add("checked");
}
td.appendChild(input);
tr.appendChild(td);
}
}
} else if (column === "References") {
td = document.createElement("TD");
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
tr.appendChild(td);
} else if (column === "Quantity" && settings.bommode == "grouped") {
// Quantity
td = document.createElement("TD");
td.textContent = references.length;
tr.appendChild(td);
} else {
// All the other fields
var field_index = config.fields.indexOf(column)
if (field_index < 0)
return;
var valueSet = new Set();
references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
td = document.createElement("TD");
td.innerHTML = highlightFilter(Array.from(valueSet).join(", "));
tr.appendChild(td);
}
});
}
bom.appendChild(tr);
var handler = createRowHighlightHandler(tr.id, references, netname);
tr.onmousemove = handler;
highlightHandlers.push({
id: tr.id,
handler: handler,
});
if (references !== null) {
for (var refIndex of references.map(r => r[1])) {
footprintIndexToHandler[refIndex] = handler;
}
}
if (netname !== null) {
netsToHandler[netname] = handler;
}
if ((filter || reflookup) && first) {
handler();
first = false;
}
}
EventHandler.emitEvent(
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
filter: filter,
reflookup: reflookup,
checkboxes: settings.checkboxes,
bommode: settings.bommode,
});
}
function highlightPreviousRow() {
if (!currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[0].id == currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
for (var i = 0; i < highlightHandlers.length - 1; i++) {
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function highlightNextRow() {
if (!currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
for (var i = 1; i < highlightHandlers.length; i++) {
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function populateBomTable() {
populateBomHeader();
populateBomBody();
setBomHandlers();
resizableGrid(bomhead);
}
function footprintsClicked(footprintIndexes) {
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
for (var i = 1; i <= footprintIndexes.length; i++) {
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
if (refIndex in footprintIndexToHandler) {
lastClicked = refIndex;
footprintIndexToHandler[refIndex]();
smoothScrollToRow(currentHighlightedRowId);
break;
}
}
}
function netClicked(net) {
if (net in netsToHandler) {
netsToHandler[net]();
smoothScrollToRow(currentHighlightedRowId);
} else {
clearHighlightedFootprints();
highlightedNet = net;
drawHighlights();
}
}
function updateFilter(input) {
filter = input.toLowerCase();
populateBomTable();
}
function updateRefLookup(input) {
reflookup = input.toLowerCase();
populateBomTable();
}
function changeCanvasLayout(layout) {
document.getElementById("fl-btn").classList.remove("depressed");
document.getElementById("fb-btn").classList.remove("depressed");
document.getElementById("bl-btn").classList.remove("depressed");
switch (layout) {
case 'F':
document.getElementById("fl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(1);
}
break;
case 'B':
document.getElementById("bl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(0);
}
break;
default:
document.getElementById("fb-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.setSizes([50, 50]);
}
}
settings.canvaslayout = layout;
writeStorage("canvaslayout", layout);
resizeAll();
changeBomMode(settings.bommode);
}
function populateMetadata() {
document.getElementById("title").innerHTML = pcbdata.metadata.title;
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
document.getElementById("company").innerHTML = pcbdata.metadata.company;
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
if (pcbdata.metadata.title != "") {
document.title = pcbdata.metadata.title + " BOM";
}
// Calculate board stats
var fp_f = 0,
fp_b = 0,
pads_f = 0,
pads_b = 0,
pads_th = 0;
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.bom.skipped.includes(i)) continue;
var mod = pcbdata.footprints[i];
if (mod.layer == "F") {
fp_f++;
} else {
fp_b++;
}
for (var pad of mod.pads) {
if (pad.type == "th") {
pads_th++;
} else {
if (pad.layers.includes("F")) {
pads_f++;
}
if (pad.layers.includes("B")) {
pads_b++;
}
}
}
}
document.getElementById("stats-components-front").innerHTML = fp_f;
document.getElementById("stats-components-back").innerHTML = fp_b;
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
document.getElementById("stats-th-pads").innerHTML = pads_th;
// Update version string
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
/^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}
function changeBomLayout(layout) {
document.getElementById("bom-btn").classList.remove("depressed");
document.getElementById("lr-btn").classList.remove("depressed");
document.getElementById("tb-btn").classList.remove("depressed");
switch (layout) {
case 'bom-only':
document.getElementById("bom-btn").classList.add("depressed");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
document.getElementById("frontcanvas").style.display = "none";
document.getElementById("backcanvas").style.display = "none";
document.getElementById("bot").style.height = "";
break;
case 'top-bottom':
document.getElementById("tb-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("bot").style.height = "calc(100% - 80px)";
document.getElementById("bomdiv").classList.remove("split-horizontal");
document.getElementById("canvasdiv").classList.remove("split-horizontal");
document.getElementById("frontcanvas").classList.add("split-horizontal");
document.getElementById("backcanvas").classList.add("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
direction: "vertical",
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
onDragEnd: resizeAll
});
break;
case 'left-right':
document.getElementById("lr-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("bot").style.height = "calc(100% - 80px)";
document.getElementById("bomdiv").classList.add("split-horizontal");
document.getElementById("canvasdiv").classList.add("split-horizontal");
document.getElementById("frontcanvas").classList.remove("split-horizontal");
document.getElementById("backcanvas").classList.remove("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
direction: "vertical",
onDragEnd: resizeAll
});
}
settings.bomlayout = layout;
writeStorage("bomlayout", layout);
changeCanvasLayout(settings.canvaslayout);
}
function changeBomMode(mode) {
document.getElementById("bom-grouped-btn").classList.remove("depressed");
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
document.getElementById("bom-netlist-btn").classList.remove("depressed");
var chkbxs = document.getElementsByClassName("visibility_checkbox");
switch (mode) {
case 'grouped':
document.getElementById("bom-grouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'ungrouped':
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'netlist':
document.getElementById("bom-netlist-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = true;
}
}
writeStorage("bommode", mode);
if (mode != settings.bommode) {
settings.bommode = mode;
bomSortFunction = null;
currentSortColumn = null;
currentSortOrder = null;
clearHighlightedFootprints();
}
populateBomTable();
}
function focusFilterField() {
focusInputField(document.getElementById("filter"));
}
function focusRefLookupField() {
focusInputField(document.getElementById("reflookup"));
}
function toggleBomCheckbox(bomrowid, checkboxnum) {
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
checkbox.checked = !checkbox.checked;
checkbox.indeterminate = false;
checkbox.onchange();
}
function checkBomCheckbox(bomrowid, checkboxname) {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = true;
checkbox.indeterminate = false;
checkbox.onchange();
}
function setBomCheckboxes(value) {
writeStorage("bomCheckboxes", value);
settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
prepCheckboxes();
populateMarkWhenCheckedOptions();
setMarkWhenChecked(settings.markWhenChecked);
}
function setMarkWhenChecked(value) {
writeStorage("markWhenChecked", value);
settings.markWhenChecked = value;
markedFootprints.clear();
for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
markedFootprints.add(ref);
}
populateBomTable();
drawHighlights();
}
function prepCheckboxes() {
var table = document.getElementById("checkbox-stats");
while (table.childElementCount > 1) {
table.removeChild(table.lastChild);
}
if (settings.checkboxes.length) {
table.style.display = "";
} else {
table.style.display = "none";
}
for (var checkbox of settings.checkboxes) {
var tr = document.createElement("TR");
var td = document.createElement("TD");
td.innerHTML = checkbox;
tr.appendChild(td);
td = document.createElement("TD");
td.id = "checkbox-stats-" + checkbox;
var progressbar = document.createElement("div");
progressbar.classList.add("bar");
td.appendChild(progressbar);
var text = document.createElement("div");
text.classList.add("text");
td.appendChild(text);
tr.appendChild(td);
table.appendChild(tr);
updateCheckboxStats(checkbox);
}
}
function populateMarkWhenCheckedOptions() {
var container = document.getElementById("markWhenCheckedContainer");
if (settings.checkboxes.length == 0) {
container.parentElement.style.display = "none";
return;
}
container.innerHTML = '';
container.parentElement.style.display = "inline-block";
function createOption(name, displayName) {
var id = "markWhenChecked-" + name;
var div = document.createElement("div");
div.classList.add("radio-container");
var input = document.createElement("input");
input.type = "radio";
input.name = "markWhenChecked";
input.value = name;
input.id = id;
input.onchange = () => setMarkWhenChecked(name);
div.appendChild(input);
// Preserve the selected element when the checkboxes change
if (name == settings.markWhenChecked) {
input.checked = true;
}
var label = document.createElement("label");
label.innerHTML = displayName;
label.htmlFor = id;
div.appendChild(label);
container.appendChild(div);
}
createOption("", "None");
for (var checkbox of settings.checkboxes) {
createOption(checkbox, checkbox);
}
}
function updateCheckboxStats(checkbox) {
var checked = getStoredCheckboxRefs(checkbox).size;
var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
var percent = checked * 100.0 / total;
var td = document.getElementById("checkbox-stats-" + checkbox);
td.firstChild.style.width = percent + "%";
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}
document.onkeydown = function (e) {
switch (e.key) {
case "n":
if (document.activeElement.type == "text") {
return;
}
if (currentHighlightedRowId !== null) {
checkBomCheckbox(currentHighlightedRowId, "placed");
highlightNextRow();
e.preventDefault();
}
break;
case "ArrowUp":
highlightPreviousRow();
e.preventDefault();
break;
case "ArrowDown":
highlightNextRow();
e.preventDefault();
break;
default:
break;
}
if (e.altKey) {
switch (e.key) {
case "f":
focusFilterField();
e.preventDefault();
break;
case "r":
focusRefLookupField();
e.preventDefault();
break;
case "z":
changeBomLayout("bom-only");
e.preventDefault();
break;
case "x":
changeBomLayout("left-right");
e.preventDefault();
break;
case "c":
changeBomLayout("top-bottom");
e.preventDefault();
break;
case "v":
changeCanvasLayout("F");
e.preventDefault();
break;
case "b":
changeCanvasLayout("FB");
e.preventDefault();
break;
case "n":
changeCanvasLayout("B");
e.preventDefault();
break;
default:
break;
}
if (e.key >= '1' && e.key <= '9') {
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
e.preventDefault();
}
}
}
function hideNetlistButton() {
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
document.getElementById("bom-netlist-btn").style.display = "none";
}
window.onload = function (e) {
initUtils();
initRender();
initStorage();
initDefaults();
cleanGutters();
populateMetadata();
dbgdiv = document.getElementById("dbg");
bom = document.getElementById("bombody");
bomhead = document.getElementById("bomhead");
filter = "";
reflookup = "";
if (!("nets" in pcbdata)) {
hideNetlistButton();
}
initDone = true;
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
// Triggers render
changeBomLayout(settings.bomlayout);
// Users may leave fullscreen without touching the checkbox. Uncheck.
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement)
document.getElementById('fullscreenCheckbox').checked = false;
});
}
window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
</script>
</head>
<body>
<div id="topmostdiv" class="topmostdiv">
<div id="top">
<div style="float: right; height: 100%;">
<div class="hideonprint menu" style="float: right; top: 8px;">
<button class="menubtn"></button>
<div class="menu-content">
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
Dark mode
</label><!-- This comment eats space! All of it!
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
Full Screen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
Fab layer
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
Silkscreen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
References
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
Values
</label>
<div id="tracksAndZonesCheckboxes">
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
Tracks
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
Zones
</label>
</div>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
Pads
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
DNP outlined
</label>
<label class="menu-label">
<input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
Highlight first pin
</label>
<label class="menu-label">
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
Continuous redraw on drag
</label>
<label class="menu-label">
<span>Board rotation</span>
<span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
<input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
</label>
<label class="menu-label">
<div style="margin-left: 5px">Bom checkboxes</div>
<input id="bomCheckboxes" class="menu-textbox" type=text
oninput="setBomCheckboxes(this.value)">
</label>
<label class="menu-label">
<div style="margin-left: 5px">Mark when checked</div>
<div id="markWhenCheckedContainer"></div>
</label>
<label class="menu-label">
<span class="shameless-plug">
<span>Created using</span>
<a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
</span>
</label>
</div>
</div>
<div class="button-container hideonprint"
style="float: right; position: relative; top: 8px">
<button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
title="Front only">F
</button>
<button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
title="Front and Back">FB
</button>
<button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
title="Back only">B
</button>
</div>
<div class="button-container hideonprint"
style="float: right; position: relative; top: 8px">
<button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
title="BOM only"></button>
<button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
title="BOM left, drawings right"></button>
<button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
title="BOM top, drawings bot"></button>
</div>
<div class="button-container hideonprint"
style="float: right; position: relative; top: 8px">
<button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
title="Grouped BOM"></button>
<button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
title="Ungrouped BOM"></button>
<button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
title="Netlist"></button>
</div>
<div class="hideonprint menu" style="float: right; top: 8px;">
<button class="statsbtn"></button>
<div class="menu-content">
<table class="stats">
<tbody>
<tr>
<td width="40%">Board stats</td>
<td>Front</td>
<td>Back</td>
<td>Total</td>
</tr>
<tr>
<td>Components</td>
<td id="stats-components-front">~</td>
<td id="stats-components-back">~</td>
<td id="stats-components-total">~</td>
</tr>
<tr>
<td>Groups</td>
<td id="stats-groups-front">~</td>
<td id="stats-groups-back">~</td>
<td id="stats-groups-total">~</td>
</tr>
<tr>
<td>SMD pads</td>
<td id="stats-smd-pads-front">~</td>
<td id="stats-smd-pads-back">~</td>
<td id="stats-smd-pads-total">~</td>
</tr>
<tr>
<td>TH pads</td>
<td colspan=3 id="stats-th-pads">~</td>
</tr>
</tbody>
</table>
<table class="stats">
<col width="40%"/><col />
<tbody id="checkbox-stats">
<tr>
<td colspan=2 style="border-top: 0">Checkboxes</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="hideonprint menu" style="float: right; top: 8px;">
<button class="iobtn"></button>
<div class="menu-content">
<div class="menu-label menu-label-top">
<div style="margin-left: 5px;">Save board image</div>
<div class="flexbox">
<input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
<span>X</span>
<input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
</div>
<label>
<input id="render-save-transparent" type="checkbox">
Transparent background
</label>
<div class="flexbox">
<button class="savebtn" onclick="saveImage('F')">Front</button>
<button class="savebtn" onclick="saveImage('B')">Back</button>
</div>
</div>
<div class="menu-label">
<span style="margin-left: 5px;">Config and checkbox state</span>
<div class="flexbox">
<button class="savebtn" onclick="saveSettings()">Export</button>
<button class="savebtn" onclick="loadSettings()">Import</button>
</div>
</div>
</div>
</div>
</div>
<div id="fileinfodiv" style="overflow: auto;">
<table class="fileinfo">
<tbody>
<tr>
<td id="title" class="title" style="width: 70%">
Title
</td>
<td id="revision" class="title" style="width: 30%">
Revision
</td>
</tr>
<tr>
<td id="company">
Company
</td>
<td id="filedate">
Date
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="bot" class="split" style="height: calc(100% - 80px)">
<div id="bomdiv" class="split split-horizontal">
<div style="width: 100%">
<input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
oninput="updateRefLookup(this.value)">
<input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
oninput="updateFilter(this.value)">
<div class="button-container hideonprint" style="float: left; margin: 0;">
<button id="copy" title="Copy bom table to clipboard"
onclick="copyToClipboard()"></button>
</div>
</div>
<div id="dbg"></div>
<table class="bom" id="bomtable">
<thead id="bomhead">
</thead>
<tbody id="bombody">
</tbody>
</table>
</div>
<div id="canvasdiv" class="split split-horizontal">
<div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
<div style="position: relative; width: 100%; height: 100%;">
<canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
<canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
<canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
<canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
</div>
</div>
<div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
<div style="position: relative; width: 100%; height: 100%;">
<canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
<canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
<canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
<canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
</div>
</div>
</div>
</div>
</div>
</body>
</html>