mirror of
https://github.com/fverdugo/XM_40017.git
synced 2025-11-10 03:34:24 +01:00
8145 lines
479 KiB
HTML
8145 lines
479 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html lang="en">
|
||
<head><meta charset="utf-8"/>
|
||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||
<title>LEQ</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
|
||
<script src='../assets/iframeResizer.contentWindow.min.js'></script>
|
||
|
||
<style type="text/css">
|
||
pre { line-height: 125%; }
|
||
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||
.highlight .hll { background-color: var(--jp-cell-editor-active-background) }
|
||
.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
|
||
.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
|
||
.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */
|
||
.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
|
||
.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
|
||
.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
|
||
.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
|
||
.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
|
||
.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
|
||
.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
|
||
.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
|
||
.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
|
||
.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
|
||
.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
|
||
.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
|
||
.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
|
||
.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
|
||
.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
|
||
.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
|
||
.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
|
||
.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
|
||
.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
|
||
.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
|
||
.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
|
||
.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
|
||
.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
|
||
.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
|
||
.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
|
||
.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
|
||
.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
|
||
.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
|
||
.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
|
||
.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
|
||
.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
|
||
.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
|
||
.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
|
||
.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
|
||
.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
|
||
.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
|
||
.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
|
||
.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
|
||
.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
|
||
</style>
|
||
<style type="text/css">
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
* Mozilla scrollbar styling
|
||
*/
|
||
|
||
/* use standard opaque scrollbars for most nodes */
|
||
[data-jp-theme-scrollbars='true'] {
|
||
scrollbar-color: rgb(var(--jp-scrollbar-thumb-color))
|
||
var(--jp-scrollbar-background-color);
|
||
}
|
||
|
||
/* for code nodes, use a transparent style of scrollbar. These selectors
|
||
* will match lower in the tree, and so will override the above */
|
||
[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,
|
||
[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar {
|
||
scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
|
||
}
|
||
|
||
/* tiny scrollbar */
|
||
|
||
.jp-scrollbar-tiny {
|
||
scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
|
||
scrollbar-width: thin;
|
||
}
|
||
|
||
/* tiny scrollbar */
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar,
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-corner {
|
||
background-color: transparent;
|
||
height: 4px;
|
||
width: 4px;
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-thumb {
|
||
background: rgba(var(--jp-scrollbar-thumb-color), 0.5);
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal {
|
||
border-left: 0 solid transparent;
|
||
border-right: 0 solid transparent;
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical {
|
||
border-top: 0 solid transparent;
|
||
border-bottom: 0 solid transparent;
|
||
}
|
||
|
||
/*
|
||
* Lumino
|
||
*/
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal'] {
|
||
min-height: 16px;
|
||
max-height: 16px;
|
||
min-width: 45px;
|
||
border-top: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical'] {
|
||
min-width: 16px;
|
||
max-width: 16px;
|
||
min-height: 45px;
|
||
border-left: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar-button {
|
||
background-color: #f0f0f0;
|
||
background-position: center center;
|
||
min-height: 15px;
|
||
max-height: 15px;
|
||
min-width: 15px;
|
||
max-width: 15px;
|
||
}
|
||
|
||
.lm-ScrollBar-button:hover {
|
||
background-color: #dadada;
|
||
}
|
||
|
||
.lm-ScrollBar-button.lm-mod-active {
|
||
background-color: #cdcdcd;
|
||
}
|
||
|
||
.lm-ScrollBar-track {
|
||
background: #f0f0f0;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb {
|
||
background: #cdcdcd;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb:hover {
|
||
background: #bababa;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb.lm-mod-active {
|
||
background: #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {
|
||
height: 100%;
|
||
min-width: 15px;
|
||
border-left: 1px solid #a0a0a0;
|
||
border-right: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {
|
||
width: 100%;
|
||
min-height: 15px;
|
||
border-top: 1px solid #a0a0a0;
|
||
border-bottom: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal']
|
||
.lm-ScrollBar-button[data-action='decrement'] {
|
||
background-image: var(--jp-icon-caret-left);
|
||
background-size: 17px;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal']
|
||
.lm-ScrollBar-button[data-action='increment'] {
|
||
background-image: var(--jp-icon-caret-right);
|
||
background-size: 17px;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical']
|
||
.lm-ScrollBar-button[data-action='decrement'] {
|
||
background-image: var(--jp-icon-caret-up);
|
||
background-size: 17px;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical']
|
||
.lm-ScrollBar-button[data-action='increment'] {
|
||
background-image: var(--jp-icon-caret-down);
|
||
background-size: 17px;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-Widget {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.lm-Widget.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {
|
||
/* Title is rotated for horizontal accordion panel using CSS */
|
||
display: block;
|
||
transform-origin: top left;
|
||
transform: rotate(-90deg) translate(-100%);
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette {
|
||
display: flex;
|
||
flex-direction: column;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-CommandPalette-search {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-content {
|
||
flex: 1 1 auto;
|
||
margin: 0;
|
||
padding: 0;
|
||
min-height: 0;
|
||
overflow: auto;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-CommandPalette-header {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.lm-CommandPalette-item {
|
||
display: flex;
|
||
flex-direction: row;
|
||
}
|
||
|
||
.lm-CommandPalette-itemIcon {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-itemContent {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.lm-CommandPalette-itemShortcut {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-itemLabel {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.lm-close-icon {
|
||
border: 1px solid transparent;
|
||
background-color: transparent;
|
||
position: absolute;
|
||
z-index: 1;
|
||
right: 3%;
|
||
top: 0;
|
||
bottom: 0;
|
||
margin: auto;
|
||
padding: 7px 0;
|
||
display: none;
|
||
vertical-align: middle;
|
||
outline: 0;
|
||
cursor: pointer;
|
||
}
|
||
.lm-close-icon:after {
|
||
content: 'X';
|
||
display: block;
|
||
width: 15px;
|
||
height: 15px;
|
||
text-align: center;
|
||
color: #000;
|
||
font-weight: normal;
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-DockPanel {
|
||
z-index: 0;
|
||
}
|
||
|
||
.lm-DockPanel-widget {
|
||
z-index: 0;
|
||
}
|
||
|
||
.lm-DockPanel-tabBar {
|
||
z-index: 1;
|
||
}
|
||
|
||
.lm-DockPanel-handle {
|
||
z-index: 2;
|
||
}
|
||
|
||
.lm-DockPanel-handle.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-DockPanel-handle:after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
content: '';
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='horizontal'] {
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='vertical'] {
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='horizontal']:after {
|
||
left: 50%;
|
||
min-width: 8px;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='vertical']:after {
|
||
top: 50%;
|
||
min-height: 8px;
|
||
transform: translateY(-50%);
|
||
}
|
||
|
||
.lm-DockPanel-overlay {
|
||
z-index: 3;
|
||
box-sizing: border-box;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.lm-DockPanel-overlay.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-Menu {
|
||
z-index: 10000;
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
overflow-x: hidden;
|
||
overflow-y: auto;
|
||
outline: none;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-Menu-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: table;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-Menu-item {
|
||
display: table-row;
|
||
}
|
||
|
||
.lm-Menu-item.lm-mod-hidden,
|
||
.lm-Menu-item.lm-mod-collapsed {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-Menu-itemIcon,
|
||
.lm-Menu-itemSubmenuIcon {
|
||
display: table-cell;
|
||
text-align: center;
|
||
}
|
||
|
||
.lm-Menu-itemLabel {
|
||
display: table-cell;
|
||
text-align: left;
|
||
}
|
||
|
||
.lm-Menu-itemShortcut {
|
||
display: table-cell;
|
||
text-align: right;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-MenuBar {
|
||
outline: none;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-MenuBar-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex-direction: row;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-MenuBar-item {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.lm-MenuBar-itemIcon,
|
||
.lm-MenuBar-itemLabel {
|
||
display: inline-block;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-ScrollBar {
|
||
display: flex;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal'] {
|
||
flex-direction: row;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical'] {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.lm-ScrollBar-button {
|
||
box-sizing: border-box;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-ScrollBar-track {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb {
|
||
box-sizing: border-box;
|
||
position: absolute;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-SplitPanel-child {
|
||
z-index: 0;
|
||
}
|
||
|
||
.lm-SplitPanel-handle {
|
||
z-index: 1;
|
||
}
|
||
|
||
.lm-SplitPanel-handle.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-SplitPanel-handle:after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
content: '';
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {
|
||
left: 50%;
|
||
min-width: 8px;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {
|
||
top: 50%;
|
||
min-height: 8px;
|
||
transform: translateY(-50%);
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-TabBar {
|
||
display: flex;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='horizontal'] {
|
||
flex-direction: row;
|
||
align-items: flex-end;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='vertical'] {
|
||
flex-direction: column;
|
||
align-items: flex-end;
|
||
}
|
||
|
||
.lm-TabBar-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex: 1 1 auto;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {
|
||
flex-direction: row;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.lm-TabBar-tab {
|
||
display: flex;
|
||
flex-direction: row;
|
||
box-sizing: border-box;
|
||
overflow: hidden;
|
||
touch-action: none; /* Disable native Drag/Drop */
|
||
}
|
||
|
||
.lm-TabBar-tabIcon,
|
||
.lm-TabBar-tabCloseIcon {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-TabBar-tabLabel {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.lm-TabBar-tabInput {
|
||
user-select: all;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.lm-TabBar-tab.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-TabBar-addButton.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {
|
||
position: relative;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {
|
||
left: 0;
|
||
transition: left 150ms ease;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {
|
||
top: 0;
|
||
transition: top 150ms ease;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {
|
||
transition: none;
|
||
}
|
||
|
||
.lm-TabBar-tabLabel .lm-TabBar-tabInput {
|
||
user-select: all;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
background: inherit;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-TabPanel-tabBar {
|
||
z-index: 1;
|
||
}
|
||
|
||
.lm-TabPanel-stackedPanel {
|
||
z-index: 0;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Collapse {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
}
|
||
|
||
.jp-Collapse-header {
|
||
padding: 1px 12px;
|
||
background-color: var(--jp-layout-color1);
|
||
border-bottom: solid var(--jp-border-width) var(--jp-border-color2);
|
||
color: var(--jp-ui-font-color1);
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
font-size: var(--jp-ui-font-size0);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-Collapser-icon {
|
||
height: 16px;
|
||
}
|
||
|
||
.jp-Collapse-header-collapsed .jp-Collapser-icon {
|
||
transform: rotate(-90deg);
|
||
margin: auto 0;
|
||
}
|
||
|
||
.jp-Collapser-title {
|
||
line-height: 25px;
|
||
}
|
||
|
||
.jp-Collapse-contents {
|
||
padding: 0 12px;
|
||
background-color: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
overflow: auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */
|
||
|
||
/**
|
||
* (DEPRECATED) Support for consuming icons as CSS background images
|
||
*/
|
||
|
||
/* Icons urls */
|
||
|
||
:root {
|
||
--jp-icon-add-above: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==);
|
||
--jp-icon-add-below: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
|
||
--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-bell: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==);
|
||
--jp-icon-bug-dot: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-code-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-code: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-collapse-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-copyright: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-delete: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==);
|
||
--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-duplicate: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-error: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-expand-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-filter-dot: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-filter: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-folder-favorite: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K);
|
||
--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-home: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);
|
||
--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);
|
||
--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);
|
||
--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-launch: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K);
|
||
--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-move-down: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K);
|
||
--jp-icon-move-up: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-numbering: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-offline-bolt: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-pdf: url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K);
|
||
--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-redo: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-share: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-table-rows: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=);
|
||
--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);
|
||
--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-user: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-users: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-word: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
}
|
||
|
||
/* Icon CSS class declarations */
|
||
|
||
.jp-AddAboveIcon {
|
||
background-image: var(--jp-icon-add-above);
|
||
}
|
||
|
||
.jp-AddBelowIcon {
|
||
background-image: var(--jp-icon-add-below);
|
||
}
|
||
|
||
.jp-AddIcon {
|
||
background-image: var(--jp-icon-add);
|
||
}
|
||
|
||
.jp-BellIcon {
|
||
background-image: var(--jp-icon-bell);
|
||
}
|
||
|
||
.jp-BugDotIcon {
|
||
background-image: var(--jp-icon-bug-dot);
|
||
}
|
||
|
||
.jp-BugIcon {
|
||
background-image: var(--jp-icon-bug);
|
||
}
|
||
|
||
.jp-BuildIcon {
|
||
background-image: var(--jp-icon-build);
|
||
}
|
||
|
||
.jp-CaretDownEmptyIcon {
|
||
background-image: var(--jp-icon-caret-down-empty);
|
||
}
|
||
|
||
.jp-CaretDownEmptyThinIcon {
|
||
background-image: var(--jp-icon-caret-down-empty-thin);
|
||
}
|
||
|
||
.jp-CaretDownIcon {
|
||
background-image: var(--jp-icon-caret-down);
|
||
}
|
||
|
||
.jp-CaretLeftIcon {
|
||
background-image: var(--jp-icon-caret-left);
|
||
}
|
||
|
||
.jp-CaretRightIcon {
|
||
background-image: var(--jp-icon-caret-right);
|
||
}
|
||
|
||
.jp-CaretUpEmptyThinIcon {
|
||
background-image: var(--jp-icon-caret-up-empty-thin);
|
||
}
|
||
|
||
.jp-CaretUpIcon {
|
||
background-image: var(--jp-icon-caret-up);
|
||
}
|
||
|
||
.jp-CaseSensitiveIcon {
|
||
background-image: var(--jp-icon-case-sensitive);
|
||
}
|
||
|
||
.jp-CheckIcon {
|
||
background-image: var(--jp-icon-check);
|
||
}
|
||
|
||
.jp-CircleEmptyIcon {
|
||
background-image: var(--jp-icon-circle-empty);
|
||
}
|
||
|
||
.jp-CircleIcon {
|
||
background-image: var(--jp-icon-circle);
|
||
}
|
||
|
||
.jp-ClearIcon {
|
||
background-image: var(--jp-icon-clear);
|
||
}
|
||
|
||
.jp-CloseIcon {
|
||
background-image: var(--jp-icon-close);
|
||
}
|
||
|
||
.jp-CodeCheckIcon {
|
||
background-image: var(--jp-icon-code-check);
|
||
}
|
||
|
||
.jp-CodeIcon {
|
||
background-image: var(--jp-icon-code);
|
||
}
|
||
|
||
.jp-CollapseAllIcon {
|
||
background-image: var(--jp-icon-collapse-all);
|
||
}
|
||
|
||
.jp-ConsoleIcon {
|
||
background-image: var(--jp-icon-console);
|
||
}
|
||
|
||
.jp-CopyIcon {
|
||
background-image: var(--jp-icon-copy);
|
||
}
|
||
|
||
.jp-CopyrightIcon {
|
||
background-image: var(--jp-icon-copyright);
|
||
}
|
||
|
||
.jp-CutIcon {
|
||
background-image: var(--jp-icon-cut);
|
||
}
|
||
|
||
.jp-DeleteIcon {
|
||
background-image: var(--jp-icon-delete);
|
||
}
|
||
|
||
.jp-DownloadIcon {
|
||
background-image: var(--jp-icon-download);
|
||
}
|
||
|
||
.jp-DuplicateIcon {
|
||
background-image: var(--jp-icon-duplicate);
|
||
}
|
||
|
||
.jp-EditIcon {
|
||
background-image: var(--jp-icon-edit);
|
||
}
|
||
|
||
.jp-EllipsesIcon {
|
||
background-image: var(--jp-icon-ellipses);
|
||
}
|
||
|
||
.jp-ErrorIcon {
|
||
background-image: var(--jp-icon-error);
|
||
}
|
||
|
||
.jp-ExpandAllIcon {
|
||
background-image: var(--jp-icon-expand-all);
|
||
}
|
||
|
||
.jp-ExtensionIcon {
|
||
background-image: var(--jp-icon-extension);
|
||
}
|
||
|
||
.jp-FastForwardIcon {
|
||
background-image: var(--jp-icon-fast-forward);
|
||
}
|
||
|
||
.jp-FileIcon {
|
||
background-image: var(--jp-icon-file);
|
||
}
|
||
|
||
.jp-FileUploadIcon {
|
||
background-image: var(--jp-icon-file-upload);
|
||
}
|
||
|
||
.jp-FilterDotIcon {
|
||
background-image: var(--jp-icon-filter-dot);
|
||
}
|
||
|
||
.jp-FilterIcon {
|
||
background-image: var(--jp-icon-filter);
|
||
}
|
||
|
||
.jp-FilterListIcon {
|
||
background-image: var(--jp-icon-filter-list);
|
||
}
|
||
|
||
.jp-FolderFavoriteIcon {
|
||
background-image: var(--jp-icon-folder-favorite);
|
||
}
|
||
|
||
.jp-FolderIcon {
|
||
background-image: var(--jp-icon-folder);
|
||
}
|
||
|
||
.jp-HomeIcon {
|
||
background-image: var(--jp-icon-home);
|
||
}
|
||
|
||
.jp-Html5Icon {
|
||
background-image: var(--jp-icon-html5);
|
||
}
|
||
|
||
.jp-ImageIcon {
|
||
background-image: var(--jp-icon-image);
|
||
}
|
||
|
||
.jp-InfoIcon {
|
||
background-image: var(--jp-icon-info);
|
||
}
|
||
|
||
.jp-InspectorIcon {
|
||
background-image: var(--jp-icon-inspector);
|
||
}
|
||
|
||
.jp-JsonIcon {
|
||
background-image: var(--jp-icon-json);
|
||
}
|
||
|
||
.jp-JuliaIcon {
|
||
background-image: var(--jp-icon-julia);
|
||
}
|
||
|
||
.jp-JupyterFaviconIcon {
|
||
background-image: var(--jp-icon-jupyter-favicon);
|
||
}
|
||
|
||
.jp-JupyterIcon {
|
||
background-image: var(--jp-icon-jupyter);
|
||
}
|
||
|
||
.jp-JupyterlabWordmarkIcon {
|
||
background-image: var(--jp-icon-jupyterlab-wordmark);
|
||
}
|
||
|
||
.jp-KernelIcon {
|
||
background-image: var(--jp-icon-kernel);
|
||
}
|
||
|
||
.jp-KeyboardIcon {
|
||
background-image: var(--jp-icon-keyboard);
|
||
}
|
||
|
||
.jp-LaunchIcon {
|
||
background-image: var(--jp-icon-launch);
|
||
}
|
||
|
||
.jp-LauncherIcon {
|
||
background-image: var(--jp-icon-launcher);
|
||
}
|
||
|
||
.jp-LineFormIcon {
|
||
background-image: var(--jp-icon-line-form);
|
||
}
|
||
|
||
.jp-LinkIcon {
|
||
background-image: var(--jp-icon-link);
|
||
}
|
||
|
||
.jp-ListIcon {
|
||
background-image: var(--jp-icon-list);
|
||
}
|
||
|
||
.jp-MarkdownIcon {
|
||
background-image: var(--jp-icon-markdown);
|
||
}
|
||
|
||
.jp-MoveDownIcon {
|
||
background-image: var(--jp-icon-move-down);
|
||
}
|
||
|
||
.jp-MoveUpIcon {
|
||
background-image: var(--jp-icon-move-up);
|
||
}
|
||
|
||
.jp-NewFolderIcon {
|
||
background-image: var(--jp-icon-new-folder);
|
||
}
|
||
|
||
.jp-NotTrustedIcon {
|
||
background-image: var(--jp-icon-not-trusted);
|
||
}
|
||
|
||
.jp-NotebookIcon {
|
||
background-image: var(--jp-icon-notebook);
|
||
}
|
||
|
||
.jp-NumberingIcon {
|
||
background-image: var(--jp-icon-numbering);
|
||
}
|
||
|
||
.jp-OfflineBoltIcon {
|
||
background-image: var(--jp-icon-offline-bolt);
|
||
}
|
||
|
||
.jp-PaletteIcon {
|
||
background-image: var(--jp-icon-palette);
|
||
}
|
||
|
||
.jp-PasteIcon {
|
||
background-image: var(--jp-icon-paste);
|
||
}
|
||
|
||
.jp-PdfIcon {
|
||
background-image: var(--jp-icon-pdf);
|
||
}
|
||
|
||
.jp-PythonIcon {
|
||
background-image: var(--jp-icon-python);
|
||
}
|
||
|
||
.jp-RKernelIcon {
|
||
background-image: var(--jp-icon-r-kernel);
|
||
}
|
||
|
||
.jp-ReactIcon {
|
||
background-image: var(--jp-icon-react);
|
||
}
|
||
|
||
.jp-RedoIcon {
|
||
background-image: var(--jp-icon-redo);
|
||
}
|
||
|
||
.jp-RefreshIcon {
|
||
background-image: var(--jp-icon-refresh);
|
||
}
|
||
|
||
.jp-RegexIcon {
|
||
background-image: var(--jp-icon-regex);
|
||
}
|
||
|
||
.jp-RunIcon {
|
||
background-image: var(--jp-icon-run);
|
||
}
|
||
|
||
.jp-RunningIcon {
|
||
background-image: var(--jp-icon-running);
|
||
}
|
||
|
||
.jp-SaveIcon {
|
||
background-image: var(--jp-icon-save);
|
||
}
|
||
|
||
.jp-SearchIcon {
|
||
background-image: var(--jp-icon-search);
|
||
}
|
||
|
||
.jp-SettingsIcon {
|
||
background-image: var(--jp-icon-settings);
|
||
}
|
||
|
||
.jp-ShareIcon {
|
||
background-image: var(--jp-icon-share);
|
||
}
|
||
|
||
.jp-SpreadsheetIcon {
|
||
background-image: var(--jp-icon-spreadsheet);
|
||
}
|
||
|
||
.jp-StopIcon {
|
||
background-image: var(--jp-icon-stop);
|
||
}
|
||
|
||
.jp-TabIcon {
|
||
background-image: var(--jp-icon-tab);
|
||
}
|
||
|
||
.jp-TableRowsIcon {
|
||
background-image: var(--jp-icon-table-rows);
|
||
}
|
||
|
||
.jp-TagIcon {
|
||
background-image: var(--jp-icon-tag);
|
||
}
|
||
|
||
.jp-TerminalIcon {
|
||
background-image: var(--jp-icon-terminal);
|
||
}
|
||
|
||
.jp-TextEditorIcon {
|
||
background-image: var(--jp-icon-text-editor);
|
||
}
|
||
|
||
.jp-TocIcon {
|
||
background-image: var(--jp-icon-toc);
|
||
}
|
||
|
||
.jp-TreeViewIcon {
|
||
background-image: var(--jp-icon-tree-view);
|
||
}
|
||
|
||
.jp-TrustedIcon {
|
||
background-image: var(--jp-icon-trusted);
|
||
}
|
||
|
||
.jp-UndoIcon {
|
||
background-image: var(--jp-icon-undo);
|
||
}
|
||
|
||
.jp-UserIcon {
|
||
background-image: var(--jp-icon-user);
|
||
}
|
||
|
||
.jp-UsersIcon {
|
||
background-image: var(--jp-icon-users);
|
||
}
|
||
|
||
.jp-VegaIcon {
|
||
background-image: var(--jp-icon-vega);
|
||
}
|
||
|
||
.jp-WordIcon {
|
||
background-image: var(--jp-icon-word);
|
||
}
|
||
|
||
.jp-YamlIcon {
|
||
background-image: var(--jp-icon-yaml);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* (DEPRECATED) Support for consuming icons as CSS background images
|
||
*/
|
||
|
||
.jp-Icon,
|
||
.jp-MaterialIcon {
|
||
background-position: center;
|
||
background-repeat: no-repeat;
|
||
background-size: 16px;
|
||
min-width: 16px;
|
||
min-height: 16px;
|
||
}
|
||
|
||
.jp-Icon-cover {
|
||
background-position: center;
|
||
background-repeat: no-repeat;
|
||
background-size: cover;
|
||
}
|
||
|
||
/**
|
||
* (DEPRECATED) Support for specific CSS icon sizes
|
||
*/
|
||
|
||
.jp-Icon-16 {
|
||
background-size: 16px;
|
||
min-width: 16px;
|
||
min-height: 16px;
|
||
}
|
||
|
||
.jp-Icon-18 {
|
||
background-size: 18px;
|
||
min-width: 18px;
|
||
min-height: 18px;
|
||
}
|
||
|
||
.jp-Icon-20 {
|
||
background-size: 20px;
|
||
min-width: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-TabBar .lm-TabBar-addButton {
|
||
align-items: center;
|
||
display: flex;
|
||
padding: 4px;
|
||
padding-bottom: 5px;
|
||
margin-right: 1px;
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.lm-TabBar .lm-TabBar-addButton:hover {
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.lm-DockPanel-tabBar .lm-TabBar-tab {
|
||
width: var(--jp-private-horizontal-tab-width);
|
||
}
|
||
|
||
.lm-DockPanel-tabBar .lm-TabBar-content {
|
||
flex: unset;
|
||
}
|
||
|
||
.lm-DockPanel-tabBar[data-orientation='horizontal'] {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Support for icons as inline SVG HTMLElements
|
||
*/
|
||
|
||
/* recolor the primary elements of an icon */
|
||
.jp-icon0[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon1[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon2[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon3[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon4[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon0[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon1[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon2[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon3[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon4[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/* recolor the accent elements of an icon */
|
||
.jp-icon-accent0[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-accent1[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-accent2[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-accent3[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-accent4[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-accent0[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-accent1[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-accent2[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-accent3[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-accent4[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* set the color of an icon to transparent */
|
||
.jp-icon-none[fill] {
|
||
fill: none;
|
||
}
|
||
|
||
.jp-icon-none[stroke] {
|
||
stroke: none;
|
||
}
|
||
|
||
/* brand icon colors. Same for light and dark */
|
||
.jp-icon-brand0[fill] {
|
||
fill: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-icon-brand1[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-icon-brand2[fill] {
|
||
fill: var(--jp-brand-color2);
|
||
}
|
||
|
||
.jp-icon-brand3[fill] {
|
||
fill: var(--jp-brand-color3);
|
||
}
|
||
|
||
.jp-icon-brand4[fill] {
|
||
fill: var(--jp-brand-color4);
|
||
}
|
||
|
||
.jp-icon-brand0[stroke] {
|
||
stroke: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-icon-brand1[stroke] {
|
||
stroke: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-icon-brand2[stroke] {
|
||
stroke: var(--jp-brand-color2);
|
||
}
|
||
|
||
.jp-icon-brand3[stroke] {
|
||
stroke: var(--jp-brand-color3);
|
||
}
|
||
|
||
.jp-icon-brand4[stroke] {
|
||
stroke: var(--jp-brand-color4);
|
||
}
|
||
|
||
/* warn icon colors. Same for light and dark */
|
||
.jp-icon-warn0[fill] {
|
||
fill: var(--jp-warn-color0);
|
||
}
|
||
|
||
.jp-icon-warn1[fill] {
|
||
fill: var(--jp-warn-color1);
|
||
}
|
||
|
||
.jp-icon-warn2[fill] {
|
||
fill: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-icon-warn3[fill] {
|
||
fill: var(--jp-warn-color3);
|
||
}
|
||
|
||
.jp-icon-warn0[stroke] {
|
||
stroke: var(--jp-warn-color0);
|
||
}
|
||
|
||
.jp-icon-warn1[stroke] {
|
||
stroke: var(--jp-warn-color1);
|
||
}
|
||
|
||
.jp-icon-warn2[stroke] {
|
||
stroke: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-icon-warn3[stroke] {
|
||
stroke: var(--jp-warn-color3);
|
||
}
|
||
|
||
/* icon colors that contrast well with each other and most backgrounds */
|
||
.jp-icon-contrast0[fill] {
|
||
fill: var(--jp-icon-contrast-color0);
|
||
}
|
||
|
||
.jp-icon-contrast1[fill] {
|
||
fill: var(--jp-icon-contrast-color1);
|
||
}
|
||
|
||
.jp-icon-contrast2[fill] {
|
||
fill: var(--jp-icon-contrast-color2);
|
||
}
|
||
|
||
.jp-icon-contrast3[fill] {
|
||
fill: var(--jp-icon-contrast-color3);
|
||
}
|
||
|
||
.jp-icon-contrast0[stroke] {
|
||
stroke: var(--jp-icon-contrast-color0);
|
||
}
|
||
|
||
.jp-icon-contrast1[stroke] {
|
||
stroke: var(--jp-icon-contrast-color1);
|
||
}
|
||
|
||
.jp-icon-contrast2[stroke] {
|
||
stroke: var(--jp-icon-contrast-color2);
|
||
}
|
||
|
||
.jp-icon-contrast3[stroke] {
|
||
stroke: var(--jp-icon-contrast-color3);
|
||
}
|
||
|
||
.jp-icon-dot[fill] {
|
||
fill: var(--jp-warn-color0);
|
||
}
|
||
|
||
.jp-jupyter-icon-color[fill] {
|
||
fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0));
|
||
}
|
||
|
||
.jp-notebook-icon-color[fill] {
|
||
fill: var(--jp-notebook-icon-color, var(--jp-warn-color0));
|
||
}
|
||
|
||
.jp-json-icon-color[fill] {
|
||
fill: var(--jp-json-icon-color, var(--jp-warn-color1));
|
||
}
|
||
|
||
.jp-console-icon-color[fill] {
|
||
fill: var(--jp-console-icon-color, white);
|
||
}
|
||
|
||
.jp-console-icon-background-color[fill] {
|
||
fill: var(--jp-console-icon-background-color, var(--jp-brand-color1));
|
||
}
|
||
|
||
.jp-terminal-icon-color[fill] {
|
||
fill: var(--jp-terminal-icon-color, var(--jp-layout-color2));
|
||
}
|
||
|
||
.jp-terminal-icon-background-color[fill] {
|
||
fill: var(
|
||
--jp-terminal-icon-background-color,
|
||
var(--jp-inverse-layout-color2)
|
||
);
|
||
}
|
||
|
||
.jp-text-editor-icon-color[fill] {
|
||
fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3));
|
||
}
|
||
|
||
.jp-inspector-icon-color[fill] {
|
||
fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3));
|
||
}
|
||
|
||
/* CSS for icons in selected filebrowser listing items */
|
||
.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* stylelint-disable selector-max-class, selector-max-compound-selectors */
|
||
|
||
/**
|
||
* TODO: come up with non css-hack solution for showing the busy icon on top
|
||
* of the close icon
|
||
* CSS for complex behavior of close icon of tabs in the main area tabbar
|
||
*/
|
||
.lm-DockPanel-tabBar
|
||
.lm-TabBar-tab.lm-mod-closable.jp-mod-dirty
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon3[fill] {
|
||
fill: none;
|
||
}
|
||
|
||
.lm-DockPanel-tabBar
|
||
.lm-TabBar-tab.lm-mod-closable.jp-mod-dirty
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon-busy[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
/* stylelint-enable selector-max-class, selector-max-compound-selectors */
|
||
|
||
/* CSS for icons in status bar */
|
||
#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* special handling for splash icon CSS. While the theme CSS reloads during
|
||
splash, the splash icon can loose theming. To prevent that, we set a
|
||
default for its color variable */
|
||
:root {
|
||
--jp-warn-color0: var(--md-orange-700);
|
||
}
|
||
|
||
/* not sure what to do with this one, used in filebrowser listing */
|
||
.jp-DragIcon {
|
||
margin-right: 4px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Support for alt colors for icons as inline SVG HTMLElements
|
||
*/
|
||
|
||
/* alt recolor the primary elements of an icon */
|
||
.jp-icon-alt .jp-icon0[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon1[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon2[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon3[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon4[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon0[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon1[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon2[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon3[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon4[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* alt recolor the accent elements of an icon */
|
||
.jp-icon-alt .jp-icon-accent0[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent1[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent2[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent3[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent4[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent0[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent1[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent2[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent3[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent4[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content {
|
||
display: none !important;
|
||
}
|
||
|
||
/**
|
||
* Support for hover colors for icons as inline SVG HTMLElements
|
||
*/
|
||
|
||
/**
|
||
* regular colors
|
||
*/
|
||
|
||
/* recolor the primary elements of an icon */
|
||
.jp-icon-hover :hover .jp-icon0-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon1-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon2-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon3-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon4-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon0-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon1-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon2-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon3-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon4-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/* recolor the accent elements of an icon */
|
||
.jp-icon-hover :hover .jp-icon-accent0-hover[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent1-hover[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent2-hover[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent3-hover[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent4-hover[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* set the color of an icon to transparent */
|
||
.jp-icon-hover :hover .jp-icon-none-hover[fill] {
|
||
fill: none;
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-none-hover[stroke] {
|
||
stroke: none;
|
||
}
|
||
|
||
/**
|
||
* inverse colors
|
||
*/
|
||
|
||
/* inverse recolor the primary elements of an icon */
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* inverse recolor the accent elements of an icon */
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-IFrame {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-IFrame > iframe {
|
||
border: none;
|
||
}
|
||
|
||
/*
|
||
When drag events occur, `lm-mod-override-cursor` is added to the body.
|
||
Because iframes steal all cursor events, the following two rules are necessary
|
||
to suppress pointer events while resize drags are occurring. There may be a
|
||
better solution to this problem.
|
||
*/
|
||
body.lm-mod-override-cursor .jp-IFrame {
|
||
position: relative;
|
||
}
|
||
|
||
body.lm-mod-override-cursor .jp-IFrame::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-HoverBox {
|
||
position: fixed;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FormGroup-content fieldset {
|
||
border: none;
|
||
padding: 0;
|
||
min-width: 0;
|
||
width: 100%;
|
||
}
|
||
|
||
/* stylelint-disable selector-max-type */
|
||
|
||
.jp-FormGroup-content fieldset .jp-inputFieldWrapper input,
|
||
.jp-FormGroup-content fieldset .jp-inputFieldWrapper select,
|
||
.jp-FormGroup-content fieldset .jp-inputFieldWrapper textarea {
|
||
font-size: var(--jp-content-font-size2);
|
||
border-color: var(--jp-input-border-color);
|
||
border-style: solid;
|
||
border-radius: var(--jp-border-radius);
|
||
border-width: 1px;
|
||
padding: 6px 8px;
|
||
background: none;
|
||
color: var(--jp-ui-font-color0);
|
||
height: inherit;
|
||
}
|
||
|
||
.jp-FormGroup-content fieldset input[type='checkbox'] {
|
||
position: relative;
|
||
top: 2px;
|
||
margin-left: 0;
|
||
}
|
||
|
||
.jp-FormGroup-content button.jp-mod-styled {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-FormGroup-content .checkbox label {
|
||
cursor: pointer;
|
||
font-size: var(--jp-content-font-size1);
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-root > fieldset > legend {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-root > fieldset > p {
|
||
display: none;
|
||
}
|
||
|
||
/** copy of `input.jp-mod-styled:focus` style */
|
||
.jp-FormGroup-content fieldset input:focus,
|
||
.jp-FormGroup-content fieldset select:focus {
|
||
-moz-outline-radius: unset;
|
||
outline: var(--jp-border-width) solid var(--md-blue-500);
|
||
outline-offset: -1px;
|
||
box-shadow: inset 0 0 4px var(--md-blue-300);
|
||
}
|
||
|
||
.jp-FormGroup-content fieldset input:hover:not(:focus),
|
||
.jp-FormGroup-content fieldset select:hover:not(:focus) {
|
||
background-color: var(--jp-border-color2);
|
||
}
|
||
|
||
/* stylelint-enable selector-max-type */
|
||
|
||
.jp-FormGroup-content .checkbox .field-description {
|
||
/* Disable default description field for checkbox:
|
||
because other widgets do not have description fields,
|
||
we add descriptions to each widget on the field level.
|
||
*/
|
||
display: none;
|
||
}
|
||
|
||
.jp-FormGroup-content #root__description {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-modifiedIndicator {
|
||
width: 5px;
|
||
background-color: var(--jp-brand-color2);
|
||
margin-top: 0;
|
||
margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1);
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator {
|
||
background-color: var(--jp-error-color0);
|
||
margin-right: 0.5em;
|
||
}
|
||
|
||
/* RJSF ARRAY style */
|
||
|
||
.jp-arrayFieldWrapper legend {
|
||
font-size: var(--jp-content-font-size2);
|
||
color: var(--jp-ui-font-color0);
|
||
flex-basis: 100%;
|
||
padding: 4px 0;
|
||
font-weight: var(--jp-content-heading-font-weight);
|
||
border-bottom: 1px solid var(--jp-border-color2);
|
||
}
|
||
|
||
.jp-arrayFieldWrapper .field-description {
|
||
padding: 4px 0;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
.jp-arrayFieldWrapper .array-item {
|
||
width: 100%;
|
||
border: 1px solid var(--jp-border-color2);
|
||
border-radius: 4px;
|
||
margin: 4px;
|
||
}
|
||
|
||
.jp-ArrayOperations {
|
||
display: flex;
|
||
margin-left: 8px;
|
||
}
|
||
|
||
.jp-ArrayOperationsButton {
|
||
margin: 2px;
|
||
}
|
||
|
||
.jp-ArrayOperationsButton .jp-icon3[fill] {
|
||
fill: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
button.jp-ArrayOperationsButton.jp-mod-styled:disabled {
|
||
cursor: not-allowed;
|
||
opacity: 0.5;
|
||
}
|
||
|
||
/* RJSF form validation error */
|
||
|
||
.jp-FormGroup-content .validationErrors {
|
||
color: var(--jp-error-color0);
|
||
}
|
||
|
||
/* Hide panel level error as duplicated the field level error */
|
||
.jp-FormGroup-content .panel.errors {
|
||
display: none;
|
||
}
|
||
|
||
/* RJSF normal content (settings-editor) */
|
||
|
||
.jp-FormGroup-contentNormal {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-contentItem {
|
||
margin-left: 7px;
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-description {
|
||
flex-basis: 100%;
|
||
padding: 4px 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-default {
|
||
flex-basis: 100%;
|
||
padding: 4px 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel {
|
||
font-size: var(--jp-content-font-size1);
|
||
font-weight: normal;
|
||
min-width: 120px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal fieldset:not(:first-child) {
|
||
margin-left: 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .field-array-of-string .array-item {
|
||
/* Display `jp-ArrayOperations` buttons side-by-side with content except
|
||
for small screens where flex-wrap will place them one below the other.
|
||
*/
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group {
|
||
padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);
|
||
margin-top: 2px;
|
||
}
|
||
|
||
/* RJSF compact content (metadata-form) */
|
||
|
||
.jp-FormGroup-content.jp-FormGroup-contentCompact {
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .form-group {
|
||
display: flex;
|
||
padding: 0.5em 0.2em 0.5em 0;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact
|
||
.jp-FormGroup-compactTitle
|
||
.jp-FormGroup-description {
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel {
|
||
padding-bottom: 0.3em;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle {
|
||
padding-bottom: 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact
|
||
.jp-objectFieldWrapper
|
||
.jp-objectFieldWrapper
|
||
.form-group {
|
||
padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);
|
||
margin-top: 2px;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact ul.error-detail {
|
||
margin-block-start: 0.5em;
|
||
margin-block-end: 0.5em;
|
||
padding-inline-start: 1em;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-SidePanel {
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-width: var(--jp-sidebar-min-width);
|
||
overflow-y: auto;
|
||
color: var(--jp-ui-font-color1);
|
||
background: var(--jp-layout-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
.jp-SidePanel-header {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
border-bottom: var(--jp-border-width) solid var(--jp-border-color2);
|
||
font-size: var(--jp-ui-font-size0);
|
||
font-weight: 600;
|
||
letter-spacing: 1px;
|
||
margin: 0;
|
||
padding: 2px;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.jp-SidePanel-toolbar {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.jp-SidePanel-content {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-SidePanel-toolbar,
|
||
.jp-AccordionPanel-toolbar {
|
||
height: var(--jp-private-toolbar-height);
|
||
}
|
||
|
||
.jp-SidePanel-toolbar.jp-Toolbar-micro {
|
||
display: none;
|
||
}
|
||
|
||
.lm-AccordionPanel .jp-AccordionPanel-title {
|
||
box-sizing: border-box;
|
||
line-height: 25px;
|
||
margin: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
background: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
font-size: var(--jp-ui-font-size0);
|
||
}
|
||
|
||
.jp-AccordionPanel-title {
|
||
cursor: pointer;
|
||
user-select: none;
|
||
-moz-user-select: none;
|
||
-webkit-user-select: none;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title {
|
||
/* Title is rotated for horizontal accordion panel using CSS */
|
||
display: block;
|
||
transform-origin: top left;
|
||
transform: rotate(-90deg) translate(-100%);
|
||
}
|
||
|
||
.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel {
|
||
user-select: none;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser {
|
||
transform: rotate(-90deg);
|
||
margin: auto 0;
|
||
height: 16px;
|
||
}
|
||
|
||
.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser {
|
||
transform: rotate(0deg);
|
||
}
|
||
|
||
.lm-AccordionPanel .jp-AccordionPanel-toolbar {
|
||
background: none;
|
||
box-shadow: none;
|
||
border: none;
|
||
margin-left: auto;
|
||
}
|
||
|
||
.lm-AccordionPanel .lm-SplitPanel-handle:hover {
|
||
background: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-text-truncated {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Spinner {
|
||
position: absolute;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
z-index: 10;
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: var(--jp-layout-color0);
|
||
outline: none;
|
||
}
|
||
|
||
.jp-SpinnerContent {
|
||
font-size: 10px;
|
||
margin: 50px auto;
|
||
text-indent: -9999em;
|
||
width: 3em;
|
||
height: 3em;
|
||
border-radius: 50%;
|
||
background: var(--jp-brand-color3);
|
||
background: linear-gradient(
|
||
to right,
|
||
#f37626 10%,
|
||
rgba(255, 255, 255, 0) 42%
|
||
);
|
||
position: relative;
|
||
animation: load3 1s infinite linear, fadeIn 1s;
|
||
}
|
||
|
||
.jp-SpinnerContent::before {
|
||
width: 50%;
|
||
height: 50%;
|
||
background: #f37626;
|
||
border-radius: 100% 0 0;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
content: '';
|
||
}
|
||
|
||
.jp-SpinnerContent::after {
|
||
background: var(--jp-layout-color0);
|
||
width: 75%;
|
||
height: 75%;
|
||
border-radius: 50%;
|
||
content: '';
|
||
margin: auto;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
bottom: 0;
|
||
right: 0;
|
||
}
|
||
|
||
@keyframes fadeIn {
|
||
0% {
|
||
opacity: 0;
|
||
}
|
||
|
||
100% {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
@keyframes load3 {
|
||
0% {
|
||
transform: rotate(0deg);
|
||
}
|
||
|
||
100% {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
button.jp-mod-styled {
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color0);
|
||
border: none;
|
||
box-sizing: border-box;
|
||
text-align: center;
|
||
line-height: 32px;
|
||
height: 32px;
|
||
padding: 0 12px;
|
||
letter-spacing: 0.8px;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
input.jp-mod-styled {
|
||
background: var(--jp-input-background);
|
||
height: 28px;
|
||
box-sizing: border-box;
|
||
border: var(--jp-border-width) solid var(--jp-border-color1);
|
||
padding-left: 7px;
|
||
padding-right: 7px;
|
||
font-size: var(--jp-ui-font-size2);
|
||
color: var(--jp-ui-font-color0);
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
input[type='checkbox'].jp-mod-styled {
|
||
appearance: checkbox;
|
||
-webkit-appearance: checkbox;
|
||
-moz-appearance: checkbox;
|
||
height: auto;
|
||
}
|
||
|
||
input.jp-mod-styled:focus {
|
||
border: var(--jp-border-width) solid var(--md-blue-500);
|
||
box-shadow: inset 0 0 4px var(--md-blue-300);
|
||
}
|
||
|
||
.jp-select-wrapper {
|
||
display: flex;
|
||
position: relative;
|
||
flex-direction: column;
|
||
padding: 1px;
|
||
background-color: var(--jp-layout-color1);
|
||
box-sizing: border-box;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.jp-select-wrapper:not(.multiple) {
|
||
height: 28px;
|
||
}
|
||
|
||
.jp-select-wrapper.jp-mod-focused select.jp-mod-styled {
|
||
border: var(--jp-border-width) solid var(--jp-input-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
background-color: var(--jp-input-active-background);
|
||
}
|
||
|
||
select.jp-mod-styled:hover {
|
||
cursor: pointer;
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: var(--jp-input-hover-background);
|
||
box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5);
|
||
}
|
||
|
||
select.jp-mod-styled {
|
||
flex: 1 1 auto;
|
||
width: 100%;
|
||
font-size: var(--jp-ui-font-size2);
|
||
background: var(--jp-input-background);
|
||
color: var(--jp-ui-font-color0);
|
||
padding: 0 25px 0 8px;
|
||
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
||
border-radius: 0;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
select.jp-mod-styled:not([multiple]) {
|
||
height: 32px;
|
||
}
|
||
|
||
select.jp-mod-styled[multiple] {
|
||
max-height: 200px;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-switch {
|
||
display: flex;
|
||
align-items: center;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
background-color: transparent;
|
||
color: var(--jp-ui-font-color1);
|
||
border: none;
|
||
height: 20px;
|
||
}
|
||
|
||
.jp-switch:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-switch-label {
|
||
margin-right: 5px;
|
||
font-family: var(--jp-ui-font-family);
|
||
}
|
||
|
||
.jp-switch-track {
|
||
cursor: pointer;
|
||
background-color: var(--jp-switch-color, var(--jp-border-color1));
|
||
-webkit-transition: 0.4s;
|
||
transition: 0.4s;
|
||
border-radius: 34px;
|
||
height: 16px;
|
||
width: 35px;
|
||
position: relative;
|
||
}
|
||
|
||
.jp-switch-track::before {
|
||
content: '';
|
||
position: absolute;
|
||
height: 10px;
|
||
width: 10px;
|
||
margin: 3px;
|
||
left: 0;
|
||
background-color: var(--jp-ui-inverse-font-color1);
|
||
-webkit-transition: 0.4s;
|
||
transition: 0.4s;
|
||
border-radius: 50%;
|
||
}
|
||
|
||
.jp-switch[aria-checked='true'] .jp-switch-track {
|
||
background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0));
|
||
}
|
||
|
||
.jp-switch[aria-checked='true'] .jp-switch-track::before {
|
||
/* track width (35) - margins (3 + 3) - thumb width (10) */
|
||
left: 19px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-toolbar-height: calc(
|
||
28px + var(--jp-border-width)
|
||
); /* leave 28px for content */
|
||
}
|
||
|
||
.jp-Toolbar {
|
||
color: var(--jp-ui-font-color1);
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
flex-direction: row;
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
background: var(--jp-toolbar-background);
|
||
min-height: var(--jp-toolbar-micro-height);
|
||
padding: 2px;
|
||
z-index: 8;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
/* Toolbar items */
|
||
|
||
.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer {
|
||
flex-grow: 1;
|
||
flex-shrink: 1;
|
||
}
|
||
|
||
.jp-Toolbar-item.jp-Toolbar-kernelStatus {
|
||
display: inline-block;
|
||
width: 32px;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
background-size: 16px;
|
||
}
|
||
|
||
.jp-Toolbar > .jp-Toolbar-item {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
padding-left: 1px;
|
||
padding-right: 1px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: var(--jp-private-toolbar-height);
|
||
height: 100%;
|
||
}
|
||
|
||
/* Toolbar buttons */
|
||
|
||
/* This is the div we use to wrap the react component into a Widget */
|
||
div.jp-ToolbarButton {
|
||
color: transparent;
|
||
border: none;
|
||
box-sizing: border-box;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent {
|
||
background: var(--jp-layout-color1);
|
||
border: none;
|
||
box-sizing: border-box;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
padding: 0 6px;
|
||
margin: 0;
|
||
height: 24px;
|
||
border-radius: var(--jp-border-radius);
|
||
display: flex;
|
||
align-items: center;
|
||
text-align: center;
|
||
font-size: 14px;
|
||
min-width: unset;
|
||
min-height: unset;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent:disabled {
|
||
opacity: 0.4;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent > span {
|
||
padding: 0;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label {
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: 100%;
|
||
padding-left: 2px;
|
||
color: var(--jp-ui-font-color1);
|
||
font-family: var(--jp-ui-font-family);
|
||
}
|
||
|
||
#jp-main-dock-panel[data-mode='single-document']
|
||
.jp-MainAreaWidget
|
||
> .jp-Toolbar.jp-Toolbar-micro {
|
||
padding: 0;
|
||
min-height: 0;
|
||
}
|
||
|
||
#jp-main-dock-panel[data-mode='single-document']
|
||
.jp-MainAreaWidget
|
||
> .jp-Toolbar {
|
||
border: none;
|
||
box-shadow: none;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-WindowedPanel-outer {
|
||
position: relative;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-WindowedPanel-inner {
|
||
position: relative;
|
||
}
|
||
|
||
.jp-WindowedPanel-window {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
overflow: visible;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Sibling imports */
|
||
|
||
body {
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/* Disable native link decoration styles everywhere outside of dialog boxes */
|
||
a {
|
||
text-decoration: unset;
|
||
color: unset;
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: unset;
|
||
color: unset;
|
||
}
|
||
|
||
/* Accessibility for links inside dialog box text */
|
||
.jp-Dialog-content a {
|
||
text-decoration: revert;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-Dialog-content a:hover {
|
||
text-decoration: revert;
|
||
}
|
||
|
||
/* Styles for ui-components */
|
||
.jp-Button {
|
||
color: var(--jp-ui-font-color2);
|
||
border-radius: var(--jp-border-radius);
|
||
padding: 0 12px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
|
||
/* Copy from blueprint 3 */
|
||
display: inline-flex;
|
||
flex-direction: row;
|
||
border: none;
|
||
cursor: pointer;
|
||
align-items: center;
|
||
justify-content: center;
|
||
text-align: left;
|
||
vertical-align: middle;
|
||
min-height: 30px;
|
||
min-width: 30px;
|
||
}
|
||
|
||
.jp-Button:disabled {
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
.jp-Button:empty {
|
||
padding: 0 !important;
|
||
}
|
||
|
||
.jp-Button.jp-mod-small {
|
||
min-height: 24px;
|
||
min-width: 24px;
|
||
font-size: 12px;
|
||
padding: 0 7px;
|
||
}
|
||
|
||
/* Use our own theme for hover styles */
|
||
.jp-Button.jp-mod-minimal:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-Button.jp-mod-minimal {
|
||
background: none;
|
||
}
|
||
|
||
.jp-InputGroup {
|
||
display: block;
|
||
position: relative;
|
||
}
|
||
|
||
.jp-InputGroup input {
|
||
box-sizing: border-box;
|
||
border: none;
|
||
border-radius: 0;
|
||
background-color: transparent;
|
||
color: var(--jp-ui-font-color0);
|
||
box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);
|
||
padding-bottom: 0;
|
||
padding-top: 0;
|
||
padding-left: 10px;
|
||
padding-right: 28px;
|
||
position: relative;
|
||
width: 100%;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
appearance: none;
|
||
font-size: 14px;
|
||
font-weight: 400;
|
||
height: 30px;
|
||
line-height: 30px;
|
||
outline: none;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.jp-InputGroup input:focus {
|
||
box-shadow: inset 0 0 0 var(--jp-border-width)
|
||
var(--jp-input-active-box-shadow-color),
|
||
inset 0 0 0 3px var(--jp-input-active-box-shadow-color);
|
||
}
|
||
|
||
.jp-InputGroup input:disabled {
|
||
cursor: not-allowed;
|
||
resize: block;
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-InputGroup input:disabled ~ span {
|
||
cursor: not-allowed;
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-InputGroup input::placeholder,
|
||
input::placeholder {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-InputGroupAction {
|
||
position: absolute;
|
||
bottom: 1px;
|
||
right: 0;
|
||
padding: 6px;
|
||
}
|
||
|
||
.jp-HTMLSelect.jp-DefaultStyle select {
|
||
background-color: initial;
|
||
border: none;
|
||
border-radius: 0;
|
||
box-shadow: none;
|
||
color: var(--jp-ui-font-color0);
|
||
display: block;
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-family: var(--jp-ui-font-family);
|
||
height: 24px;
|
||
line-height: 14px;
|
||
padding: 0 25px 0 10px;
|
||
text-align: left;
|
||
-moz-appearance: none;
|
||
-webkit-appearance: none;
|
||
}
|
||
|
||
.jp-HTMLSelect.jp-DefaultStyle select:disabled {
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color2);
|
||
cursor: not-allowed;
|
||
resize: block;
|
||
}
|
||
|
||
.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span {
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
/* Use our own theme for hover and option styles */
|
||
/* stylelint-disable-next-line selector-max-type */
|
||
.jp-HTMLSelect.jp-DefaultStyle select:hover,
|
||
.jp-HTMLSelect.jp-DefaultStyle select > option {
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
select {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-StatusBar-Widget {
|
||
display: flex;
|
||
align-items: center;
|
||
background: var(--jp-layout-color2);
|
||
min-height: var(--jp-statusbar-height);
|
||
justify-content: space-between;
|
||
padding: 0 10px;
|
||
}
|
||
|
||
.jp-StatusBar-Left {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-direction: row;
|
||
}
|
||
|
||
.jp-StatusBar-Middle {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.jp-StatusBar-Right {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-direction: row-reverse;
|
||
}
|
||
|
||
.jp-StatusBar-Item {
|
||
max-height: var(--jp-statusbar-height);
|
||
margin: 0 2px;
|
||
height: var(--jp-statusbar-height);
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
color: var(--jp-ui-font-color1);
|
||
padding: 0 6px;
|
||
}
|
||
|
||
.jp-mod-highlighted:hover {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-mod-clicked {
|
||
background-color: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-mod-clicked:hover {
|
||
background-color: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-mod-clicked .jp-StatusBar-TextItem {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
}
|
||
|
||
.jp-StatusBar-HoverItem {
|
||
box-shadow: '0px 4px 4px rgba(0, 0, 0, 0.25)';
|
||
}
|
||
|
||
.jp-StatusBar-TextItem {
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-family: var(--jp-ui-font-family);
|
||
line-height: 24px;
|
||
color: var(--jp-ui-font-color1);
|
||
}
|
||
|
||
.jp-StatusBar-GroupItem {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-direction: row;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressCircle svg {
|
||
display: block;
|
||
margin: 0 auto;
|
||
width: 16px;
|
||
height: 24px;
|
||
align-self: normal;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressCircle path {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-Statusbar-ProgressBar-progress-bar {
|
||
height: 10px;
|
||
width: 100px;
|
||
border: solid 0.25px var(--jp-brand-color2);
|
||
border-radius: 3px;
|
||
overflow: hidden;
|
||
align-self: center;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressBar-progress-bar > div {
|
||
background-color: var(--jp-brand-color2);
|
||
background-image: linear-gradient(
|
||
-45deg,
|
||
rgba(255, 255, 255, 0.2) 25%,
|
||
transparent 25%,
|
||
transparent 50%,
|
||
rgba(255, 255, 255, 0.2) 50%,
|
||
rgba(255, 255, 255, 0.2) 75%,
|
||
transparent 75%,
|
||
transparent
|
||
);
|
||
background-size: 40px 40px;
|
||
float: left;
|
||
width: 0%;
|
||
height: 100%;
|
||
font-size: 12px;
|
||
line-height: 14px;
|
||
color: #fff;
|
||
text-align: center;
|
||
animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressBar-progress-bar p {
|
||
color: var(--jp-ui-font-color1);
|
||
font-family: var(--jp-ui-font-family);
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: 10px;
|
||
width: 100px;
|
||
}
|
||
|
||
@keyframes jp-Statusbar-ExecutionTime-progress-bar {
|
||
0% {
|
||
background-position: 0 0;
|
||
}
|
||
|
||
100% {
|
||
background-position: 40px 40px;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-commandpalette-search-height: 28px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Overall styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette {
|
||
padding-bottom: 0;
|
||
color: var(--jp-ui-font-color1);
|
||
background: var(--jp-layout-color1);
|
||
|
||
/* This is needed so that all font sizing of children done in ems is
|
||
* relative to this base size */
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Modal variant
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-ModalCommandPalette {
|
||
position: absolute;
|
||
z-index: 10000;
|
||
top: 38px;
|
||
left: 30%;
|
||
margin: 0;
|
||
padding: 4px;
|
||
width: 40%;
|
||
box-shadow: var(--jp-elevation-z4);
|
||
border-radius: 4px;
|
||
background: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette {
|
||
max-height: 40vh;
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after {
|
||
display: none;
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header {
|
||
display: none;
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item {
|
||
margin-left: 4px;
|
||
margin-right: 4px;
|
||
}
|
||
|
||
.jp-ModalCommandPalette
|
||
.lm-CommandPalette
|
||
.lm-CommandPalette-item.lm-mod-disabled {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Search
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette-search {
|
||
padding: 4px;
|
||
background-color: var(--jp-layout-color1);
|
||
z-index: 2;
|
||
}
|
||
|
||
.lm-CommandPalette-wrapper {
|
||
overflow: overlay;
|
||
padding: 0 9px;
|
||
background-color: var(--jp-input-active-background);
|
||
height: 30px;
|
||
box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);
|
||
}
|
||
|
||
.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper {
|
||
box-shadow: inset 0 0 0 1px var(--jp-input-active-box-shadow-color),
|
||
inset 0 0 0 3px var(--jp-input-active-box-shadow-color);
|
||
}
|
||
|
||
.jp-SearchIconGroup {
|
||
color: white;
|
||
background-color: var(--jp-brand-color1);
|
||
position: absolute;
|
||
top: 4px;
|
||
right: 4px;
|
||
padding: 5px 5px 1px;
|
||
}
|
||
|
||
.jp-SearchIconGroup svg {
|
||
height: 20px;
|
||
width: 20px;
|
||
}
|
||
|
||
.jp-SearchIconGroup .jp-icon3[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.lm-CommandPalette-input {
|
||
background: transparent;
|
||
width: calc(100% - 18px);
|
||
float: left;
|
||
border: none;
|
||
outline: none;
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color0);
|
||
line-height: var(--jp-private-commandpalette-search-height);
|
||
}
|
||
|
||
.lm-CommandPalette-input::-webkit-input-placeholder,
|
||
.lm-CommandPalette-input::-moz-placeholder,
|
||
.lm-CommandPalette-input:-ms-input-placeholder {
|
||
color: var(--jp-ui-font-color2);
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Results
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette-header:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.lm-CommandPalette-header {
|
||
border-bottom: solid var(--jp-border-width) var(--jp-border-color2);
|
||
color: var(--jp-ui-font-color1);
|
||
cursor: pointer;
|
||
display: flex;
|
||
font-size: var(--jp-ui-font-size0);
|
||
font-weight: 600;
|
||
letter-spacing: 1px;
|
||
margin-top: 8px;
|
||
padding: 8px 0 8px 12px;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.lm-CommandPalette-header.lm-mod-active {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-header > mark {
|
||
background-color: transparent;
|
||
font-weight: bold;
|
||
color: var(--jp-ui-font-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-item {
|
||
padding: 4px 12px 4px 4px;
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-weight: 400;
|
||
display: flex;
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-disabled {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark {
|
||
color: var(--jp-ui-inverse-font-color0);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-itemContent {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.lm-CommandPalette-itemLabel > mark {
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: transparent;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-disabled mark {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-item .lm-CommandPalette-itemIcon {
|
||
margin: 0 4px 0 0;
|
||
position: relative;
|
||
width: 16px;
|
||
top: 2px;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon {
|
||
opacity: 0.6;
|
||
}
|
||
|
||
.lm-CommandPalette-item .lm-CommandPalette-itemShortcut {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-itemCaption {
|
||
display: none;
|
||
}
|
||
|
||
.lm-CommandPalette-content {
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-content:empty::after {
|
||
content: 'No results';
|
||
margin: auto;
|
||
margin-top: 20px;
|
||
width: 100px;
|
||
display: block;
|
||
font-size: var(--jp-ui-font-size2);
|
||
font-family: var(--jp-ui-font-family);
|
||
font-weight: lighter;
|
||
}
|
||
|
||
.lm-CommandPalette-emptyMessage {
|
||
text-align: center;
|
||
margin-top: 24px;
|
||
line-height: 1.32;
|
||
padding: 0 8px;
|
||
color: var(--jp-content-font-color3);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Dialog {
|
||
position: absolute;
|
||
z-index: 10000;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
top: 0;
|
||
left: 0;
|
||
margin: 0;
|
||
padding: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: var(--jp-dialog-background);
|
||
}
|
||
|
||
.jp-Dialog-content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
background: var(--jp-layout-color1);
|
||
padding: 24px 24px 12px;
|
||
min-width: 300px;
|
||
min-height: 150px;
|
||
max-width: 1000px;
|
||
max-height: 500px;
|
||
box-sizing: border-box;
|
||
box-shadow: var(--jp-elevation-z20);
|
||
word-wrap: break-word;
|
||
border-radius: var(--jp-border-radius);
|
||
|
||
/* This is needed so that all font sizing of children done in ems is
|
||
* relative to this base size */
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color1);
|
||
resize: both;
|
||
}
|
||
|
||
.jp-Dialog-content.jp-Dialog-content-small {
|
||
max-width: 500px;
|
||
}
|
||
|
||
.jp-Dialog-button {
|
||
overflow: visible;
|
||
}
|
||
|
||
button.jp-Dialog-button:focus {
|
||
outline: 1px solid var(--jp-brand-color1);
|
||
outline-offset: 4px;
|
||
-moz-outline-radius: 0;
|
||
}
|
||
|
||
button.jp-Dialog-button:focus::-moz-focus-inner {
|
||
border: 0;
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus,
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus,
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {
|
||
outline-offset: 4px;
|
||
-moz-outline-radius: 0;
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus {
|
||
outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1));
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus {
|
||
outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1));
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {
|
||
outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600));
|
||
}
|
||
|
||
button.jp-Dialog-close-button {
|
||
padding: 0;
|
||
height: 100%;
|
||
min-width: unset;
|
||
min-height: unset;
|
||
}
|
||
|
||
.jp-Dialog-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex: 0 0 auto;
|
||
padding-bottom: 12px;
|
||
font-size: var(--jp-ui-font-size3);
|
||
font-weight: 400;
|
||
color: var(--jp-ui-font-color1);
|
||
}
|
||
|
||
.jp-Dialog-body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
flex: 1 1 auto;
|
||
font-size: var(--jp-ui-font-size1);
|
||
background: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
overflow: auto;
|
||
}
|
||
|
||
.jp-Dialog-footer {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
align-items: center;
|
||
flex: 0 0 auto;
|
||
margin-left: -12px;
|
||
margin-right: -12px;
|
||
padding: 12px;
|
||
}
|
||
|
||
.jp-Dialog-checkbox {
|
||
padding-right: 5px;
|
||
}
|
||
|
||
.jp-Dialog-checkbox > input:focus-visible {
|
||
outline: 1px solid var(--jp-input-active-border-color);
|
||
outline-offset: 1px;
|
||
}
|
||
|
||
.jp-Dialog-spacer {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-Dialog-title {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.jp-Dialog-body > .jp-select-wrapper {
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Dialog-body > button {
|
||
padding: 0 16px;
|
||
}
|
||
|
||
.jp-Dialog-body > label {
|
||
line-height: 1.4;
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
.jp-Dialog-button.jp-mod-styled:not(:last-child) {
|
||
margin-right: 12px;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-Input-Boolean-Dialog {
|
||
flex-direction: row-reverse;
|
||
align-items: end;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Input-Boolean-Dialog > label {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MainAreaWidget > :focus {
|
||
outline: none;
|
||
}
|
||
|
||
.jp-MainAreaWidget .jp-MainAreaWidget-error {
|
||
padding: 6px;
|
||
}
|
||
|
||
.jp-MainAreaWidget .jp-MainAreaWidget-error > pre {
|
||
width: auto;
|
||
padding: 10px;
|
||
background: var(--jp-error-color3);
|
||
border: var(--jp-border-width) solid var(--jp-error-color1);
|
||
border-radius: var(--jp-border-radius);
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
white-space: pre-wrap;
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/**
|
||
* google-material-color v1.2.6
|
||
* https://github.com/danlevan/google-material-color
|
||
*/
|
||
:root {
|
||
--md-red-50: #ffebee;
|
||
--md-red-100: #ffcdd2;
|
||
--md-red-200: #ef9a9a;
|
||
--md-red-300: #e57373;
|
||
--md-red-400: #ef5350;
|
||
--md-red-500: #f44336;
|
||
--md-red-600: #e53935;
|
||
--md-red-700: #d32f2f;
|
||
--md-red-800: #c62828;
|
||
--md-red-900: #b71c1c;
|
||
--md-red-A100: #ff8a80;
|
||
--md-red-A200: #ff5252;
|
||
--md-red-A400: #ff1744;
|
||
--md-red-A700: #d50000;
|
||
--md-pink-50: #fce4ec;
|
||
--md-pink-100: #f8bbd0;
|
||
--md-pink-200: #f48fb1;
|
||
--md-pink-300: #f06292;
|
||
--md-pink-400: #ec407a;
|
||
--md-pink-500: #e91e63;
|
||
--md-pink-600: #d81b60;
|
||
--md-pink-700: #c2185b;
|
||
--md-pink-800: #ad1457;
|
||
--md-pink-900: #880e4f;
|
||
--md-pink-A100: #ff80ab;
|
||
--md-pink-A200: #ff4081;
|
||
--md-pink-A400: #f50057;
|
||
--md-pink-A700: #c51162;
|
||
--md-purple-50: #f3e5f5;
|
||
--md-purple-100: #e1bee7;
|
||
--md-purple-200: #ce93d8;
|
||
--md-purple-300: #ba68c8;
|
||
--md-purple-400: #ab47bc;
|
||
--md-purple-500: #9c27b0;
|
||
--md-purple-600: #8e24aa;
|
||
--md-purple-700: #7b1fa2;
|
||
--md-purple-800: #6a1b9a;
|
||
--md-purple-900: #4a148c;
|
||
--md-purple-A100: #ea80fc;
|
||
--md-purple-A200: #e040fb;
|
||
--md-purple-A400: #d500f9;
|
||
--md-purple-A700: #a0f;
|
||
--md-deep-purple-50: #ede7f6;
|
||
--md-deep-purple-100: #d1c4e9;
|
||
--md-deep-purple-200: #b39ddb;
|
||
--md-deep-purple-300: #9575cd;
|
||
--md-deep-purple-400: #7e57c2;
|
||
--md-deep-purple-500: #673ab7;
|
||
--md-deep-purple-600: #5e35b1;
|
||
--md-deep-purple-700: #512da8;
|
||
--md-deep-purple-800: #4527a0;
|
||
--md-deep-purple-900: #311b92;
|
||
--md-deep-purple-A100: #b388ff;
|
||
--md-deep-purple-A200: #7c4dff;
|
||
--md-deep-purple-A400: #651fff;
|
||
--md-deep-purple-A700: #6200ea;
|
||
--md-indigo-50: #e8eaf6;
|
||
--md-indigo-100: #c5cae9;
|
||
--md-indigo-200: #9fa8da;
|
||
--md-indigo-300: #7986cb;
|
||
--md-indigo-400: #5c6bc0;
|
||
--md-indigo-500: #3f51b5;
|
||
--md-indigo-600: #3949ab;
|
||
--md-indigo-700: #303f9f;
|
||
--md-indigo-800: #283593;
|
||
--md-indigo-900: #1a237e;
|
||
--md-indigo-A100: #8c9eff;
|
||
--md-indigo-A200: #536dfe;
|
||
--md-indigo-A400: #3d5afe;
|
||
--md-indigo-A700: #304ffe;
|
||
--md-blue-50: #e3f2fd;
|
||
--md-blue-100: #bbdefb;
|
||
--md-blue-200: #90caf9;
|
||
--md-blue-300: #64b5f6;
|
||
--md-blue-400: #42a5f5;
|
||
--md-blue-500: #2196f3;
|
||
--md-blue-600: #1e88e5;
|
||
--md-blue-700: #1976d2;
|
||
--md-blue-800: #1565c0;
|
||
--md-blue-900: #0d47a1;
|
||
--md-blue-A100: #82b1ff;
|
||
--md-blue-A200: #448aff;
|
||
--md-blue-A400: #2979ff;
|
||
--md-blue-A700: #2962ff;
|
||
--md-light-blue-50: #e1f5fe;
|
||
--md-light-blue-100: #b3e5fc;
|
||
--md-light-blue-200: #81d4fa;
|
||
--md-light-blue-300: #4fc3f7;
|
||
--md-light-blue-400: #29b6f6;
|
||
--md-light-blue-500: #03a9f4;
|
||
--md-light-blue-600: #039be5;
|
||
--md-light-blue-700: #0288d1;
|
||
--md-light-blue-800: #0277bd;
|
||
--md-light-blue-900: #01579b;
|
||
--md-light-blue-A100: #80d8ff;
|
||
--md-light-blue-A200: #40c4ff;
|
||
--md-light-blue-A400: #00b0ff;
|
||
--md-light-blue-A700: #0091ea;
|
||
--md-cyan-50: #e0f7fa;
|
||
--md-cyan-100: #b2ebf2;
|
||
--md-cyan-200: #80deea;
|
||
--md-cyan-300: #4dd0e1;
|
||
--md-cyan-400: #26c6da;
|
||
--md-cyan-500: #00bcd4;
|
||
--md-cyan-600: #00acc1;
|
||
--md-cyan-700: #0097a7;
|
||
--md-cyan-800: #00838f;
|
||
--md-cyan-900: #006064;
|
||
--md-cyan-A100: #84ffff;
|
||
--md-cyan-A200: #18ffff;
|
||
--md-cyan-A400: #00e5ff;
|
||
--md-cyan-A700: #00b8d4;
|
||
--md-teal-50: #e0f2f1;
|
||
--md-teal-100: #b2dfdb;
|
||
--md-teal-200: #80cbc4;
|
||
--md-teal-300: #4db6ac;
|
||
--md-teal-400: #26a69a;
|
||
--md-teal-500: #009688;
|
||
--md-teal-600: #00897b;
|
||
--md-teal-700: #00796b;
|
||
--md-teal-800: #00695c;
|
||
--md-teal-900: #004d40;
|
||
--md-teal-A100: #a7ffeb;
|
||
--md-teal-A200: #64ffda;
|
||
--md-teal-A400: #1de9b6;
|
||
--md-teal-A700: #00bfa5;
|
||
--md-green-50: #e8f5e9;
|
||
--md-green-100: #c8e6c9;
|
||
--md-green-200: #a5d6a7;
|
||
--md-green-300: #81c784;
|
||
--md-green-400: #66bb6a;
|
||
--md-green-500: #4caf50;
|
||
--md-green-600: #43a047;
|
||
--md-green-700: #388e3c;
|
||
--md-green-800: #2e7d32;
|
||
--md-green-900: #1b5e20;
|
||
--md-green-A100: #b9f6ca;
|
||
--md-green-A200: #69f0ae;
|
||
--md-green-A400: #00e676;
|
||
--md-green-A700: #00c853;
|
||
--md-light-green-50: #f1f8e9;
|
||
--md-light-green-100: #dcedc8;
|
||
--md-light-green-200: #c5e1a5;
|
||
--md-light-green-300: #aed581;
|
||
--md-light-green-400: #9ccc65;
|
||
--md-light-green-500: #8bc34a;
|
||
--md-light-green-600: #7cb342;
|
||
--md-light-green-700: #689f38;
|
||
--md-light-green-800: #558b2f;
|
||
--md-light-green-900: #33691e;
|
||
--md-light-green-A100: #ccff90;
|
||
--md-light-green-A200: #b2ff59;
|
||
--md-light-green-A400: #76ff03;
|
||
--md-light-green-A700: #64dd17;
|
||
--md-lime-50: #f9fbe7;
|
||
--md-lime-100: #f0f4c3;
|
||
--md-lime-200: #e6ee9c;
|
||
--md-lime-300: #dce775;
|
||
--md-lime-400: #d4e157;
|
||
--md-lime-500: #cddc39;
|
||
--md-lime-600: #c0ca33;
|
||
--md-lime-700: #afb42b;
|
||
--md-lime-800: #9e9d24;
|
||
--md-lime-900: #827717;
|
||
--md-lime-A100: #f4ff81;
|
||
--md-lime-A200: #eeff41;
|
||
--md-lime-A400: #c6ff00;
|
||
--md-lime-A700: #aeea00;
|
||
--md-yellow-50: #fffde7;
|
||
--md-yellow-100: #fff9c4;
|
||
--md-yellow-200: #fff59d;
|
||
--md-yellow-300: #fff176;
|
||
--md-yellow-400: #ffee58;
|
||
--md-yellow-500: #ffeb3b;
|
||
--md-yellow-600: #fdd835;
|
||
--md-yellow-700: #fbc02d;
|
||
--md-yellow-800: #f9a825;
|
||
--md-yellow-900: #f57f17;
|
||
--md-yellow-A100: #ffff8d;
|
||
--md-yellow-A200: #ff0;
|
||
--md-yellow-A400: #ffea00;
|
||
--md-yellow-A700: #ffd600;
|
||
--md-amber-50: #fff8e1;
|
||
--md-amber-100: #ffecb3;
|
||
--md-amber-200: #ffe082;
|
||
--md-amber-300: #ffd54f;
|
||
--md-amber-400: #ffca28;
|
||
--md-amber-500: #ffc107;
|
||
--md-amber-600: #ffb300;
|
||
--md-amber-700: #ffa000;
|
||
--md-amber-800: #ff8f00;
|
||
--md-amber-900: #ff6f00;
|
||
--md-amber-A100: #ffe57f;
|
||
--md-amber-A200: #ffd740;
|
||
--md-amber-A400: #ffc400;
|
||
--md-amber-A700: #ffab00;
|
||
--md-orange-50: #fff3e0;
|
||
--md-orange-100: #ffe0b2;
|
||
--md-orange-200: #ffcc80;
|
||
--md-orange-300: #ffb74d;
|
||
--md-orange-400: #ffa726;
|
||
--md-orange-500: #ff9800;
|
||
--md-orange-600: #fb8c00;
|
||
--md-orange-700: #f57c00;
|
||
--md-orange-800: #ef6c00;
|
||
--md-orange-900: #e65100;
|
||
--md-orange-A100: #ffd180;
|
||
--md-orange-A200: #ffab40;
|
||
--md-orange-A400: #ff9100;
|
||
--md-orange-A700: #ff6d00;
|
||
--md-deep-orange-50: #fbe9e7;
|
||
--md-deep-orange-100: #ffccbc;
|
||
--md-deep-orange-200: #ffab91;
|
||
--md-deep-orange-300: #ff8a65;
|
||
--md-deep-orange-400: #ff7043;
|
||
--md-deep-orange-500: #ff5722;
|
||
--md-deep-orange-600: #f4511e;
|
||
--md-deep-orange-700: #e64a19;
|
||
--md-deep-orange-800: #d84315;
|
||
--md-deep-orange-900: #bf360c;
|
||
--md-deep-orange-A100: #ff9e80;
|
||
--md-deep-orange-A200: #ff6e40;
|
||
--md-deep-orange-A400: #ff3d00;
|
||
--md-deep-orange-A700: #dd2c00;
|
||
--md-brown-50: #efebe9;
|
||
--md-brown-100: #d7ccc8;
|
||
--md-brown-200: #bcaaa4;
|
||
--md-brown-300: #a1887f;
|
||
--md-brown-400: #8d6e63;
|
||
--md-brown-500: #795548;
|
||
--md-brown-600: #6d4c41;
|
||
--md-brown-700: #5d4037;
|
||
--md-brown-800: #4e342e;
|
||
--md-brown-900: #3e2723;
|
||
--md-grey-50: #fafafa;
|
||
--md-grey-100: #f5f5f5;
|
||
--md-grey-200: #eee;
|
||
--md-grey-300: #e0e0e0;
|
||
--md-grey-400: #bdbdbd;
|
||
--md-grey-500: #9e9e9e;
|
||
--md-grey-600: #757575;
|
||
--md-grey-700: #616161;
|
||
--md-grey-800: #424242;
|
||
--md-grey-900: #212121;
|
||
--md-blue-grey-50: #eceff1;
|
||
--md-blue-grey-100: #cfd8dc;
|
||
--md-blue-grey-200: #b0bec5;
|
||
--md-blue-grey-300: #90a4ae;
|
||
--md-blue-grey-400: #78909c;
|
||
--md-blue-grey-500: #607d8b;
|
||
--md-blue-grey-600: #546e7a;
|
||
--md-blue-grey-700: #455a64;
|
||
--md-blue-grey-800: #37474f;
|
||
--md-blue-grey-900: #263238;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| RenderedText
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
/* This is the padding value to fill the gaps between lines containing spans with background color. */
|
||
--jp-private-code-span-padding: calc(
|
||
(var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2
|
||
);
|
||
}
|
||
|
||
.jp-RenderedText {
|
||
text-align: left;
|
||
padding-left: var(--jp-code-padding);
|
||
line-height: var(--jp-code-line-height);
|
||
font-family: var(--jp-code-font-family);
|
||
}
|
||
|
||
.jp-RenderedText pre,
|
||
.jp-RenderedJavaScript pre,
|
||
.jp-RenderedHTMLCommon pre {
|
||
color: var(--jp-content-font-color1);
|
||
font-size: var(--jp-code-font-size);
|
||
border: none;
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
.jp-RenderedText pre a:link {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedText pre a:hover {
|
||
text-decoration: underline;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedText pre a:visited {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
/* console foregrounds and backgrounds */
|
||
.jp-RenderedText pre .ansi-black-fg {
|
||
color: #3e424d;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-fg {
|
||
color: #e75c58;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-fg {
|
||
color: #00a250;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-fg {
|
||
color: #ddb62b;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-fg {
|
||
color: #208ffb;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-fg {
|
||
color: #d160c4;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-fg {
|
||
color: #60c6c8;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-fg {
|
||
color: #c5c1b4;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-black-bg {
|
||
background-color: #3e424d;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-bg {
|
||
background-color: #e75c58;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-bg {
|
||
background-color: #00a250;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-bg {
|
||
background-color: #ddb62b;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-bg {
|
||
background-color: #208ffb;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-bg {
|
||
background-color: #d160c4;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-bg {
|
||
background-color: #60c6c8;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-bg {
|
||
background-color: #c5c1b4;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-black-intense-fg {
|
||
color: #282c36;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-intense-fg {
|
||
color: #b22b31;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-intense-fg {
|
||
color: #007427;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-intense-fg {
|
||
color: #b27d12;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-intense-fg {
|
||
color: #0065ca;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-intense-fg {
|
||
color: #a03196;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-intense-fg {
|
||
color: #258f8f;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-intense-fg {
|
||
color: #a1a6b2;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-black-intense-bg {
|
||
background-color: #282c36;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-intense-bg {
|
||
background-color: #b22b31;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-intense-bg {
|
||
background-color: #007427;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-intense-bg {
|
||
background-color: #b27d12;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-intense-bg {
|
||
background-color: #0065ca;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-intense-bg {
|
||
background-color: #a03196;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-intense-bg {
|
||
background-color: #258f8f;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-intense-bg {
|
||
background-color: #a1a6b2;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-default-inverse-fg {
|
||
color: var(--jp-ui-inverse-font-color0);
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-default-inverse-bg {
|
||
background-color: var(--jp-inverse-layout-color0);
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-bold {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-underline {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] {
|
||
background: var(--jp-rendermime-error-background);
|
||
padding-top: var(--jp-code-padding);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| RenderedLatex
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-RenderedLatex {
|
||
color: var(--jp-content-font-color1);
|
||
font-size: var(--jp-content-font-size1);
|
||
line-height: var(--jp-content-line-height);
|
||
}
|
||
|
||
/* Left-justify outputs.*/
|
||
.jp-OutputArea-output.jp-RenderedLatex {
|
||
padding: var(--jp-code-padding);
|
||
text-align: left;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| RenderedHTML
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-RenderedHTMLCommon {
|
||
color: var(--jp-content-font-color1);
|
||
font-family: var(--jp-content-font-family);
|
||
font-size: var(--jp-content-font-size1);
|
||
line-height: var(--jp-content-line-height);
|
||
|
||
/* Give a bit more R padding on Markdown text to keep line lengths reasonable */
|
||
padding-right: 20px;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon em {
|
||
font-style: italic;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon strong {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon u {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon a:link {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon a:hover {
|
||
text-decoration: underline;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon a:visited {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
/* Headings */
|
||
|
||
.jp-RenderedHTMLCommon h1,
|
||
.jp-RenderedHTMLCommon h2,
|
||
.jp-RenderedHTMLCommon h3,
|
||
.jp-RenderedHTMLCommon h4,
|
||
.jp-RenderedHTMLCommon h5,
|
||
.jp-RenderedHTMLCommon h6 {
|
||
line-height: var(--jp-content-heading-line-height);
|
||
font-weight: var(--jp-content-heading-font-weight);
|
||
font-style: normal;
|
||
margin: var(--jp-content-heading-margin-top) 0
|
||
var(--jp-content-heading-margin-bottom) 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h1:first-child,
|
||
.jp-RenderedHTMLCommon h2:first-child,
|
||
.jp-RenderedHTMLCommon h3:first-child,
|
||
.jp-RenderedHTMLCommon h4:first-child,
|
||
.jp-RenderedHTMLCommon h5:first-child,
|
||
.jp-RenderedHTMLCommon h6:first-child {
|
||
margin-top: calc(0.5 * var(--jp-content-heading-margin-top));
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h1:last-child,
|
||
.jp-RenderedHTMLCommon h2:last-child,
|
||
.jp-RenderedHTMLCommon h3:last-child,
|
||
.jp-RenderedHTMLCommon h4:last-child,
|
||
.jp-RenderedHTMLCommon h5:last-child,
|
||
.jp-RenderedHTMLCommon h6:last-child {
|
||
margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom));
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h1 {
|
||
font-size: var(--jp-content-font-size5);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h2 {
|
||
font-size: var(--jp-content-font-size4);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h3 {
|
||
font-size: var(--jp-content-font-size3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h4 {
|
||
font-size: var(--jp-content-font-size2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h5 {
|
||
font-size: var(--jp-content-font-size1);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h6 {
|
||
font-size: var(--jp-content-font-size0);
|
||
}
|
||
|
||
/* Lists */
|
||
|
||
/* stylelint-disable selector-max-type, selector-max-compound-selectors */
|
||
|
||
.jp-RenderedHTMLCommon ul:not(.list-inline),
|
||
.jp-RenderedHTMLCommon ol:not(.list-inline) {
|
||
padding-left: 2em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul {
|
||
list-style: disc;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul ul {
|
||
list-style: square;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul ul ul {
|
||
list-style: circle;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol {
|
||
list-style: decimal;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol {
|
||
list-style: upper-alpha;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol ol {
|
||
list-style: lower-alpha;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol ol ol {
|
||
list-style: lower-roman;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol ol ol ol {
|
||
list-style: decimal;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol,
|
||
.jp-RenderedHTMLCommon ul {
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul ul,
|
||
.jp-RenderedHTMLCommon ul ol,
|
||
.jp-RenderedHTMLCommon ol ul,
|
||
.jp-RenderedHTMLCommon ol ol {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
/* stylelint-enable selector-max-type, selector-max-compound-selectors */
|
||
|
||
.jp-RenderedHTMLCommon hr {
|
||
color: var(--jp-border-color2);
|
||
background-color: var(--jp-border-color1);
|
||
margin-top: 1em;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon > pre {
|
||
margin: 1.5em 2em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon pre,
|
||
.jp-RenderedHTMLCommon code {
|
||
border: 0;
|
||
background-color: var(--jp-layout-color0);
|
||
color: var(--jp-content-font-color1);
|
||
font-family: var(--jp-code-font-family);
|
||
font-size: inherit;
|
||
line-height: var(--jp-code-line-height);
|
||
padding: 0;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon :not(pre) > code {
|
||
background-color: var(--jp-layout-color2);
|
||
padding: 1px 5px;
|
||
}
|
||
|
||
/* Tables */
|
||
|
||
.jp-RenderedHTMLCommon table {
|
||
border-collapse: collapse;
|
||
border-spacing: 0;
|
||
border: none;
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
table-layout: fixed;
|
||
margin-left: auto;
|
||
margin-bottom: 1em;
|
||
margin-right: auto;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon thead {
|
||
border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
|
||
vertical-align: bottom;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon td,
|
||
.jp-RenderedHTMLCommon th,
|
||
.jp-RenderedHTMLCommon tr {
|
||
vertical-align: middle;
|
||
padding: 0.5em;
|
||
line-height: normal;
|
||
white-space: normal;
|
||
max-width: none;
|
||
border: none;
|
||
}
|
||
|
||
.jp-RenderedMarkdown.jp-RenderedHTMLCommon td,
|
||
.jp-RenderedMarkdown.jp-RenderedHTMLCommon th {
|
||
max-width: none;
|
||
}
|
||
|
||
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td,
|
||
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th,
|
||
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr {
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon th {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon tbody tr:nth-child(odd) {
|
||
background: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon tbody tr:nth-child(even) {
|
||
background: var(--jp-rendermime-table-row-background);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon tbody tr:hover {
|
||
background: var(--jp-rendermime-table-row-hover-background);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon p {
|
||
text-align: left;
|
||
margin: 0;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon img {
|
||
-moz-force-broken-image-icon: 1;
|
||
}
|
||
|
||
/* Restrict to direct children as other images could be nested in other content. */
|
||
.jp-RenderedHTMLCommon > img {
|
||
display: block;
|
||
margin-left: 0;
|
||
margin-right: 0;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
/* Change color behind transparent images if they need it... */
|
||
[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background {
|
||
background-color: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background {
|
||
background-color: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon img,
|
||
.jp-RenderedImage img,
|
||
.jp-RenderedHTMLCommon svg,
|
||
.jp-RenderedSVG svg {
|
||
max-width: 100%;
|
||
height: auto;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon img.jp-mod-unconfined,
|
||
.jp-RenderedImage img.jp-mod-unconfined,
|
||
.jp-RenderedHTMLCommon svg.jp-mod-unconfined,
|
||
.jp-RenderedSVG svg.jp-mod-unconfined {
|
||
max-width: none;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert {
|
||
padding: var(--jp-notebook-padding);
|
||
border: var(--jp-border-width) solid transparent;
|
||
border-radius: var(--jp-border-radius);
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-info {
|
||
color: var(--jp-info-color0);
|
||
background-color: var(--jp-info-color3);
|
||
border-color: var(--jp-info-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-info hr {
|
||
border-color: var(--jp-info-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-info > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-info > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-warning {
|
||
color: var(--jp-warn-color0);
|
||
background-color: var(--jp-warn-color3);
|
||
border-color: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-warning hr {
|
||
border-color: var(--jp-warn-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-warning > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-warning > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-success {
|
||
color: var(--jp-success-color0);
|
||
background-color: var(--jp-success-color3);
|
||
border-color: var(--jp-success-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-success hr {
|
||
border-color: var(--jp-success-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-success > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-success > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-danger {
|
||
color: var(--jp-error-color0);
|
||
background-color: var(--jp-error-color3);
|
||
border-color: var(--jp-error-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-danger hr {
|
||
border-color: var(--jp-error-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-danger > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-danger > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon blockquote {
|
||
margin: 1em 2em;
|
||
padding: 0 1em;
|
||
border-left: 5px solid var(--jp-border-color2);
|
||
}
|
||
|
||
a.jp-InternalAnchorLink {
|
||
visibility: hidden;
|
||
margin-left: 8px;
|
||
color: var(--md-blue-800);
|
||
}
|
||
|
||
h1:hover .jp-InternalAnchorLink,
|
||
h2:hover .jp-InternalAnchorLink,
|
||
h3:hover .jp-InternalAnchorLink,
|
||
h4:hover .jp-InternalAnchorLink,
|
||
h5:hover .jp-InternalAnchorLink,
|
||
h6:hover .jp-InternalAnchorLink {
|
||
visibility: visible;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon kbd {
|
||
background-color: var(--jp-rendermime-table-row-background);
|
||
border: 1px solid var(--jp-border-color0);
|
||
border-bottom-color: var(--jp-border-color2);
|
||
border-radius: 3px;
|
||
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||
display: inline-block;
|
||
font-size: var(--jp-ui-font-size0);
|
||
line-height: 1em;
|
||
padding: 0.2em 0.5em;
|
||
}
|
||
|
||
/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0.
|
||
* At the bottom of cells this is a bit too much as there is also spacing
|
||
* between cells. Going all the way to 0 gets too tight between markdown and
|
||
* code cells.
|
||
*/
|
||
.jp-RenderedHTMLCommon > *:last-child {
|
||
margin-bottom: 0.5em;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-cursor-backdrop {
|
||
position: fixed;
|
||
width: 200px;
|
||
height: 200px;
|
||
margin-top: -100px;
|
||
margin-left: -100px;
|
||
will-change: transform;
|
||
z-index: 100;
|
||
}
|
||
|
||
.lm-mod-drag-image {
|
||
will-change: transform;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-lineFormSearch {
|
||
padding: 4px 12px;
|
||
background-color: var(--jp-layout-color2);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
z-index: 2;
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
.jp-lineFormCaption {
|
||
font-size: var(--jp-ui-font-size0);
|
||
line-height: var(--jp-ui-font-size1);
|
||
margin-top: 4px;
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
.jp-baseLineForm {
|
||
border: none;
|
||
border-radius: 0;
|
||
position: absolute;
|
||
background-size: 16px;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
outline: none;
|
||
}
|
||
|
||
.jp-lineFormButtonContainer {
|
||
top: 4px;
|
||
right: 8px;
|
||
height: 24px;
|
||
padding: 0 12px;
|
||
width: 12px;
|
||
}
|
||
|
||
.jp-lineFormButtonIcon {
|
||
top: 0;
|
||
right: 0;
|
||
background-color: var(--jp-brand-color1);
|
||
height: 100%;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
padding: 4px 6px;
|
||
}
|
||
|
||
.jp-lineFormButton {
|
||
top: 0;
|
||
right: 0;
|
||
background-color: transparent;
|
||
height: 100%;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-lineFormWrapper {
|
||
overflow: hidden;
|
||
padding: 0 8px;
|
||
border: 1px solid var(--jp-border-color0);
|
||
background-color: var(--jp-input-active-background);
|
||
height: 22px;
|
||
}
|
||
|
||
.jp-lineFormWrapperFocusWithin {
|
||
border: var(--jp-border-width) solid var(--md-blue-500);
|
||
box-shadow: inset 0 0 4px var(--md-blue-300);
|
||
}
|
||
|
||
.jp-lineFormInput {
|
||
background: transparent;
|
||
width: 200px;
|
||
height: 100%;
|
||
border: none;
|
||
outline: none;
|
||
color: var(--jp-ui-font-color0);
|
||
line-height: 28px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-JSONEditor {
|
||
display: flex;
|
||
flex-direction: column;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-JSONEditor-host {
|
||
flex: 1 1 auto;
|
||
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
||
border-radius: 0;
|
||
background: var(--jp-layout-color0);
|
||
min-height: 50px;
|
||
padding: 1px;
|
||
}
|
||
|
||
.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host {
|
||
border-color: red;
|
||
outline-color: red;
|
||
}
|
||
|
||
.jp-JSONEditor-header {
|
||
display: flex;
|
||
flex: 1 0 auto;
|
||
padding: 0 0 0 12px;
|
||
}
|
||
|
||
.jp-JSONEditor-header label {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.jp-JSONEditor-commitButton {
|
||
height: 16px;
|
||
width: 16px;
|
||
background-size: 18px;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
}
|
||
|
||
.jp-JSONEditor-host.jp-mod-focused {
|
||
background-color: var(--jp-input-active-background);
|
||
border: 1px solid var(--jp-input-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
}
|
||
|
||
.jp-Editor.jp-mod-dropTarget {
|
||
border: var(--jp-border-width) solid var(--jp-input-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
.jp-DocumentSearch-input {
|
||
border: none;
|
||
outline: none;
|
||
color: var(--jp-ui-font-color0);
|
||
font-size: var(--jp-ui-font-size1);
|
||
background-color: var(--jp-layout-color0);
|
||
font-family: var(--jp-ui-font-family);
|
||
padding: 2px 1px;
|
||
resize: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay {
|
||
position: absolute;
|
||
background-color: var(--jp-toolbar-background);
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
top: 0;
|
||
right: 0;
|
||
z-index: 7;
|
||
min-width: 405px;
|
||
padding: 2px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
|
||
--jp-private-document-search-button-height: 20px;
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay button {
|
||
background-color: var(--jp-toolbar-background);
|
||
outline: 0;
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay button:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay button:active {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay-row {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-bottom: 2px;
|
||
}
|
||
|
||
.jp-DocumentSearch-button-content {
|
||
display: inline-block;
|
||
cursor: pointer;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-button-content svg {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-wrapper {
|
||
border: var(--jp-border-width) solid var(--jp-border-color0);
|
||
display: flex;
|
||
background-color: var(--jp-layout-color0);
|
||
margin: 2px;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-wrapper:focus-within {
|
||
border-color: var(--jp-cell-editor-active-border-color);
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper,
|
||
.jp-DocumentSearch-button-wrapper {
|
||
all: initial;
|
||
overflow: hidden;
|
||
display: inline-block;
|
||
border: none;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper {
|
||
width: 14px;
|
||
height: 14px;
|
||
}
|
||
|
||
.jp-DocumentSearch-button-wrapper {
|
||
width: var(--jp-private-document-search-button-height);
|
||
height: var(--jp-private-document-search-button-height);
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper:focus,
|
||
.jp-DocumentSearch-button-wrapper:focus {
|
||
outline: var(--jp-border-width) solid
|
||
var(--jp-cell-editor-active-border-color);
|
||
outline-offset: -1px;
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper,
|
||
.jp-DocumentSearch-button-wrapper,
|
||
.jp-DocumentSearch-button-content:focus {
|
||
outline: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-placeholder {
|
||
width: 5px;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button::before {
|
||
display: block;
|
||
padding-top: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button-off {
|
||
opacity: var(--jp-search-toggle-off-opacity);
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button-off:hover {
|
||
opacity: var(--jp-search-toggle-hover-opacity);
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button-on {
|
||
opacity: var(--jp-search-toggle-on-opacity);
|
||
}
|
||
|
||
.jp-DocumentSearch-index-counter {
|
||
padding-left: 10px;
|
||
padding-right: 10px;
|
||
user-select: none;
|
||
min-width: 35px;
|
||
display: inline-block;
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-wrapper {
|
||
display: inline-block;
|
||
padding-right: 2px;
|
||
margin-left: auto;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.jp-DocumentSearch-spacer {
|
||
margin-left: auto;
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-wrapper button {
|
||
outline: 0;
|
||
border: none;
|
||
width: var(--jp-private-document-search-button-height);
|
||
height: var(--jp-private-document-search-button-height);
|
||
vertical-align: middle;
|
||
margin: 1px 5px 2px;
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-button:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-button:active {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button {
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button-enabled {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button-enabled:hover {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-DocumentSearch-search-options {
|
||
padding: 0 8px;
|
||
margin-left: 3px;
|
||
width: 100%;
|
||
display: grid;
|
||
justify-content: start;
|
||
grid-template-columns: 1fr 1fr;
|
||
align-items: center;
|
||
justify-items: stretch;
|
||
}
|
||
|
||
.jp-DocumentSearch-search-filter-disabled {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-search-filter {
|
||
display: flex;
|
||
align-items: center;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-regex-error {
|
||
color: var(--jp-error-color0);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button-wrapper {
|
||
overflow: hidden;
|
||
display: inline-block;
|
||
box-sizing: border-box;
|
||
border: var(--jp-border-width) solid var(--jp-border-color0);
|
||
margin: auto 2px;
|
||
padding: 1px 4px;
|
||
height: calc(var(--jp-private-document-search-button-height) + 2px);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button-wrapper:focus {
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button {
|
||
display: inline-block;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
box-sizing: border-box;
|
||
color: var(--jp-ui-font-color1);
|
||
|
||
/* height - 2 * (padding of wrapper) */
|
||
line-height: calc(var(--jp-private-document-search-button-height) - 2px);
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button:focus {
|
||
outline: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-wrapper-class {
|
||
margin-left: 14px;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-toggle {
|
||
border: none;
|
||
background-color: var(--jp-toolbar-background);
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-toggle:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.cm-editor {
|
||
line-height: var(--jp-code-line-height);
|
||
font-size: var(--jp-code-font-size);
|
||
font-family: var(--jp-code-font-family);
|
||
border: 0;
|
||
border-radius: 0;
|
||
height: auto;
|
||
|
||
/* Changed to auto to autogrow */
|
||
}
|
||
|
||
.cm-editor pre {
|
||
padding: 0 var(--jp-code-padding);
|
||
}
|
||
|
||
.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog {
|
||
background-color: var(--jp-layout-color0);
|
||
color: var(--jp-content-font-color1);
|
||
}
|
||
|
||
.jp-CodeMirrorEditor {
|
||
cursor: text;
|
||
}
|
||
|
||
/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */
|
||
@media screen and (min-width: 2138px) and (max-width: 4319px) {
|
||
.jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {
|
||
border-left: var(--jp-code-cursor-width1) solid
|
||
var(--jp-editor-cursor-color);
|
||
}
|
||
}
|
||
|
||
/* When zoomed out less than 33% */
|
||
@media screen and (min-width: 4320px) {
|
||
.jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {
|
||
border-left: var(--jp-code-cursor-width2) solid
|
||
var(--jp-editor-cursor-color);
|
||
}
|
||
}
|
||
|
||
.cm-editor.jp-mod-readOnly .cm-cursor {
|
||
display: none;
|
||
}
|
||
|
||
.jp-CollaboratorCursor {
|
||
border-left: 5px solid transparent;
|
||
border-right: 5px solid transparent;
|
||
border-top: none;
|
||
border-bottom: 3px solid;
|
||
background-clip: content-box;
|
||
margin-left: -5px;
|
||
margin-right: -5px;
|
||
}
|
||
|
||
.cm-searching,
|
||
.cm-searching span {
|
||
/* `.cm-searching span`: we need to override syntax highlighting */
|
||
background-color: var(--jp-search-unselected-match-background-color);
|
||
color: var(--jp-search-unselected-match-color);
|
||
}
|
||
|
||
.cm-searching::selection,
|
||
.cm-searching span::selection {
|
||
background-color: var(--jp-search-unselected-match-background-color);
|
||
color: var(--jp-search-unselected-match-color);
|
||
}
|
||
|
||
.jp-current-match > .cm-searching,
|
||
.jp-current-match > .cm-searching span,
|
||
.cm-searching > .jp-current-match,
|
||
.cm-searching > .jp-current-match span {
|
||
background-color: var(--jp-search-selected-match-background-color);
|
||
color: var(--jp-search-selected-match-color);
|
||
}
|
||
|
||
.jp-current-match > .cm-searching::selection,
|
||
.cm-searching > .jp-current-match::selection,
|
||
.jp-current-match > .cm-searching span::selection {
|
||
background-color: var(--jp-search-selected-match-background-color);
|
||
color: var(--jp-search-selected-match-color);
|
||
}
|
||
|
||
.cm-trailingspace {
|
||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=);
|
||
background-position: center left;
|
||
background-repeat: repeat-x;
|
||
}
|
||
|
||
.jp-CollaboratorCursor-hover {
|
||
position: absolute;
|
||
z-index: 1;
|
||
transform: translateX(-50%);
|
||
color: white;
|
||
border-radius: 3px;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
padding-top: 1px;
|
||
padding-bottom: 1px;
|
||
text-align: center;
|
||
font-size: var(--jp-ui-font-size1);
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.jp-CodeMirror-ruler {
|
||
border-left: 1px dashed var(--jp-border-color2);
|
||
}
|
||
|
||
/* Styles for shared cursors (remote cursor locations and selected ranges) */
|
||
.jp-CodeMirrorEditor .cm-ySelectionCaret {
|
||
position: relative;
|
||
border-left: 1px solid black;
|
||
margin-left: -1px;
|
||
margin-right: -1px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo {
|
||
white-space: nowrap;
|
||
position: absolute;
|
||
top: -1.15em;
|
||
padding-bottom: 0.05em;
|
||
left: -1px;
|
||
font-size: 0.95em;
|
||
font-family: var(--jp-ui-font-family);
|
||
font-weight: bold;
|
||
line-height: normal;
|
||
user-select: none;
|
||
color: white;
|
||
padding-left: 2px;
|
||
padding-right: 2px;
|
||
z-index: 101;
|
||
transition: opacity 0.3s ease-in-out;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .cm-ySelectionInfo {
|
||
transition-delay: 0.7s;
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo {
|
||
opacity: 1;
|
||
transition-delay: 0s;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MimeDocument {
|
||
outline: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-filebrowser-button-height: 28px;
|
||
--jp-private-filebrowser-button-width: 48px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileBrowser .jp-SidePanel-content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar {
|
||
flex-wrap: wrap;
|
||
row-gap: 12px;
|
||
border-bottom: none;
|
||
height: auto;
|
||
margin: 8px 12px 0;
|
||
box-shadow: none;
|
||
padding: 0;
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
.jp-FileBrowser-Panel {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.jp-BreadCrumbs {
|
||
flex: 0 0 auto;
|
||
margin: 8px 12px;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item {
|
||
margin: 0 2px;
|
||
padding: 0 2px;
|
||
border-radius: var(--jp-border-radius);
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-BreadCrumbs-item:first-child {
|
||
margin-left: 0;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item.jp-mod-dropTarget {
|
||
background-color: var(--jp-brand-color2);
|
||
opacity: 0.7;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Buttons
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileBrowser-toolbar > .jp-Toolbar-item {
|
||
flex: 0 0 auto;
|
||
padding-left: 0;
|
||
padding-right: 2px;
|
||
align-items: center;
|
||
height: unset;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent {
|
||
width: 40px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Other styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileDialog.jp-mod-conflict input {
|
||
color: var(--jp-error-color1);
|
||
}
|
||
|
||
.jp-FileDialog .jp-new-name-title {
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.jp-LastModified-hidden {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FileSize-hidden {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FileBrowser .lm-AccordionPanel > h3:first-child {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| DirListing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-DirListing {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
outline: 0;
|
||
}
|
||
|
||
.jp-DirListing-header {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
overflow: hidden;
|
||
border-top: var(--jp-border-width) solid var(--jp-border-color2);
|
||
border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
z-index: 2;
|
||
}
|
||
|
||
.jp-DirListing-headerItem {
|
||
padding: 4px 12px 2px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.jp-DirListing-headerItem:hover {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-id-name {
|
||
flex: 1 0 84px;
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-id-modified {
|
||
flex: 0 0 112px;
|
||
border-left: var(--jp-border-width) solid var(--jp-border-color2);
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-id-filesize {
|
||
flex: 0 0 75px;
|
||
border-left: var(--jp-border-width) solid var(--jp-border-color2);
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-id-narrow {
|
||
display: none;
|
||
flex: 0 0 5px;
|
||
padding: 4px;
|
||
border-left: var(--jp-border-width) solid var(--jp-border-color2);
|
||
text-align: right;
|
||
color: var(--jp-border-color2);
|
||
}
|
||
|
||
.jp-DirListing-narrow .jp-id-narrow {
|
||
display: block;
|
||
}
|
||
|
||
.jp-DirListing-narrow .jp-id-modified,
|
||
.jp-DirListing-narrow .jp-DirListing-itemModified {
|
||
display: none;
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-mod-selected {
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* increase specificity to override bundled default */
|
||
.jp-DirListing-content {
|
||
flex: 1 1 auto;
|
||
margin: 0;
|
||
padding: 0;
|
||
list-style-type: none;
|
||
overflow: auto;
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-DirListing-content mark {
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: transparent;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark {
|
||
color: var(--jp-ui-inverse-font-color0);
|
||
}
|
||
|
||
/* Style the directory listing content when a user drops a file to upload */
|
||
.jp-DirListing.jp-mod-native-drop .jp-DirListing-content {
|
||
outline: 5px dashed rgba(128, 128, 128, 0.5);
|
||
outline-offset: -10px;
|
||
cursor: copy;
|
||
}
|
||
|
||
.jp-DirListing-item {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
padding: 4px 12px;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-DirListing-checkboxWrapper {
|
||
/* Increases hit area of checkbox. */
|
||
padding: 4px;
|
||
}
|
||
|
||
.jp-DirListing-header
|
||
.jp-DirListing-checkboxWrapper
|
||
+ .jp-DirListing-headerItem {
|
||
padding-left: 4px;
|
||
}
|
||
|
||
.jp-DirListing-content .jp-DirListing-checkboxWrapper {
|
||
position: relative;
|
||
left: -4px;
|
||
margin: -4px 0 -4px -8px;
|
||
}
|
||
|
||
.jp-DirListing-checkboxWrapper.jp-mod-visible {
|
||
visibility: visible;
|
||
}
|
||
|
||
/* For devices that support hovering, hide checkboxes until hovered, selected...
|
||
*/
|
||
@media (hover: hover) {
|
||
.jp-DirListing-checkboxWrapper {
|
||
visibility: hidden;
|
||
}
|
||
|
||
.jp-DirListing-item:hover .jp-DirListing-checkboxWrapper,
|
||
.jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper {
|
||
visibility: visible;
|
||
}
|
||
}
|
||
|
||
.jp-DirListing-item[data-is-dot] {
|
||
opacity: 75%;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-selected {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-dropTarget {
|
||
background: var(--jp-brand-color3);
|
||
}
|
||
|
||
.jp-DirListing-item:hover:not(.jp-mod-selected) {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DirListing-itemIcon {
|
||
flex: 0 0 20px;
|
||
margin-right: 4px;
|
||
}
|
||
|
||
.jp-DirListing-itemText {
|
||
flex: 1 0 64px;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-DirListing-itemText:focus {
|
||
outline-width: 2px;
|
||
outline-color: var(--jp-inverse-layout-color1);
|
||
outline-style: solid;
|
||
outline-offset: 1px;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemText:focus {
|
||
outline-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-DirListing-itemModified {
|
||
flex: 0 0 125px;
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-itemFileSize {
|
||
flex: 0 0 90px;
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-editor {
|
||
flex: 1 0 64px;
|
||
outline: none;
|
||
border: none;
|
||
color: var(--jp-ui-font-color1);
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before {
|
||
color: var(--jp-success-color1);
|
||
content: '\25CF';
|
||
font-size: 8px;
|
||
position: absolute;
|
||
left: -8px;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-running.jp-mod-selected
|
||
.jp-DirListing-itemIcon::before {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
}
|
||
|
||
.jp-DirListing-item.lm-mod-drag-image,
|
||
.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image {
|
||
font-size: var(--jp-ui-font-size1);
|
||
padding-left: 4px;
|
||
margin-left: 4px;
|
||
width: 160px;
|
||
background-color: var(--jp-ui-inverse-font-color2);
|
||
box-shadow: var(--jp-elevation-z2);
|
||
border-radius: 0;
|
||
color: var(--jp-ui-font-color1);
|
||
transform: translateX(-40%) translateY(-58%);
|
||
}
|
||
|
||
.jp-Document {
|
||
min-width: 120px;
|
||
min-height: 120px;
|
||
outline: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Main OutputArea
|
||
| OutputArea has a list of Outputs
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-OutputArea {
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-OutputArea-child {
|
||
display: table;
|
||
table-layout: fixed;
|
||
width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-OutputPrompt {
|
||
width: var(--jp-cell-prompt-width);
|
||
color: var(--jp-cell-outprompt-font-color);
|
||
font-family: var(--jp-cell-prompt-font-family);
|
||
padding: var(--jp-code-padding);
|
||
letter-spacing: var(--jp-cell-prompt-letter-spacing);
|
||
line-height: var(--jp-code-line-height);
|
||
font-size: var(--jp-code-font-size);
|
||
border: var(--jp-border-width) solid transparent;
|
||
opacity: var(--jp-cell-prompt-opacity);
|
||
|
||
/* Right align prompt text, don't wrap to handle large prompt numbers */
|
||
text-align: right;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
|
||
/* Disable text selection */
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-OutputArea-prompt {
|
||
display: table-cell;
|
||
vertical-align: top;
|
||
}
|
||
|
||
.jp-OutputArea-output {
|
||
display: table-cell;
|
||
width: 100%;
|
||
height: auto;
|
||
overflow: auto;
|
||
user-select: text;
|
||
-moz-user-select: text;
|
||
-webkit-user-select: text;
|
||
-ms-user-select: text;
|
||
}
|
||
|
||
.jp-OutputArea .jp-RenderedText {
|
||
padding-left: 1ch;
|
||
}
|
||
|
||
/**
|
||
* Prompt overlay.
|
||
*/
|
||
|
||
.jp-OutputArea-promptOverlay {
|
||
position: absolute;
|
||
top: 0;
|
||
width: var(--jp-cell-prompt-width);
|
||
height: 100%;
|
||
opacity: 0.5;
|
||
}
|
||
|
||
.jp-OutputArea-promptOverlay:hover {
|
||
background: var(--jp-layout-color2);
|
||
box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0);
|
||
cursor: zoom-out;
|
||
}
|
||
|
||
.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay:hover {
|
||
cursor: zoom-in;
|
||
}
|
||
|
||
/**
|
||
* Isolated output.
|
||
*/
|
||
.jp-OutputArea-output.jp-mod-isolated {
|
||
width: 100%;
|
||
display: block;
|
||
}
|
||
|
||
/*
|
||
When drag events occur, `lm-mod-override-cursor` is added to the body.
|
||
Because iframes steal all cursor events, the following two rules are necessary
|
||
to suppress pointer events while resize drags are occurring. There may be a
|
||
better solution to this problem.
|
||
*/
|
||
body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated {
|
||
position: relative;
|
||
}
|
||
|
||
body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: transparent;
|
||
}
|
||
|
||
/* pre */
|
||
|
||
.jp-OutputArea-output pre {
|
||
border: none;
|
||
margin: 0;
|
||
padding: 0;
|
||
overflow-x: auto;
|
||
overflow-y: auto;
|
||
word-break: break-all;
|
||
word-wrap: break-word;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
/* tables */
|
||
|
||
.jp-OutputArea-output.jp-RenderedHTMLCommon table {
|
||
margin-left: 0;
|
||
margin-right: 0;
|
||
}
|
||
|
||
/* description lists */
|
||
|
||
.jp-OutputArea-output dl,
|
||
.jp-OutputArea-output dt,
|
||
.jp-OutputArea-output dd {
|
||
display: block;
|
||
}
|
||
|
||
.jp-OutputArea-output dl {
|
||
width: 100%;
|
||
overflow: hidden;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.jp-OutputArea-output dt {
|
||
font-weight: bold;
|
||
float: left;
|
||
width: 20%;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.jp-OutputArea-output dd {
|
||
float: left;
|
||
width: 80%;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.jp-TrimmedOutputs pre {
|
||
background: var(--jp-layout-color3);
|
||
font-size: calc(var(--jp-code-font-size) * 1.4);
|
||
text-align: center;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
/* Hide the gutter in case of
|
||
* - nested output areas (e.g. in the case of output widgets)
|
||
* - mirrored output areas
|
||
*/
|
||
.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt {
|
||
display: none;
|
||
}
|
||
|
||
/* Hide empty lines in the output area, for instance due to cleared widgets */
|
||
.jp-OutputArea-prompt:empty {
|
||
padding: 0;
|
||
border: 0;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| executeResult is added to any Output-result for the display of the object
|
||
| returned by a cell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-OutputArea-output.jp-OutputArea-executeResult {
|
||
margin-left: 0;
|
||
width: 100%;
|
||
}
|
||
|
||
/* Text output with the Out[] prompt needs a top padding to match the
|
||
* alignment of the Out[] prompt itself.
|
||
*/
|
||
.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output {
|
||
padding-top: var(--jp-code-padding);
|
||
border-top: var(--jp-border-width) solid transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| The Stdin output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Stdin-prompt {
|
||
color: var(--jp-content-font-color0);
|
||
padding-right: var(--jp-code-padding);
|
||
vertical-align: baseline;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.jp-Stdin-input {
|
||
font-family: var(--jp-code-font-family);
|
||
font-size: inherit;
|
||
color: inherit;
|
||
background-color: inherit;
|
||
width: 42%;
|
||
min-width: 200px;
|
||
|
||
/* make sure input baseline aligns with prompt */
|
||
vertical-align: baseline;
|
||
|
||
/* padding + margin = 0.5em between prompt and cursor */
|
||
padding: 0 0.25em;
|
||
margin: 0 0.25em;
|
||
flex: 0 0 70%;
|
||
}
|
||
|
||
.jp-Stdin-input::placeholder {
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-Stdin-input:focus {
|
||
box-shadow: none;
|
||
}
|
||
|
||
.jp-Stdin-input:focus::placeholder {
|
||
opacity: 1;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Output Area View
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-LinkedOutputView .jp-OutputArea {
|
||
height: 100%;
|
||
display: block;
|
||
}
|
||
|
||
.jp-LinkedOutputView .jp-OutputArea-output:only-child {
|
||
height: 100%;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Printing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
@media print {
|
||
.jp-OutputArea-child {
|
||
break-inside: avoid-page;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Mobile
|
||
|----------------------------------------------------------------------------*/
|
||
@media only screen and (max-width: 760px) {
|
||
.jp-OutputPrompt {
|
||
display: table-row;
|
||
text-align: left;
|
||
}
|
||
|
||
.jp-OutputArea-child .jp-OutputArea-output {
|
||
display: table-row;
|
||
margin-left: var(--jp-notebook-padding);
|
||
}
|
||
}
|
||
|
||
/* Trimmed outputs warning */
|
||
.jp-TrimmedOutputs > a {
|
||
margin: 10px;
|
||
text-decoration: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-TrimmedOutputs > a:hover {
|
||
text-decoration: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Table of Contents
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-toc-active-width: 4px;
|
||
}
|
||
|
||
.jp-TableOfContents {
|
||
display: flex;
|
||
flex-direction: column;
|
||
background: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-TableOfContents-placeholder {
|
||
text-align: center;
|
||
}
|
||
|
||
.jp-TableOfContents-placeholderContent {
|
||
color: var(--jp-content-font-color2);
|
||
padding: 8px;
|
||
}
|
||
|
||
.jp-TableOfContents-placeholderContent > h3 {
|
||
margin-bottom: var(--jp-content-heading-margin-bottom);
|
||
}
|
||
|
||
.jp-TableOfContents .jp-SidePanel-content {
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-TableOfContents-tree {
|
||
margin: 4px;
|
||
}
|
||
|
||
.jp-TableOfContents ol {
|
||
list-style-type: none;
|
||
}
|
||
|
||
/* stylelint-disable-next-line selector-max-type */
|
||
.jp-TableOfContents li > ol {
|
||
/* Align left border with triangle icon center */
|
||
padding-left: 11px;
|
||
}
|
||
|
||
.jp-TableOfContents-content {
|
||
/* left margin for the active heading indicator */
|
||
margin: 0 0 0 var(--jp-private-toc-active-width);
|
||
padding: 0;
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-tocItem {
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-tocItem-heading {
|
||
display: flex;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-tocItem-heading:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-tocItem-content {
|
||
display: block;
|
||
padding: 4px 0;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
.jp-tocItem-collapser {
|
||
height: 20px;
|
||
margin: 2px 2px 0;
|
||
padding: 0;
|
||
background: none;
|
||
border: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-tocItem-collapser:hover {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
/* Active heading indicator */
|
||
|
||
.jp-tocItem-heading::before {
|
||
content: ' ';
|
||
background: transparent;
|
||
width: var(--jp-private-toc-active-width);
|
||
height: 24px;
|
||
position: absolute;
|
||
left: 0;
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-tocItem-heading.jp-tocItem-active::before {
|
||
background-color: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-tocItem-heading:hover.jp-tocItem-active::before {
|
||
background: var(--jp-brand-color0);
|
||
opacity: 1;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Collapser {
|
||
flex: 0 0 var(--jp-cell-collapser-width);
|
||
padding: 0;
|
||
margin: 0;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
border-radius: var(--jp-border-radius);
|
||
opacity: 1;
|
||
}
|
||
|
||
.jp-Collapser-child {
|
||
display: block;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
|
||
/* height: 100% doesn't work because the height of its parent is computed from content */
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Printing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
Hiding collapsers in print mode.
|
||
|
||
Note: input and output wrappers have "display: block" propery in print mode.
|
||
*/
|
||
|
||
@media print {
|
||
.jp-Collapser {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Header/Footer
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Hidden by zero height by default */
|
||
.jp-CellHeader,
|
||
.jp-CellFooter {
|
||
height: 0;
|
||
width: 100%;
|
||
padding: 0;
|
||
margin: 0;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Input
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* All input areas */
|
||
.jp-InputArea {
|
||
display: table;
|
||
table-layout: fixed;
|
||
width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-InputArea-editor {
|
||
display: table-cell;
|
||
overflow: hidden;
|
||
vertical-align: top;
|
||
|
||
/* This is the non-active, default styling */
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
border-radius: 0;
|
||
background: var(--jp-cell-editor-background);
|
||
}
|
||
|
||
.jp-InputPrompt {
|
||
display: table-cell;
|
||
vertical-align: top;
|
||
width: var(--jp-cell-prompt-width);
|
||
color: var(--jp-cell-inprompt-font-color);
|
||
font-family: var(--jp-cell-prompt-font-family);
|
||
padding: var(--jp-code-padding);
|
||
letter-spacing: var(--jp-cell-prompt-letter-spacing);
|
||
opacity: var(--jp-cell-prompt-opacity);
|
||
line-height: var(--jp-code-line-height);
|
||
font-size: var(--jp-code-font-size);
|
||
border: var(--jp-border-width) solid transparent;
|
||
|
||
/* Right align prompt text, don't wrap to handle large prompt numbers */
|
||
text-align: right;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
|
||
/* Disable text selection */
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Mobile
|
||
|----------------------------------------------------------------------------*/
|
||
@media only screen and (max-width: 760px) {
|
||
.jp-InputArea-editor {
|
||
display: table-row;
|
||
margin-left: var(--jp-notebook-padding);
|
||
}
|
||
|
||
.jp-InputPrompt {
|
||
display: table-row;
|
||
text-align: left;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Placeholder
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Placeholder {
|
||
display: table;
|
||
table-layout: fixed;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Placeholder-prompt {
|
||
display: table-cell;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-Placeholder-content {
|
||
display: table-cell;
|
||
padding: 4px 6px;
|
||
border: 1px solid transparent;
|
||
border-radius: 0;
|
||
background: none;
|
||
box-sizing: border-box;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-Placeholder-contentContainer {
|
||
display: flex;
|
||
}
|
||
|
||
.jp-Placeholder-content:hover,
|
||
.jp-InputPlaceholder > .jp-Placeholder-content:hover {
|
||
border-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-Placeholder-content .jp-MoreHorizIcon {
|
||
width: 32px;
|
||
height: 16px;
|
||
border: 1px solid transparent;
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-Placeholder-content .jp-MoreHorizIcon:hover {
|
||
border: 1px solid var(--jp-border-color1);
|
||
box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);
|
||
background-color: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-PlaceholderText {
|
||
white-space: nowrap;
|
||
overflow-x: hidden;
|
||
color: var(--jp-inverse-layout-color3);
|
||
font-family: var(--jp-code-font-family);
|
||
}
|
||
|
||
.jp-InputPlaceholder > .jp-Placeholder-content {
|
||
border-color: var(--jp-cell-editor-border-color);
|
||
background: var(--jp-cell-editor-background);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Private CSS variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-cell-scrolling-output-offset: 5px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Cell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell {
|
||
padding: var(--jp-cell-padding);
|
||
margin: 0;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Common input/output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: flex;
|
||
flex-direction: row;
|
||
padding: 0;
|
||
margin: 0;
|
||
|
||
/* Added to reveal the box-shadow on the input and output collapsers. */
|
||
overflow: visible;
|
||
}
|
||
|
||
/* Only input/output areas inside cells */
|
||
.jp-Cell-inputArea,
|
||
.jp-Cell-outputArea {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Collapser
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Make the output collapser disappear when there is not output, but do so
|
||
* in a manner that leaves it in the layout and preserves its width.
|
||
*/
|
||
.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser {
|
||
border: none !important;
|
||
background: transparent !important;
|
||
}
|
||
|
||
.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser {
|
||
min-height: var(--jp-cell-collapser-min-height);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Put a space between input and output when there IS output */
|
||
.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper {
|
||
margin-top: 5px;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea {
|
||
overflow-y: auto;
|
||
max-height: 24em;
|
||
margin-left: var(--jp-private-cell-scrolling-output-offset);
|
||
resize: vertical;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] {
|
||
max-height: unset;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after {
|
||
content: ' ';
|
||
box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%);
|
||
width: 100%;
|
||
height: 100%;
|
||
position: sticky;
|
||
bottom: 0;
|
||
top: 0;
|
||
margin-top: -50%;
|
||
float: left;
|
||
display: block;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child {
|
||
padding-top: 6px;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {
|
||
width: calc(
|
||
var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset)
|
||
);
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay {
|
||
left: calc(-1 * var(--jp-private-cell-scrolling-output-offset));
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| CodeCell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| MarkdownCell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MarkdownOutput {
|
||
display: table-cell;
|
||
width: 100%;
|
||
margin-top: 0;
|
||
margin-bottom: 0;
|
||
padding-left: var(--jp-code-padding);
|
||
}
|
||
|
||
.jp-MarkdownOutput.jp-RenderedHTMLCommon {
|
||
overflow: auto;
|
||
}
|
||
|
||
/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */
|
||
.jp-collapseHeadingButton {
|
||
display: flex;
|
||
min-height: var(--jp-cell-collapser-min-height);
|
||
font-size: var(--jp-code-font-size);
|
||
position: absolute;
|
||
background-color: transparent;
|
||
background-size: 25px;
|
||
background-repeat: no-repeat;
|
||
background-position-x: center;
|
||
background-position-y: top;
|
||
background-image: var(--jp-icon-caret-down);
|
||
right: 0;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
|
||
.jp-collapseHeadingButton.jp-mod-collapsed {
|
||
background-image: var(--jp-icon-caret-right);
|
||
}
|
||
|
||
/*
|
||
set the container font size to match that of content
|
||
so that the nested collapse buttons have the right size
|
||
*/
|
||
.jp-MarkdownCell .jp-InputPrompt {
|
||
font-size: var(--jp-content-font-size1);
|
||
}
|
||
|
||
/*
|
||
Align collapseHeadingButton with cell top header
|
||
The font sizes are identical to the ones in packages/rendermime/style/base.css
|
||
*/
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] {
|
||
font-size: var(--jp-content-font-size5);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size5));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] {
|
||
font-size: var(--jp-content-font-size4);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size4));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] {
|
||
font-size: var(--jp-content-font-size3);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size3));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] {
|
||
font-size: var(--jp-content-font-size2);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size2));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] {
|
||
font-size: var(--jp-content-font-size1);
|
||
background-position-y: top;
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] {
|
||
font-size: var(--jp-content-font-size0);
|
||
background-position-y: top;
|
||
}
|
||
|
||
/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton {
|
||
display: none;
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton
|
||
:is(.jp-MarkdownCell:hover, .jp-mod-active)
|
||
.jp-collapseHeadingButton {
|
||
display: flex;
|
||
}
|
||
|
||
/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which
|
||
is a consequence of the showHiddenCellsButton option in Notebook Settings)*/
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton {
|
||
margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding));
|
||
margin-top: var(--jp-code-padding);
|
||
border: 1px solid var(--jp-border-color2);
|
||
background-color: var(--jp-border-color3) !important;
|
||
color: var(--jp-content-font-color0) !important;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover {
|
||
background-color: var(--jp-border-color2) !important;
|
||
}
|
||
|
||
.jp-showHiddenCellsButton {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Printing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
Using block instead of flex to allow the use of the break-inside CSS property for
|
||
cell outputs.
|
||
*/
|
||
|
||
@media print {
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: block;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-notebook-toolbar-padding: 2px 5px 2px 2px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-NotebookPanel-toolbar {
|
||
padding: var(--jp-notebook-toolbar-padding);
|
||
|
||
/* disable paint containment from lumino 2.0 default strict CSS containment */
|
||
contain: style size !important;
|
||
}
|
||
|
||
.jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused {
|
||
border: none;
|
||
box-shadow: none;
|
||
}
|
||
|
||
.jp-Notebook-toolbarCellTypeDropdown select {
|
||
height: 24px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: 14px;
|
||
border-radius: 0;
|
||
display: block;
|
||
}
|
||
|
||
.jp-Notebook-toolbarCellTypeDropdown span {
|
||
top: 5px !important;
|
||
}
|
||
|
||
.jp-Toolbar-responsive-popup {
|
||
position: absolute;
|
||
height: fit-content;
|
||
display: flex;
|
||
flex-direction: row;
|
||
flex-wrap: wrap;
|
||
justify-content: flex-end;
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
background: var(--jp-toolbar-background);
|
||
min-height: var(--jp-toolbar-micro-height);
|
||
padding: var(--jp-notebook-toolbar-padding);
|
||
z-index: 1;
|
||
right: 0;
|
||
top: 0;
|
||
}
|
||
|
||
.jp-Toolbar > .jp-Toolbar-responsive-opener {
|
||
margin-left: auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Notebook-ExecutionIndicator {
|
||
position: relative;
|
||
display: inline-block;
|
||
height: 100%;
|
||
z-index: 9997;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip {
|
||
visibility: hidden;
|
||
height: auto;
|
||
width: max-content;
|
||
width: -moz-max-content;
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color1);
|
||
text-align: justify;
|
||
border-radius: 6px;
|
||
padding: 0 5px;
|
||
position: fixed;
|
||
display: table;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip.up {
|
||
transform: translateX(-50%) translateY(-100%) translateY(-32px);
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip.down {
|
||
transform: translateX(calc(-100% + 16px)) translateY(5px);
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip.hidden {
|
||
display: none;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip {
|
||
visibility: visible;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator span {
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-family: var(--jp-ui-font-family);
|
||
color: var(--jp-ui-font-color1);
|
||
line-height: 24px;
|
||
display: block;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-progress-bar {
|
||
display: flex;
|
||
justify-content: center;
|
||
height: 100%;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*
|
||
* Execution indicator
|
||
*/
|
||
.jp-tocItem-content::after {
|
||
content: '';
|
||
|
||
/* Must be identical to form a circle */
|
||
width: 12px;
|
||
height: 12px;
|
||
background: none;
|
||
border: none;
|
||
position: absolute;
|
||
right: 0;
|
||
}
|
||
|
||
.jp-tocItem-content[data-running='0']::after {
|
||
border-radius: 50%;
|
||
border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);
|
||
background: none;
|
||
}
|
||
|
||
.jp-tocItem-content[data-running='1']::after {
|
||
border-radius: 50%;
|
||
border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);
|
||
background-color: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-tocItem-content[data-running='0'],
|
||
.jp-tocItem-content[data-running='1'] {
|
||
margin-right: 12px;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-Notebook-footer {
|
||
height: 27px;
|
||
margin-left: calc(
|
||
var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +
|
||
var(--jp-cell-padding)
|
||
);
|
||
width: calc(
|
||
100% -
|
||
(
|
||
var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +
|
||
var(--jp-cell-padding) + var(--jp-cell-padding)
|
||
)
|
||
);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
color: var(--jp-ui-font-color3);
|
||
margin-top: 6px;
|
||
background: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-Notebook-footer:focus {
|
||
border-color: var(--jp-cell-editor-active-border-color);
|
||
}
|
||
|
||
/* For devices that support hovering, hide footer until hover */
|
||
@media (hover: hover) {
|
||
.jp-Notebook-footer {
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-Notebook-footer:focus,
|
||
.jp-Notebook-footer:hover {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Imports
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| CSS variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-side-by-side-output-size: 1fr;
|
||
--jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size);
|
||
--jp-private-notebook-dragImage-width: 304px;
|
||
--jp-private-notebook-dragImage-height: 36px;
|
||
--jp-private-notebook-selected-color: var(--md-blue-400);
|
||
--jp-private-notebook-active-color: var(--md-green-400);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* stylelint-disable selector-max-class */
|
||
|
||
.jp-NotebookPanel {
|
||
display: block;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-NotebookPanel.jp-Document {
|
||
min-width: 240px;
|
||
min-height: 120px;
|
||
}
|
||
|
||
.jp-Notebook {
|
||
padding: var(--jp-notebook-padding);
|
||
outline: none;
|
||
overflow: auto;
|
||
background: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-scrollPastEnd::after {
|
||
display: block;
|
||
content: '';
|
||
min-height: var(--jp-notebook-scroll-padding);
|
||
}
|
||
|
||
.jp-MainAreaWidget-ContainStrict .jp-Notebook * {
|
||
contain: strict;
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell {
|
||
overflow: visible;
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell .jp-InputPrompt {
|
||
cursor: move;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook state related styling
|
||
|
|
||
| The notebook and cells each have states, here are the possibilities:
|
||
|
|
||
| - Notebook
|
||
| - Command
|
||
| - Edit
|
||
| - Cell
|
||
| - None
|
||
| - Active (only one can be active)
|
||
| - Selected (the cells actions are applied to)
|
||
| - Multiselected (when multiple selected, the cursor)
|
||
| - No outputs
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Command or edit modes */
|
||
|
||
.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {
|
||
opacity: var(--jp-cell-prompt-not-active-opacity);
|
||
color: var(--jp-cell-prompt-not-active-font-color);
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {
|
||
opacity: var(--jp-cell-prompt-not-active-opacity);
|
||
color: var(--jp-cell-prompt-not-active-font-color);
|
||
}
|
||
|
||
/* cell is active */
|
||
.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser {
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* cell is dirty */
|
||
.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt {
|
||
color: var(--jp-warn-color1);
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before {
|
||
color: var(--jp-warn-color1);
|
||
content: '•';
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser {
|
||
background: var(--jp-warn-color1);
|
||
}
|
||
|
||
/* collapser is hovered */
|
||
.jp-Notebook .jp-Cell .jp-Collapser:hover {
|
||
box-shadow: var(--jp-elevation-z2);
|
||
background: var(--jp-brand-color1);
|
||
opacity: var(--jp-cell-collapser-not-active-hover-opacity);
|
||
}
|
||
|
||
/* cell is active and collapser is hovered */
|
||
.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover {
|
||
background: var(--jp-brand-color0);
|
||
opacity: 1;
|
||
}
|
||
|
||
/* Command mode */
|
||
|
||
.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected {
|
||
background: var(--jp-notebook-multiselected-color);
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-commandMode
|
||
.jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) {
|
||
background: transparent;
|
||
}
|
||
|
||
/* Edit mode */
|
||
|
||
.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor {
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
background-color: var(--jp-cell-editor-active-background);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook drag and drop
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Notebook-cell.jp-mod-dropSource {
|
||
opacity: 0.5;
|
||
}
|
||
|
||
.jp-Notebook-cell.jp-mod-dropTarget,
|
||
.jp-Notebook.jp-mod-commandMode
|
||
.jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget {
|
||
border-top-color: var(--jp-private-notebook-selected-color);
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
.jp-dragImage {
|
||
display: block;
|
||
flex-direction: row;
|
||
width: var(--jp-private-notebook-dragImage-width);
|
||
height: var(--jp-private-notebook-dragImage-height);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
background: var(--jp-cell-editor-background);
|
||
overflow: visible;
|
||
}
|
||
|
||
.jp-dragImage-singlePrompt {
|
||
box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);
|
||
}
|
||
|
||
.jp-dragImage .jp-dragImage-content {
|
||
flex: 1 1 auto;
|
||
z-index: 2;
|
||
font-size: var(--jp-code-font-size);
|
||
font-family: var(--jp-code-font-family);
|
||
line-height: var(--jp-code-line-height);
|
||
padding: var(--jp-code-padding);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
background: var(--jp-cell-editor-background-color);
|
||
color: var(--jp-content-font-color3);
|
||
text-align: left;
|
||
margin: 4px 4px 4px 0;
|
||
}
|
||
|
||
.jp-dragImage .jp-dragImage-prompt {
|
||
flex: 0 0 auto;
|
||
min-width: 36px;
|
||
color: var(--jp-cell-inprompt-font-color);
|
||
padding: var(--jp-code-padding);
|
||
padding-left: 12px;
|
||
font-family: var(--jp-cell-prompt-font-family);
|
||
letter-spacing: var(--jp-cell-prompt-letter-spacing);
|
||
line-height: 1.9;
|
||
font-size: var(--jp-code-font-size);
|
||
border: var(--jp-border-width) solid transparent;
|
||
}
|
||
|
||
.jp-dragImage-multipleBack {
|
||
z-index: -1;
|
||
position: absolute;
|
||
height: 32px;
|
||
width: 300px;
|
||
top: 8px;
|
||
left: 8px;
|
||
background: var(--jp-layout-color2);
|
||
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
||
box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Cell toolbar
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-NotebookTools {
|
||
display: block;
|
||
min-width: var(--jp-sidebar-min-width);
|
||
color: var(--jp-ui-font-color1);
|
||
background: var(--jp-layout-color1);
|
||
|
||
/* This is needed so that all font sizing of children done in ems is
|
||
* relative to this base size */
|
||
font-size: var(--jp-ui-font-size1);
|
||
overflow: auto;
|
||
}
|
||
|
||
.jp-ActiveCellTool {
|
||
padding: 12px 0;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-ActiveCellTool-Content {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-ActiveCellTool-CellContent {
|
||
background: var(--jp-cell-editor-background);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
border-radius: 0;
|
||
min-height: 29px;
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-InputPrompt {
|
||
min-width: calc(var(--jp-cell-prompt-width) * 0.75);
|
||
}
|
||
|
||
.jp-ActiveCellTool-CellContent > pre {
|
||
padding: 5px 4px;
|
||
margin: 0;
|
||
white-space: normal;
|
||
}
|
||
|
||
.jp-MetadataEditorTool {
|
||
flex-direction: column;
|
||
padding: 12px 0;
|
||
}
|
||
|
||
.jp-RankedPanel > :not(:first-child) {
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.jp-KeySelector select.jp-mod-styled {
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color0);
|
||
border: var(--jp-border-width) solid var(--jp-border-color1);
|
||
}
|
||
|
||
.jp-KeySelector label,
|
||
.jp-MetadataEditorTool label,
|
||
.jp-NumberSetter label {
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.jp-NotebookTools .jp-select-wrapper {
|
||
margin-top: 4px;
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-NumberSetter input {
|
||
width: 100%;
|
||
margin-top: 4px;
|
||
}
|
||
|
||
.jp-NotebookTools .jp-Collapse {
|
||
margin-top: 16px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Presentation Mode (.jp-mod-presentationMode)
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-mod-presentationMode .jp-Notebook {
|
||
--jp-content-font-size1: var(--jp-content-presentation-font-size1);
|
||
--jp-code-font-size: var(--jp-code-presentation-font-size);
|
||
}
|
||
|
||
.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,
|
||
.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt {
|
||
flex: 0 0 110px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Side-by-side Mode (.jp-mod-sideBySide)
|
||
|----------------------------------------------------------------------------*/
|
||
.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell {
|
||
margin-top: 3em;
|
||
margin-bottom: 3em;
|
||
margin-left: 5%;
|
||
margin-right: 5%;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell {
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr) min-content minmax(
|
||
0,
|
||
var(--jp-side-by-side-output-size)
|
||
);
|
||
grid-template-rows: auto minmax(0, 1fr) auto;
|
||
grid-template-areas:
|
||
'header header header'
|
||
'input handle output'
|
||
'footer footer footer';
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell {
|
||
grid-template-columns: minmax(0, 1fr) min-content minmax(
|
||
0,
|
||
var(--jp-side-by-side-resized-cell)
|
||
);
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader {
|
||
grid-area: header;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper {
|
||
grid-area: input;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper {
|
||
/* overwrite the default margin (no vertical separation needed in side by side move */
|
||
margin-top: 0;
|
||
grid-area: output;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter {
|
||
grid-area: footer;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle {
|
||
grid-area: handle;
|
||
user-select: none;
|
||
display: block;
|
||
height: 100%;
|
||
cursor: ew-resize;
|
||
padding: 0 var(--jp-cell-padding);
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after {
|
||
content: '';
|
||
display: block;
|
||
background: var(--jp-border-color2);
|
||
height: 100%;
|
||
width: 5px;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook
|
||
.jp-CodeCell.jp-mod-resizedCell
|
||
.jp-CellResizeHandle::after {
|
||
background: var(--jp-border-color0);
|
||
}
|
||
|
||
.jp-CellResizeHandle {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Placeholder
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell-Placeholder {
|
||
padding-left: 55px;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper {
|
||
background: #fff;
|
||
border: 1px solid;
|
||
border-color: #e5e6e9 #dfe0e4 #d0d1d5;
|
||
border-radius: 4px;
|
||
-webkit-border-radius: 4px;
|
||
margin: 10px 15px;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-inner {
|
||
padding: 15px;
|
||
position: relative;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-body {
|
||
background-repeat: repeat;
|
||
background-size: 50% auto;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-body div {
|
||
background: #f6f7f8;
|
||
background-image: -webkit-linear-gradient(
|
||
left,
|
||
#f6f7f8 0%,
|
||
#edeef1 20%,
|
||
#f6f7f8 40%,
|
||
#f6f7f8 100%
|
||
);
|
||
background-repeat: no-repeat;
|
||
background-size: 800px 104px;
|
||
height: 104px;
|
||
position: absolute;
|
||
right: 15px;
|
||
left: 15px;
|
||
top: 15px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-h1 {
|
||
top: 20px;
|
||
height: 20px;
|
||
left: 15px;
|
||
width: 150px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-h2 {
|
||
left: 15px;
|
||
top: 50px;
|
||
height: 10px;
|
||
width: 100px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-1,
|
||
div.jp-Cell-Placeholder-content-2,
|
||
div.jp-Cell-Placeholder-content-3 {
|
||
left: 15px;
|
||
right: 15px;
|
||
height: 10px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-1 {
|
||
top: 100px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-2 {
|
||
top: 120px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-3 {
|
||
top: 140px;
|
||
}
|
||
|
||
</style>
|
||
<style type="text/css">
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
The following CSS variables define the main, public API for styling JupyterLab.
|
||
These variables should be used by all plugins wherever possible. In other
|
||
words, plugins should not define custom colors, sizes, etc unless absolutely
|
||
necessary. This enables users to change the visual theme of JupyterLab
|
||
by changing these variables.
|
||
|
||
Many variables appear in an ordered sequence (0,1,2,3). These sequences
|
||
are designed to work well together, so for example, `--jp-border-color1` should
|
||
be used with `--jp-layout-color1`. The numbers have the following meanings:
|
||
|
||
* 0: super-primary, reserved for special emphasis
|
||
* 1: primary, most important under normal situations
|
||
* 2: secondary, next most important under normal situations
|
||
* 3: tertiary, next most important under normal situations
|
||
|
||
Throughout JupyterLab, we are mostly following principles from Google's
|
||
Material Design when selecting colors. We are not, however, following
|
||
all of MD as it is not optimized for dense, information rich UIs.
|
||
*/
|
||
|
||
:root {
|
||
/* Elevation
|
||
*
|
||
* We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
|
||
*
|
||
* https://github.com/material-components/material-components-web
|
||
* https://material-components-web.appspot.com/elevation.html
|
||
*/
|
||
|
||
--jp-shadow-base-lightness: 0;
|
||
--jp-shadow-umbra-color: rgba(
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
0.2
|
||
);
|
||
--jp-shadow-penumbra-color: rgba(
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
0.14
|
||
);
|
||
--jp-shadow-ambient-color: rgba(
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
0.12
|
||
);
|
||
--jp-elevation-z0: none;
|
||
--jp-elevation-z1: 0 2px 1px -1px var(--jp-shadow-umbra-color),
|
||
0 1px 1px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 3px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z2: 0 3px 1px -2px var(--jp-shadow-umbra-color),
|
||
0 2px 2px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 5px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z4: 0 2px 4px -1px var(--jp-shadow-umbra-color),
|
||
0 4px 5px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 10px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z6: 0 3px 5px -1px var(--jp-shadow-umbra-color),
|
||
0 6px 10px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 18px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z8: 0 5px 5px -3px var(--jp-shadow-umbra-color),
|
||
0 8px 10px 1px var(--jp-shadow-penumbra-color),
|
||
0 3px 14px 2px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z12: 0 7px 8px -4px var(--jp-shadow-umbra-color),
|
||
0 12px 17px 2px var(--jp-shadow-penumbra-color),
|
||
0 5px 22px 4px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z16: 0 8px 10px -5px var(--jp-shadow-umbra-color),
|
||
0 16px 24px 2px var(--jp-shadow-penumbra-color),
|
||
0 6px 30px 5px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z20: 0 10px 13px -6px var(--jp-shadow-umbra-color),
|
||
0 20px 31px 3px var(--jp-shadow-penumbra-color),
|
||
0 8px 38px 7px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z24: 0 11px 15px -7px var(--jp-shadow-umbra-color),
|
||
0 24px 38px 3px var(--jp-shadow-penumbra-color),
|
||
0 9px 46px 8px var(--jp-shadow-ambient-color);
|
||
|
||
/* Borders
|
||
*
|
||
* The following variables, specify the visual styling of borders in JupyterLab.
|
||
*/
|
||
|
||
--jp-border-width: 1px;
|
||
--jp-border-color0: var(--md-grey-400);
|
||
--jp-border-color1: var(--md-grey-400);
|
||
--jp-border-color2: var(--md-grey-300);
|
||
--jp-border-color3: var(--md-grey-200);
|
||
--jp-inverse-border-color: var(--md-grey-600);
|
||
--jp-border-radius: 2px;
|
||
|
||
/* UI Fonts
|
||
*
|
||
* The UI font CSS variables are used for the typography all of the JupyterLab
|
||
* user interface elements that are not directly user generated content.
|
||
*
|
||
* The font sizing here is done assuming that the body font size of --jp-ui-font-size1
|
||
* is applied to a parent element. When children elements, such as headings, are sized
|
||
* in em all things will be computed relative to that body size.
|
||
*/
|
||
|
||
--jp-ui-font-scale-factor: 1.2;
|
||
--jp-ui-font-size0: 0.83333em;
|
||
--jp-ui-font-size1: 13px; /* Base font size */
|
||
--jp-ui-font-size2: 1.2em;
|
||
--jp-ui-font-size3: 1.44em;
|
||
--jp-ui-font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI',
|
||
helvetica, arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
|
||
'Segoe UI Symbol';
|
||
|
||
/*
|
||
* Use these font colors against the corresponding main layout colors.
|
||
* In a light theme, these go from dark to light.
|
||
*/
|
||
|
||
/* Defaults use Material Design specification */
|
||
--jp-ui-font-color0: rgba(0, 0, 0, 1);
|
||
--jp-ui-font-color1: rgba(0, 0, 0, 0.87);
|
||
--jp-ui-font-color2: rgba(0, 0, 0, 0.54);
|
||
--jp-ui-font-color3: rgba(0, 0, 0, 0.38);
|
||
|
||
/*
|
||
* Use these against the brand/accent/warn/error colors.
|
||
* These will typically go from light to darker, in both a dark and light theme.
|
||
*/
|
||
|
||
--jp-ui-inverse-font-color0: rgba(255, 255, 255, 1);
|
||
--jp-ui-inverse-font-color1: rgba(255, 255, 255, 1);
|
||
--jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7);
|
||
--jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5);
|
||
|
||
/* Content Fonts
|
||
*
|
||
* Content font variables are used for typography of user generated content.
|
||
*
|
||
* The font sizing here is done assuming that the body font size of --jp-content-font-size1
|
||
* is applied to a parent element. When children elements, such as headings, are sized
|
||
* in em all things will be computed relative to that body size.
|
||
*/
|
||
|
||
--jp-content-line-height: 1.6;
|
||
--jp-content-font-scale-factor: 1.2;
|
||
--jp-content-font-size0: 0.83333em;
|
||
--jp-content-font-size1: 14px; /* Base font size */
|
||
--jp-content-font-size2: 1.2em;
|
||
--jp-content-font-size3: 1.44em;
|
||
--jp-content-font-size4: 1.728em;
|
||
--jp-content-font-size5: 2.0736em;
|
||
|
||
/* This gives a magnification of about 125% in presentation mode over normal. */
|
||
--jp-content-presentation-font-size1: 17px;
|
||
--jp-content-heading-line-height: 1;
|
||
--jp-content-heading-margin-top: 1.2em;
|
||
--jp-content-heading-margin-bottom: 0.8em;
|
||
--jp-content-heading-font-weight: 500;
|
||
|
||
/* Defaults use Material Design specification */
|
||
--jp-content-font-color0: rgba(0, 0, 0, 1);
|
||
--jp-content-font-color1: rgba(0, 0, 0, 0.87);
|
||
--jp-content-font-color2: rgba(0, 0, 0, 0.54);
|
||
--jp-content-font-color3: rgba(0, 0, 0, 0.38);
|
||
--jp-content-link-color: var(--md-blue-900);
|
||
--jp-content-font-family: system-ui, -apple-system, blinkmacsystemfont,
|
||
'Segoe UI', helvetica, arial, sans-serif, 'Apple Color Emoji',
|
||
'Segoe UI Emoji', 'Segoe UI Symbol';
|
||
|
||
/*
|
||
* Code Fonts
|
||
*
|
||
* Code font variables are used for typography of code and other monospaces content.
|
||
*/
|
||
|
||
--jp-code-font-size: 13px;
|
||
--jp-code-line-height: 1.3077; /* 17px for 13px base */
|
||
--jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */
|
||
--jp-code-font-family-default: menlo, consolas, 'DejaVu Sans Mono', monospace;
|
||
--jp-code-font-family: var(--jp-code-font-family-default);
|
||
|
||
/* This gives a magnification of about 125% in presentation mode over normal. */
|
||
--jp-code-presentation-font-size: 16px;
|
||
|
||
/* may need to tweak cursor width if you change font size */
|
||
--jp-code-cursor-width0: 1.4px;
|
||
--jp-code-cursor-width1: 2px;
|
||
--jp-code-cursor-width2: 4px;
|
||
|
||
/* Layout
|
||
*
|
||
* The following are the main layout colors use in JupyterLab. In a light
|
||
* theme these would go from light to dark.
|
||
*/
|
||
|
||
--jp-layout-color0: white;
|
||
--jp-layout-color1: white;
|
||
--jp-layout-color2: var(--md-grey-200);
|
||
--jp-layout-color3: var(--md-grey-400);
|
||
--jp-layout-color4: var(--md-grey-600);
|
||
|
||
/* Inverse Layout
|
||
*
|
||
* The following are the inverse layout colors use in JupyterLab. In a light
|
||
* theme these would go from dark to light.
|
||
*/
|
||
|
||
--jp-inverse-layout-color0: #111;
|
||
--jp-inverse-layout-color1: var(--md-grey-900);
|
||
--jp-inverse-layout-color2: var(--md-grey-800);
|
||
--jp-inverse-layout-color3: var(--md-grey-700);
|
||
--jp-inverse-layout-color4: var(--md-grey-600);
|
||
|
||
/* Brand/accent */
|
||
|
||
--jp-brand-color0: var(--md-blue-900);
|
||
--jp-brand-color1: var(--md-blue-700);
|
||
--jp-brand-color2: var(--md-blue-300);
|
||
--jp-brand-color3: var(--md-blue-100);
|
||
--jp-brand-color4: var(--md-blue-50);
|
||
--jp-accent-color0: var(--md-green-900);
|
||
--jp-accent-color1: var(--md-green-700);
|
||
--jp-accent-color2: var(--md-green-300);
|
||
--jp-accent-color3: var(--md-green-100);
|
||
|
||
/* State colors (warn, error, success, info) */
|
||
|
||
--jp-warn-color0: var(--md-orange-900);
|
||
--jp-warn-color1: var(--md-orange-700);
|
||
--jp-warn-color2: var(--md-orange-300);
|
||
--jp-warn-color3: var(--md-orange-100);
|
||
--jp-error-color0: var(--md-red-900);
|
||
--jp-error-color1: var(--md-red-700);
|
||
--jp-error-color2: var(--md-red-300);
|
||
--jp-error-color3: var(--md-red-100);
|
||
--jp-success-color0: var(--md-green-900);
|
||
--jp-success-color1: var(--md-green-700);
|
||
--jp-success-color2: var(--md-green-300);
|
||
--jp-success-color3: var(--md-green-100);
|
||
--jp-info-color0: var(--md-cyan-900);
|
||
--jp-info-color1: var(--md-cyan-700);
|
||
--jp-info-color2: var(--md-cyan-300);
|
||
--jp-info-color3: var(--md-cyan-100);
|
||
|
||
/* Cell specific styles */
|
||
|
||
--jp-cell-padding: 5px;
|
||
--jp-cell-collapser-width: 8px;
|
||
--jp-cell-collapser-min-height: 20px;
|
||
--jp-cell-collapser-not-active-hover-opacity: 0.6;
|
||
--jp-cell-editor-background: var(--md-grey-100);
|
||
--jp-cell-editor-border-color: var(--md-grey-300);
|
||
--jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300);
|
||
--jp-cell-editor-active-background: var(--jp-layout-color0);
|
||
--jp-cell-editor-active-border-color: var(--jp-brand-color1);
|
||
--jp-cell-prompt-width: 64px;
|
||
--jp-cell-prompt-font-family: var(--jp-code-font-family-default);
|
||
--jp-cell-prompt-letter-spacing: 0;
|
||
--jp-cell-prompt-opacity: 1;
|
||
--jp-cell-prompt-not-active-opacity: 0.5;
|
||
--jp-cell-prompt-not-active-font-color: var(--md-grey-700);
|
||
|
||
/* A custom blend of MD grey and blue 600
|
||
* See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */
|
||
--jp-cell-inprompt-font-color: #307fc1;
|
||
|
||
/* A custom blend of MD grey and orange 600
|
||
* https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */
|
||
--jp-cell-outprompt-font-color: #bf5b3d;
|
||
|
||
/* Notebook specific styles */
|
||
|
||
--jp-notebook-padding: 10px;
|
||
--jp-notebook-select-background: var(--jp-layout-color1);
|
||
--jp-notebook-multiselected-color: var(--md-blue-50);
|
||
|
||
/* The scroll padding is calculated to fill enough space at the bottom of the
|
||
notebook to show one single-line cell (with appropriate padding) at the top
|
||
when the notebook is scrolled all the way to the bottom. We also subtract one
|
||
pixel so that no scrollbar appears if we have just one single-line cell in the
|
||
notebook. This padding is to enable a 'scroll past end' feature in a notebook.
|
||
*/
|
||
--jp-notebook-scroll-padding: calc(
|
||
100% - var(--jp-code-font-size) * var(--jp-code-line-height) -
|
||
var(--jp-code-padding) - var(--jp-cell-padding) - 1px
|
||
);
|
||
|
||
/* Rendermime styles */
|
||
|
||
--jp-rendermime-error-background: #fdd;
|
||
--jp-rendermime-table-row-background: var(--md-grey-100);
|
||
--jp-rendermime-table-row-hover-background: var(--md-light-blue-50);
|
||
|
||
/* Dialog specific styles */
|
||
|
||
--jp-dialog-background: rgba(0, 0, 0, 0.25);
|
||
|
||
/* Console specific styles */
|
||
|
||
--jp-console-padding: 10px;
|
||
|
||
/* Toolbar specific styles */
|
||
|
||
--jp-toolbar-border-color: var(--jp-border-color1);
|
||
--jp-toolbar-micro-height: 8px;
|
||
--jp-toolbar-background: var(--jp-layout-color1);
|
||
--jp-toolbar-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.24);
|
||
--jp-toolbar-header-margin: 4px 4px 0 4px;
|
||
--jp-toolbar-active-background: var(--md-grey-300);
|
||
|
||
/* Statusbar specific styles */
|
||
|
||
--jp-statusbar-height: 24px;
|
||
|
||
/* Input field styles */
|
||
|
||
--jp-input-box-shadow: inset 0 0 2px var(--md-blue-300);
|
||
--jp-input-active-background: var(--jp-layout-color1);
|
||
--jp-input-hover-background: var(--jp-layout-color1);
|
||
--jp-input-background: var(--md-grey-100);
|
||
--jp-input-border-color: var(--jp-inverse-border-color);
|
||
--jp-input-active-border-color: var(--jp-brand-color1);
|
||
--jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3);
|
||
|
||
/* General editor styles */
|
||
|
||
--jp-editor-selected-background: #d9d9d9;
|
||
--jp-editor-selected-focused-background: #d7d4f0;
|
||
--jp-editor-cursor-color: var(--jp-ui-font-color0);
|
||
|
||
/* Code mirror specific styles */
|
||
|
||
--jp-mirror-editor-keyword-color: #008000;
|
||
--jp-mirror-editor-atom-color: #88f;
|
||
--jp-mirror-editor-number-color: #080;
|
||
--jp-mirror-editor-def-color: #00f;
|
||
--jp-mirror-editor-variable-color: var(--md-grey-900);
|
||
--jp-mirror-editor-variable-2-color: rgb(0, 54, 109);
|
||
--jp-mirror-editor-variable-3-color: #085;
|
||
--jp-mirror-editor-punctuation-color: #05a;
|
||
--jp-mirror-editor-property-color: #05a;
|
||
--jp-mirror-editor-operator-color: #a2f;
|
||
--jp-mirror-editor-comment-color: #408080;
|
||
--jp-mirror-editor-string-color: #ba2121;
|
||
--jp-mirror-editor-string-2-color: #708;
|
||
--jp-mirror-editor-meta-color: #a2f;
|
||
--jp-mirror-editor-qualifier-color: #555;
|
||
--jp-mirror-editor-builtin-color: #008000;
|
||
--jp-mirror-editor-bracket-color: #997;
|
||
--jp-mirror-editor-tag-color: #170;
|
||
--jp-mirror-editor-attribute-color: #00c;
|
||
--jp-mirror-editor-header-color: blue;
|
||
--jp-mirror-editor-quote-color: #090;
|
||
--jp-mirror-editor-link-color: #00c;
|
||
--jp-mirror-editor-error-color: #f00;
|
||
--jp-mirror-editor-hr-color: #999;
|
||
|
||
/*
|
||
RTC user specific colors.
|
||
These colors are used for the cursor, username in the editor,
|
||
and the icon of the user.
|
||
*/
|
||
|
||
--jp-collaborator-color1: #ffad8e;
|
||
--jp-collaborator-color2: #dac83d;
|
||
--jp-collaborator-color3: #72dd76;
|
||
--jp-collaborator-color4: #00e4d0;
|
||
--jp-collaborator-color5: #45d4ff;
|
||
--jp-collaborator-color6: #e2b1ff;
|
||
--jp-collaborator-color7: #ff9de6;
|
||
|
||
/* Vega extension styles */
|
||
|
||
--jp-vega-background: white;
|
||
|
||
/* Sidebar-related styles */
|
||
|
||
--jp-sidebar-min-width: 250px;
|
||
|
||
/* Search-related styles */
|
||
|
||
--jp-search-toggle-off-opacity: 0.5;
|
||
--jp-search-toggle-hover-opacity: 0.8;
|
||
--jp-search-toggle-on-opacity: 1;
|
||
--jp-search-selected-match-background-color: rgb(245, 200, 0);
|
||
--jp-search-selected-match-color: black;
|
||
--jp-search-unselected-match-background-color: var(
|
||
--jp-inverse-layout-color0
|
||
);
|
||
--jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0);
|
||
|
||
/* Icon colors that work well with light or dark backgrounds */
|
||
--jp-icon-contrast-color0: var(--md-purple-600);
|
||
--jp-icon-contrast-color1: var(--md-green-600);
|
||
--jp-icon-contrast-color2: var(--md-pink-600);
|
||
--jp-icon-contrast-color3: var(--md-blue-600);
|
||
|
||
/* Button colors */
|
||
--jp-accept-color-normal: var(--md-blue-700);
|
||
--jp-accept-color-hover: var(--md-blue-800);
|
||
--jp-accept-color-active: var(--md-blue-900);
|
||
--jp-warn-color-normal: var(--md-red-700);
|
||
--jp-warn-color-hover: var(--md-red-800);
|
||
--jp-warn-color-active: var(--md-red-900);
|
||
--jp-reject-color-normal: var(--md-grey-600);
|
||
--jp-reject-color-hover: var(--md-grey-700);
|
||
--jp-reject-color-active: var(--md-grey-800);
|
||
|
||
/* File or activity icons and switch semantic variables */
|
||
--jp-jupyter-icon-color: #f37626;
|
||
--jp-notebook-icon-color: #f37626;
|
||
--jp-json-icon-color: var(--md-orange-700);
|
||
--jp-console-icon-background-color: var(--md-blue-700);
|
||
--jp-console-icon-color: white;
|
||
--jp-terminal-icon-background-color: var(--md-grey-800);
|
||
--jp-terminal-icon-color: var(--md-grey-200);
|
||
--jp-text-editor-icon-color: var(--md-grey-700);
|
||
--jp-inspector-icon-color: var(--md-grey-700);
|
||
--jp-switch-color: var(--md-grey-400);
|
||
--jp-switch-true-position-color: var(--md-orange-900);
|
||
}
|
||
</style>
|
||
<style type="text/css">
|
||
/* Force rendering true colors when outputing to pdf */
|
||
* {
|
||
-webkit-print-color-adjust: exact;
|
||
}
|
||
|
||
/* Misc */
|
||
a.anchor-link {
|
||
display: none;
|
||
}
|
||
|
||
/* Input area styling */
|
||
.jp-InputArea {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-InputArea-editor {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.cm-editor.cm-s-jupyter .highlight pre {
|
||
/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.cm-line */
|
||
padding: var(--jp-code-padding) 4px;
|
||
margin: 0;
|
||
|
||
font-family: inherit;
|
||
font-size: inherit;
|
||
line-height: inherit;
|
||
color: inherit;
|
||
|
||
}
|
||
|
||
.jp-OutputArea-output pre {
|
||
line-height: inherit;
|
||
font-family: inherit;
|
||
}
|
||
|
||
.jp-RenderedText pre {
|
||
color: var(--jp-content-font-color1);
|
||
font-size: var(--jp-code-font-size);
|
||
}
|
||
|
||
/* Hiding the collapser by default */
|
||
.jp-Collapser {
|
||
display: none;
|
||
}
|
||
|
||
@page {
|
||
margin: 0.5in; /* Margin for each printed piece of paper */
|
||
}
|
||
|
||
@media print {
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: block;
|
||
}
|
||
}
|
||
</style>
|
||
<!-- Load mathjax -->
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script>
|
||
<!-- MathJax configuration -->
|
||
<script type="text/x-mathjax-config">
|
||
init_mathjax = function() {
|
||
if (window.MathJax) {
|
||
// MathJax loaded
|
||
MathJax.Hub.Config({
|
||
TeX: {
|
||
equationNumbers: {
|
||
autoNumber: "AMS",
|
||
useLabelIds: true
|
||
}
|
||
},
|
||
tex2jax: {
|
||
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
|
||
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
|
||
processEscapes: true,
|
||
processEnvironments: true
|
||
},
|
||
displayAlign: 'center',
|
||
CommonHTML: {
|
||
linebreaks: {
|
||
automatic: true
|
||
}
|
||
}
|
||
});
|
||
|
||
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
|
||
}
|
||
}
|
||
init_mathjax();
|
||
</script>
|
||
<!-- End of mathjax configuration --><script type="module">
|
||
document.addEventListener("DOMContentLoaded", async () => {
|
||
const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
|
||
// do not load mermaidjs if not needed
|
||
if (!diagrams.length) {
|
||
return;
|
||
}
|
||
const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
|
||
const parser = new DOMParser();
|
||
|
||
mermaid.initialize({
|
||
maxTextSize: 100000,
|
||
maxEdges: 100000,
|
||
startOnLoad: false,
|
||
fontFamily: window
|
||
.getComputedStyle(document.body)
|
||
.getPropertyValue("--jp-ui-font-family"),
|
||
theme: document.querySelector("body[data-jp-theme-light='true']")
|
||
? "default"
|
||
: "dark",
|
||
});
|
||
|
||
let _nextMermaidId = 0;
|
||
|
||
function makeMermaidImage(svg) {
|
||
const img = document.createElement("img");
|
||
const doc = parser.parseFromString(svg, "image/svg+xml");
|
||
const svgEl = doc.querySelector("svg");
|
||
const { maxWidth } = svgEl?.style || {};
|
||
const firstTitle = doc.querySelector("title");
|
||
const firstDesc = doc.querySelector("desc");
|
||
|
||
img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
|
||
if (maxWidth) {
|
||
img.width = parseInt(maxWidth);
|
||
}
|
||
if (firstTitle) {
|
||
img.setAttribute("alt", firstTitle.textContent);
|
||
}
|
||
if (firstDesc) {
|
||
const caption = document.createElement("figcaption");
|
||
caption.className = "sr-only";
|
||
caption.textContent = firstDesc.textContent;
|
||
return [img, caption];
|
||
}
|
||
return [img];
|
||
}
|
||
|
||
async function makeMermaidError(text) {
|
||
let errorMessage = "";
|
||
try {
|
||
await mermaid.parse(text);
|
||
} catch (err) {
|
||
errorMessage = `${err}`;
|
||
}
|
||
|
||
const result = document.createElement("details");
|
||
result.className = 'jp-RenderedMermaid-Details';
|
||
const summary = document.createElement("summary");
|
||
summary.className = 'jp-RenderedMermaid-Summary';
|
||
const pre = document.createElement("pre");
|
||
const code = document.createElement("code");
|
||
code.innerText = text;
|
||
pre.appendChild(code);
|
||
summary.appendChild(pre);
|
||
result.appendChild(summary);
|
||
|
||
const warning = document.createElement("pre");
|
||
warning.innerText = errorMessage;
|
||
result.appendChild(warning);
|
||
return [result];
|
||
}
|
||
|
||
async function renderOneMarmaid(src) {
|
||
const id = `jp-mermaid-${_nextMermaidId++}`;
|
||
const parent = src.parentNode;
|
||
let raw = src.textContent.trim();
|
||
const el = document.createElement("div");
|
||
el.style.visibility = "hidden";
|
||
document.body.appendChild(el);
|
||
let results = null;
|
||
let output = null;
|
||
try {
|
||
let { svg } = await mermaid.render(id, raw, el);
|
||
svg = cleanMermaidSvg(svg);
|
||
results = makeMermaidImage(svg);
|
||
output = document.createElement("figure");
|
||
results.map(output.appendChild, output);
|
||
} catch (err) {
|
||
parent.classList.add("jp-mod-warning");
|
||
results = await makeMermaidError(raw);
|
||
output = results[0];
|
||
} finally {
|
||
el.remove();
|
||
}
|
||
parent.classList.add("jp-RenderedMermaid");
|
||
parent.appendChild(output);
|
||
}
|
||
|
||
|
||
/**
|
||
* Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
|
||
*/
|
||
function cleanMermaidSvg(svg) {
|
||
return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
|
||
}
|
||
|
||
|
||
/**
|
||
* A regular expression for all void elements, which may include attributes and
|
||
* a slash.
|
||
*
|
||
* @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
|
||
*
|
||
* Of these, only `<br>` is generated by Mermaid in place of `\n`,
|
||
* but _any_ "malformed" tag will break the SVG rendering entirely.
|
||
*/
|
||
const RE_VOID_ELEMENT =
|
||
/<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
|
||
|
||
/**
|
||
* Ensure a void element is closed with a slash, preserving any attributes.
|
||
*/
|
||
function replaceVoidElement(match, tag, rest) {
|
||
rest = rest.trim();
|
||
if (!rest.endsWith('/')) {
|
||
rest = `${rest} /`;
|
||
}
|
||
return `<${tag} ${rest}>`;
|
||
}
|
||
|
||
void Promise.all([...diagrams].map(renderOneMarmaid));
|
||
});
|
||
</script>
|
||
<style>
|
||
.jp-Mermaid:not(.jp-RenderedMermaid) {
|
||
display: none;
|
||
}
|
||
|
||
.jp-RenderedMermaid {
|
||
overflow: auto;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-RenderedMermaid.jp-mod-warning {
|
||
width: auto;
|
||
padding: 0.5em;
|
||
margin-top: 0.5em;
|
||
border: var(--jp-border-width) solid var(--jp-warn-color2);
|
||
border-radius: var(--jp-border-radius);
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
white-space: pre-wrap;
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
.jp-RenderedMermaid figure {
|
||
margin: 0;
|
||
overflow: auto;
|
||
max-width: 100%;
|
||
}
|
||
|
||
.jp-RenderedMermaid img {
|
||
max-width: 100%;
|
||
}
|
||
|
||
.jp-RenderedMermaid-Details > pre {
|
||
margin-top: 1em;
|
||
}
|
||
|
||
.jp-RenderedMermaid-Summary {
|
||
color: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-RenderedMermaid:not(.jp-mod-warning) pre {
|
||
display: none;
|
||
}
|
||
|
||
.jp-RenderedMermaid-Summary > pre {
|
||
display: inline-block;
|
||
white-space: normal;
|
||
}
|
||
</style>
|
||
<!-- End of mermaid configuration --></head>
|
||
<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
|
||
<main>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=46d0dd15">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<img alt="No description has been provided for this image" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/VU_logo.png/800px-VU_logo.png?20161029201021" width="350"/>
|
||
<h3 id="Programming-large-scale-parallel-systems">Programming large-scale parallel systems<a class="anchor-link" href="#Programming-large-scale-parallel-systems">¶</a></h3><h1 id="Gaussian-elimination">Gaussian elimination<a class="anchor-link" href="#Gaussian-elimination">¶</a></h1>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=ff0fbd76">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Contents">Contents<a class="anchor-link" href="#Contents">¶</a></h2><p>In this notebook, we will learn</p>
|
||
<ul>
|
||
<li>How to parallelize Gaussian elimination</li>
|
||
<li>What is load imbalance, and how to fix it in this algorithm</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=480af594">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div class="alert alert-block alert-info">
|
||
<b>Note:</b> Do not forget to execute the cell below before starting this notebook!
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=7e93809a">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-julia"><pre><span></span><span class="k">using</span><span class="w"> </span><span class="n">Printf</span>
|
||
<span class="k">function</span><span class="w"> </span><span class="n">answer_checker</span><span class="p">(</span><span class="n">answer</span><span class="p">,</span><span class="n">solution</span><span class="p">)</span>
|
||
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">answer</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">solution</span>
|
||
<span class="w"> </span><span class="s">"🥳 Well done!"</span>
|
||
<span class="w"> </span><span class="k">else</span>
|
||
<span class="w"> </span><span class="s">"It's not correct. Keep trying! 💪"</span>
|
||
<span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">println</span>
|
||
<span class="k">end</span>
|
||
<span class="k">function</span><span class="w"> </span><span class="n">ge_par_why</span><span class="p">()</span>
|
||
<span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"The outer loop of the algorithm is not parallelizable, since the iterations depend on the results of the previous iterations. However, we can extract parallelism from the inner loops."</span>
|
||
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
<span class="k">end</span>
|
||
<span class="n">ge_par_check</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">answer_checker</span><span class="p">(</span><span class="n">answer</span><span class="p">,</span><span class="w"> </span><span class="s">"a"</span><span class="p">)</span>
|
||
<span class="n">ge_dep_check</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">answer_checker</span><span class="p">(</span><span class="n">answer</span><span class="p">,</span><span class="w"> </span><span class="s">"b"</span><span class="p">)</span>
|
||
<span class="k">function</span><span class="w"> </span><span class="n">ge_lb_answer</span><span class="p">()</span>
|
||
<span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"It is a form of static load balancing. We know in advance the load distribution and the partition strategy does not depend on the actual values of the input matrix"</span>
|
||
<span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||
<span class="k">end</span>
|
||
<span class="n">println</span><span class="p">(</span><span class="s">"🥳 Well done!"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=8ad95aa5">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Gaussian-elimination">Gaussian elimination<a class="anchor-link" href="#Gaussian-elimination">¶</a></h2><p><a href="https://en.wikipedia.org/wiki/Gaussian_elimination">Gaussian elimination</a> is a method to solve systems of linear equations, like this one:</p>
|
||
<p>$$
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 \\
|
||
1 & 2 & -1 \\
|
||
3 & 11 & 5 \\
|
||
\end{matrix}
|
||
\right]
|
||
\left[
|
||
\begin{matrix}
|
||
x \\
|
||
y \\
|
||
z \\
|
||
\end{matrix}
|
||
\right]
|
||
=
|
||
\left[
|
||
\begin{matrix}
|
||
9 \\
|
||
1 \\
|
||
35 \\
|
||
\end{matrix}
|
||
\right].
|
||
$$</p>
|
||
<p>This is just a small example with three unknowns, but practical applications need to solve linear equations with large number of unknowns. Parallel processing is needed in these cases.</p>
|
||
<h3 id="Problem-statement">Problem statement<a class="anchor-link" href="#Problem-statement">¶</a></h3><p>Let us consider a system of linear equations written in matrix form $Ax=b$, where $A$ is a nonsingular square matrix, and $x$ and $b$ are vectors. $A$ and $b$ are given, and $x$ is unknown. The goal of Gaussian elimination is to transform the system $Ax=b$, into a new system $Ux=c$ such that</p>
|
||
<ul>
|
||
<li>both system have the same solution vector $x$,</li>
|
||
<li>the matrix $U$ of the new system is <em>upper triangular</em> with unit diagonal, namely $U_{ii} = 1$ and $U_{ij} = 0$ for $i>j$.</li>
|
||
</ul>
|
||
<p>For the particular system shown above, the transformed one is the following:</p>
|
||
<p>$$
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 \\
|
||
1 & 2 & -1 \\
|
||
3 & 11 & 5 \\
|
||
\end{matrix}
|
||
\right]
|
||
\left[
|
||
\begin{matrix}
|
||
x \\
|
||
y \\
|
||
z \\
|
||
\end{matrix}
|
||
\right]
|
||
=
|
||
\left[
|
||
\begin{matrix}
|
||
9 \\
|
||
1 \\
|
||
35 \\
|
||
\end{matrix}
|
||
\right]
|
||
\longrightarrow
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 \\
|
||
0 & 1 & 2 \\
|
||
0 & 0 & 1 \\
|
||
\end{matrix}
|
||
\right]
|
||
\left[
|
||
\begin{matrix}
|
||
x \\
|
||
y \\
|
||
z \\
|
||
\end{matrix}
|
||
\right]
|
||
=
|
||
\left[
|
||
\begin{matrix}
|
||
9 \\
|
||
8 \\
|
||
4 \\
|
||
\end{matrix}
|
||
\right]
|
||
$$</p>
|
||
<p>The most challenging part of solving a system of linear equations is to transform it to upper triangular form. Afterwards, the solution vector can be obtained easily with a backward substitution. For this reason, we will study here the triangulation step only.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=980cb36f">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Augmented-system-matrix">Augmented system matrix<a class="anchor-link" href="#Augmented-system-matrix">¶</a></h3><p>In practice, vector $b$ is added as an additional column to A forming the so-called <em>augmented</em> matrix $A^* = [A b]$. The augmented matrix in the example above is</p>
|
||
<p>$$
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 \\
|
||
1 & 2 & -1 \\
|
||
3 & 11 & 5 \\
|
||
\end{matrix}
|
||
\right]
|
||
\left[
|
||
\begin{matrix}
|
||
x \\
|
||
y \\
|
||
z \\
|
||
\end{matrix}
|
||
\right]
|
||
=
|
||
\left[
|
||
\begin{matrix}
|
||
9 \\
|
||
1 \\
|
||
35 \\
|
||
\end{matrix}
|
||
\right]\longrightarrow
|
||
A^*=
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 & 9 \\
|
||
1 & 2 & -1 & 1 \\
|
||
3 & 11 & 5 & 35\\
|
||
\end{matrix}
|
||
\right].
|
||
$$</p>
|
||
<p>With this new notation, the goal of Gaussian elimination is to find the augmented matrix containing $U$ and $c$, namely $U^*= [U c]$, given the augmented matrix $A^* = [A b]$. These are $A^*$ and $U^*$ in our example:</p>
|
||
<p>$$
|
||
A^*=
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 & 9 \\
|
||
1 & 2 & -1 & 1 \\
|
||
3 & 11 & 5 & 35\\
|
||
\end{matrix}
|
||
\right]\longrightarrow
|
||
U^*=
|
||
\left[
|
||
\begin{matrix}
|
||
1 & 3 & 1 & 9 \\
|
||
0 & 1 & 2 & 8\\
|
||
0 & 0 & 1 & 4\\
|
||
\end{matrix}
|
||
\right].
|
||
$$</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=94c10106">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Serial-implementation">Serial implementation<a class="anchor-link" href="#Serial-implementation">¶</a></h3><p>The following algorithm computes the Gaussian elimination on a given augmented matrix <code>B</code>, representing a system of linear equations. The result is given by overwriting <code>B</code>, avoiding the allocation of an additional matrix.</p>
|
||
<ul>
|
||
<li>The outer loop is a loop over rows.</li>
|
||
<li>The first inner loop in line 4 divides the current row by the value of the diagonal entry, thus transforming the diagonal to contain only ones. Note that we skip the first entries in the row, as we know that these values are zero at this point. The cells updated in this loop at iteration $k$ are depicted in red in the figure below.</li>
|
||
<li>The second inner loop beginning in line 8 subtracts the rows from one another such that all entries below the diagonal become zero. The entries updated in this loop are depicted in blue in the figure below.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=e4070214">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-julia"><pre><span></span><span class="k">function</span><span class="w"> </span><span class="n">gaussian_elimination!</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
|
||
<span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="n">m</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">size</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
|
||
<span class="w"> </span><span class="nd">@inbounds</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n</span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">m</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">t</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">t</span><span class="p">]</span><span class="o">/</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">k</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">n</span><span class="w"> </span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">m</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="o">*</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">j</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span>
|
||
<span class="k">end</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=cc6ce65e">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div>
|
||
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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" width="300">
|
||
</img></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=3763b000">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div class="alert alert-block alert-info">
|
||
<b>Note:</b> This algorithm is not correct for all nonsingular matrices: if any diagonal element <code>B[k,k]</code> is zero, the computation in the first inner loop fails. To get around this problem, another step can be added to the algorithm that swaps the rows until the diagonal entry of the current row is not zero. This process of finding a nonzero value is called <b>pivoting</b>. We are not going to consider pivoting here for simplicity.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=fbb3d1eb">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>You can verify that the algorithm computes the upper triangular matrix correctly for the example in the introduction by running the following code cell.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=eb30df0d">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-julia"><pre><span></span><span class="n">A</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Float64</span><span class="p">[</span><span class="mi">1</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="mi">11</span><span class="w"> </span><span class="mi">5</span><span class="p">]</span>
|
||
<span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">Float64</span><span class="p">[</span><span class="mi">9</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">35</span><span class="p">]</span>
|
||
<span class="n">B</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">A</span><span class="w"> </span><span class="n">b</span><span class="p">]</span>
|
||
<span class="n">gaussian_elimination!</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a7d6f90a">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Complexity-of-the-algorithm">Complexity of the algorithm<a class="anchor-link" href="#Complexity-of-the-algorithm">¶</a></h3><p>The number of operations of the algorithm is $O(N^3)$, where $N$ is the number of unknowns in the system. Intuitively, this makes sense as there are three nested loops. However, the length of the loops is not equal to $N$. In any case, it can be proven that the total number of operations is still $O(N^3)$. The actual proof is a bit challenging and it is not discussed here.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=39f2e8ef">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Parallelization">Parallelization<a class="anchor-link" href="#Parallelization">¶</a></h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=1b1a6469">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Where-can-we-extract-parallelism?">Where can we extract parallelism?<a class="anchor-link" href="#Where-can-we-extract-parallelism?">¶</a></h3><div class="highlight"><pre><span></span><span class="n">n</span><span class="p">,</span><span class="n">m</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">size</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
|
||
<span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n</span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">m</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">t</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">t</span><span class="p">]</span><span class="o">/</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">k</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">n</span><span class="w"> </span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">m</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="o">*</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">j</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="k">end</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e52c4b38">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div class="alert alert-block alert-success">
|
||
<b>Question:</b> Which of the loops can be parallelized?
|
||
</div>
|
||
<pre><code>a) the inner loops, but not the outer loop
|
||
b) the outer loop, but not the inner loops
|
||
c) all loops
|
||
d) only the first inner loop</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=078e974e">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-julia"><pre><span></span><span class="n">answer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"x"</span><span class="w"> </span><span class="c"># replace x with a, b, c, or d </span>
|
||
<span class="n">ge_par_check</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=1169c86e">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-julia"><pre><span></span><span class="n">ge_par_why</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=74491f64">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Data-partition">Data partition<a class="anchor-link" href="#Data-partition">¶</a></h3><p>Let start considering a row-wise block partition, as we did in previous algorithms.</p>
|
||
<p>In the figure below, we use different colors to illustrate which entries are assigned to a CPU. All entries with the same color are assigned to the same CPU.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7460b0af">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div>
|
||
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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" width="250"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=3ebddda1">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Load-imbalance">Load imbalance<a class="anchor-link" href="#Load-imbalance">¶</a></h3><p>Each CPU will be on charge of updating the entries stored locally. However, this algorithm is a bit different than the previous ones. At iteration $k$ only a subset of the entries in the matrix <code>B</code> are updated, i.e. only the entries in the bottom right block <code>B[k:end,k:end]</code> are updated. This block is illustrated in a darker color in the next figure for $k=6$.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=d083cd53">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div>
|
||
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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R8m1iIiIiEhK1C1ERERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlHVkH0M+MK4ADso5DREREcus37hyRdRAileQiuTaz0TBvCqxuWcciIiIiefXyamZrjXL37qwjESkn8xkazfgzLJuOdb8Vn6TkWkRERJLZ646PuwfGzHHnoKzDEUmSh+R6HrB6pkGIiIjIUDLHnRlZByGSJBfdQopNfwusu2nWUQz0r799w7fZ+ySztvasQ0n00I3n9K27+X7tq66+YdahJHr2wStoaxtVWG/z9+TyIdqlC17k6X9fVtjyXZ/PZXwA/7rmNN9qjy9be8eorENJ9NDNP+xbZ+M92ietkcMvMDDnkb9S6O3tmzn7gFx+iVcsfZX//PNnvtUeX8rtHbx///1033K3z1nHqHFZh5Lo4VvO65v+lne2T5m+ZdahJHrhP3+ne9mivlnbHJTLY7Cvt4v7rz/D3/ruk3N3DD73EMx9JusoRGqTu+R62gyYvXvWUQx0//XnsOW7TqStPZfnRJ6892eFWdts3r72RvlMrhe/fi0do8YXZu+ez+T61edf4cXHf+Kzd/981qGU9cA/vu9b7Po56xydz+T6qft+3jdz9sz29TbPZ3K9fMmN9HUvK8zePZ/J9aL5b/DM/T/22bvnN7l+8MYf+uY7H2ujx+czuX7mgV8WZmwxrX39rfKZXPd03crSBS/0zd49n8l1T1c3D9/yA5+9e/6S66ULlVzL0JHLREdEREREZChSci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISJdciIiIiIilRci0iIiIikhIl1yIiIiIiKVFyLSIiIiKSEiXXIiIiIiIpUXItIiIiIpISc/dsAzDmAav3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Ax2jxhfW3mjPXCY2o8dOpqNzbGHtjfbM5Y8eAIZPf8tu1jl6QtaRJOoYs0rflOmzc3sMvvDYNfR1L+vL6zG4aP4TtHeM8bU32jN3ic2brM2nz9rFRo+ve1jbQdExakLf5OlbtuX1GHzlqZtpa+voy+t5pqdrMZjl8hic83DWETQmmtnwmeg17LkzB5iTdRxZy+WPjIiIiIjIUKTkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUqLkWkREREQkJUquRURERERSouRaRERERCQlSq5FRERERFKi5FpEREREJCVKrkVEREREUtKRdQBxLz15E3f95eqswxigr2c591z1FbD2rENJtGzhS+2P3HouLz5+XdahJHrl6VswrP2utnzuv+ULXmTZopfa7vrLCVmHUlZv9zK79+qTaesYnXUoiVYsernjibt/wSvP3Jp1KIleevx6MNrz+hl3LXmNrmWvW17jA+jrXWH/uuYbtI8am3UoiZa8/mz7f/75E+Y/f3fWoSR6+Ykb6Fq2oCOvn3Ght5tCb1cuj8G5z7wX2CnrMERqkrvkerVXnitsvvD6vqzjiHumr9C52b3/6DGzrENJNLerq2ODZx4prPH8C7nbdwDLl81tb7c22/ze63uyjiXJ633LbH53d0de4wN4rrfQuel9N/d0WD5vOL20dHHHek/eX1jruWdzeQwuXvZ8e4e12eZL8vkZL+hbzktdKzrzfAzO6e7u3PiBm3tHW4dnHUuS+SuWdcx8/onCuq+8mstjsG/Fi+0rCj25PQ/2eoE5PT25PAZXLN+m/VXdbZchInfJ9S7jZ7Udv9p7cvcFumrxw37qtP0685rY/Gv5nJ7/N2n7zp3GzcplgF+bexVj2zp6T1h9786sY0ny0IqXebJrXt9p096Ty/gArln8SOHk1d/dOa5tVNahJHpgxYvdR07adtTu4zfK5TH4nVevZUVfT8+p0/bL5Wf8XPfrPLzipUKej8FrFz9W+Mpqe3dMas9ny/VBc17pOWzVt3XuM2HTXB6DZ7/2D+b2LOo+bdp7cvklXlro5volj+XyGDxt3kwe78o6CpHa5PIEJCIiIiIyFCm5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlCi5FhERERFJiZJrEREREZGUKLkWEREREUmJkmsRERERkZQouRYRERERSYmSaxERERGRlHRkHUBcl/exsLAi6zAGcGBRYQXtls/rkQLO0kJXLvcdQJf3YAVyG98S76JAIbfxQTgGFxe66KGQdSiJChRseaEnt/uwq9BDd07PLwCLvYsCntv4ABxnUWEFZpZ1KIl6KeT7PFjoo4tey2t8ywvdQD7P0130Zh2CSM3M3bMNwJgHrN7/flzb//mEtlOyDSrBosKKtlXaxuQzqwGWFbrbOq3dO609d/sOYEmhywxsfNvoXO7DXi/Y4sIKm9w+LpfxASwudLVNaBvlhuXyM15W6G7rsHYfldNjcGHfcuuwttweg330saivqy3Px+DSQnfbuLbO3B6DSwtdbZ3W7qOsI6/xmYNNyOkx6LgtLXTnMr7FhTNteeHjxVd1c9yZkVlAIhXkruX6g5O2teNX+3zumkXe9tQZfvP6n23ryGnL9XueO6/nK6u/u3OncbNyt+8Avjb3Ksa2dfSesPreuTvmAB5a8TJfeOUPfdfMPK4961jK2e6pMwvXz/x027i2Ubn8jA+Yc0H3/0zdbdTu4zfKZXzfefVaVvT19Jy6xn6dWceS5Lnu1znqxYsLN6z/mXyeZIB3PPW/hatnfLJtUvvYXH7G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" width="250"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e341fda6">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>In this particular example CPU 1 will not have any work to do at iteration $k=6$ and it will be waiting, while other CPUs are computing. In general, CPUs containing rows previous to row $k$ will have less work to do than CPUs containing rows after row $k$. This will worsen as the value of $k$ increases. At some point, only the last CPU will have work to do and the others will idle.</p>
|
||
<div class="alert alert-block alert-info">
|
||
<b>Definition:</b> *Load imbalance*: is the problem when work is not equally distributed over all processes and consequently some processes do more work than others.
|
||
</div>
|
||
<p>Having processors waiting for others is a waist of computational resources and affects negatively parallel speedups. The optimal speedup (speedup equal to the number of processors) assumes that the work is perfectly parallel and that it is evenly distributed. If there is load imbalance, the last assumption is not true anymore and the speedup will be suboptimal.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=51498a44">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Fixing-load-imbalance">Fixing load imbalance<a class="anchor-link" href="#Fixing-load-imbalance">¶</a></h3><p>In this application, is relatively easy to fix the load imbalance problem. We know in advance which data is going to be processes at each CPU and we can design a more clever data partition.</p>
|
||
<p>We can consider row-wise cyclic partition to fix the problem. See figure below. In this case, the CPUs will have less work as the value of $k$ increases, but amount of work will be better distributed than with the previous row block partition.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=b90252f1">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div>
|
||
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqgAAAJJCAYAAABmoMV7AAAACXBIWXMAAB7CAAAewgFu0HU+AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzs3Xe4HGXZx/HvfU46LSSBECB0pGpoggpIUwSVooCogIiK2EVAFFBBBF8QCyiK2BBBOtJbkN47SG8hBAKkh/TklPv945nNmZ2zvc2E/X2ua6/szJlyZ3d29t6nmrsjIukxs5nAyrlld7cUw2kbZrYKMDW26iV33yiFOMYCjwCjY6ufAHZy97mtjkdkWWFm3wV+H1t1srufmFY8WWNmA4HVgSFABzAPmOLuSyrY9wjgHCD+fXSCu/+yGbEWMqBVJ6qVmZ0BrFhikyXAfMILvwSYBLwAvOjuC5sfoYhIbcxsKPAf8pPTx4GPF0tOzWwEMD6x+gR3v6U5UUqzmNlfgS1jq+5w9x+mFY8s28xsAPAp4NPAjsD69M/zlpjZ9e6+X6ljufu5ZjaI/B8AvzCzJ939xkbGXUzmE1TgYGC1GvbrNbOngGuBK9396caG1Vhmtg2wf2zVPe5+Q1rxSHszsx0IN7mc/7r7f9OK5z3sd8A2seVJwCfdfWaJfQYCWyfWjSi2cVSK8ovYqjmtLAV5rzKzLYDPx1Y94O7XVHmY95H/Xr5ed2DSdqJE8gjgx4QS01IGAZtXclx3/4OZrR4dF0Ip7IVm9gF3f7PWeCu1LCSoteog/DLdEjjRzG4CTnL3h9MNq6j3Az+KLQ8ElKBKWrYh/3pcBChBbSAz+wTw9diq+cDe7j6lwacaQP57+RagBLV+m5L/uv4RqDZBFamLmW0G/BsY16RTnEC41veOllcG/mZme3qT24guiwnqXKA7trwc4RdBOXsCnzCz3wA/qaQNhohIM5jZ8sDfyG/f9UN3fyqlkERkGWNmuwJX0b8ZpAP/A+4DpgBzCCWrawMfreYc7t5rZocBT9NXOvsJ4CvA32sOvgLLYoL6KXe/J7nSzIYTmgJsAGwF7A58COiMbdYB/BAYZ2afdff5LYhXRCTpWGDN2PJ44M8V7jsL+Hhi3TONCEpa7mhgeGx5arENReLMbCtCif3ysdVdhKTx/9x9UpH9OgklohVz95lm9lXgRvp+VJ9qZpc1syPnspigFuTus4HZhA5S1wMnm9l6wDHAV8kvZd0duMbM9nD37n4HExFpEjNbk5CY5HQB36m0uiyq/VFzi/cAd3807Rhk2WNmKwCXkZ+cTgP2cfcHSu3r7j2E0tCquPvNZnYlfX1lRgPHAcdXe6xKdTTrwFng7hPc/VuE9nTPJv68G3BG66MSkTZ3DDAstnyuu7+cVjAissw5hdBDP2cWsEO55LQBjiOMlpTzXTNbudjG9XrPlKCW4u5PR72Sbwa2i/3pe2Z2ubvfX+mxoh6xY4G1gFUI44stJnQieQd4wd3nNCz4OkS/stYD1iC01R0KLCS0450ATGj3EuSolP39hOpWByYDD7n7Ow06/kbR8VcHegml/P8Dno1+ydZ7/EGEa3EsMIq+93gR8DbhepxX73kaycxyHRjXJfwK7wRmEHqwP9So9uFRL+tNCE1/FkfneMLdX2rE8WuMaWVCjU7OQuDklMJpiKiX71aE628k4ctyOuG9bHSHr6pFQ+/k7tmrEu7ZSwiv/RTCZ+Td9CKsXzSW7haE76ThhNK0twkjCzSlKVtUE7AV4d7ZSWie8JC7T2zG+SQws/WBb8ZWOXBwK+5r7v6Kmf09dv7lo+dN6XTZFgkqhCYAZrYvYQDs3LBVHcBvCW1VizKz/YFdCSWx4yjTKcvMniE0XP6Du08rsd0Q4N5ocWTizweZ2U4lTnObu8d7kMa//LYFPgisUypOYLGZ3UboAXiJu/eW2b5uZnYnfdUSve6+bRX7fgw4LbbqKnc/tcT2vyQ058j5rrs/EP3IOIzQgzo5XA9Aj5ndARxTS6eVqI3P14DvUHw4j6lmdjlwVg3H/yKwE+E93pww4kOp7Z8kjLX5h6gpTLHtRgK5sTRXTfz562b2aYq71t1LJlpmti6hR+jehC/SQuab2TXAL9z9hVLHK3KOoYTq869S5Po3s4mEa/7Sao/fAIeRXy13cal7RDHRtbNubNUe7j49sc1vCR0ikjVlq5hZuarl7Ur9gIoNa/MVwj2x0OQSbmZPAL8GLq3k/mJmZwI7xFZ9xd3/F/v7KsBngJ0JSedQwo++J939mNh2+wIfI3xGxgGDy5z3ecI9+/elkurox1VuJJjk0F6fM7NS3yX3uPsPEsc7Ajg8turX7n5JqVhj+w4g3GeOICSnhSwys9uBU6ssiDmP8MM6Z393nxj9/78IfJtQ2NPvfY+urR+7+22Vni8NZvY94EuJ1ae5+xVpxFOF75N/z7+uVeOSRv4AfIO+9/7bZnZ6Iwpc+nH3TD8IvwI99tixzuMdnDhe2WMSSryS+1TymAV8ocRxh9V4XAcuL3C8res43sPAWi14P2fHztlT5b4HJGI+t8z2Fye2/wShacdLFb4mS4DDq4xxA+CpKl73nuixdF0F55hY43uca6NU7Lir1XH9/L3EcTsI43AuruJ43cCRVb72HyGMI1npOboSyy+24Pp/NHHOLWs8znOJ44wpsM01dbyfA0qcewfglSqPdycwooL/1/WJ/T4SrR9JKExYVOT4ExPHebjG//e7wKFlruVaX9PrChzvpMQ236vw/d+E0DGu0nP3AucDQyo8/v2J/TcmFORU+l3YQygQaPbn6buJ8/68wv2+Fb0mVe+b5oOQmM5MxL11CnHcmohhl2ac5z3dBrWIiwlf8HEHNelcwwmD2jbr+I30QeBuM6tlUoRlxTGE3tIbVrj9QODPZlZyxo0cMxtHKBH/QBUxddC6tuCjgCvMbO+yWzZIVEtwKfAT+tc8vEmo0XiacNON6wR+Z2Y/rfA8exBummtVEV5La5DMLDko+1Pu/kQrY6iXmR1AeJ3XT/xpDqGd/2P0/UiI2wm4J2p2VO05P03o/PoDypSENsCKwHnRsDqZZGYfBO4BNivw517Ce9FvN0Jp4U1mVmpmxmKOAu4mv1S1lA7gTDPbpYZzNVXUG/1s8kt/T/JlY4rUnYhNiw287O6PpRDHPxPLny+0Ub3apoo/x917zOwS+mZGAPhkhbvPJ9wY7iV8qU4gtOccRLho1iIM/3IIoeoJwgf1D2Z2q7snhxDpisXRbyYpSg/U/2KZWF8nlFo8RChteZtQgrU8oWpqc+ALhOnQctYmVMcdXObYy6qPxZ4vBm6LHrnhODYglNJuFduuAzjXzO509xnFDmxmKwFXkz9lJYRr5d+EkoeZhCRxdWAjwnVXsnlJGXMIXxr3Ea7HiYQpfwcTrsd1CKXGX6Tvi31A9P+5y/u3u5tL3/XYbyYpSvcc/1+R9WeTf13PAX4DnOfub+RWmpkR2qX+mPAe5JxoZve4+53FThy1ybqU/I5HTiiNu4LwWXmX8N6sSfhi35vCX/DNtHti+domn+9fhJKwfjNJUb7NWL/qeDPbHriI/O+N64FfAfd7rIrPzEYREqKf0jeM0qbAnwj3x0qdSLinFmpCUIn5hM9H7p79KuH/P5BwHxxLuC8cQminT3SuM83sFnd/K3E8p+8z0m8mKUoP1P9qjf+HpaImDteQ3yRsAaF0+RLgeQ/jVg4hfIa/RWgSkbMzcC7h3l+NeDOEHsJ3y82Ee04v4QfLZ8m/n3UQZkor1vyg5czsEOAv5F9PJ3qZ5knRvutS+3VYia74PbGIZJO4vHtI1HxtU0ITreGEdtYzgee8RPOuGtxIqOXK3QuS97bGSLvIuoKi5IZW8UfH/Bj9qyRGl9j+Z8BewOAKj78pocNU/PhHldnnsMT2v6nh/7Ue4Yvo/VXsc3TivN3AKk18P9Os4nfCzfwMYNUi+xhwJP2rf35b5lz/Smy/CPhihdfK/Pi+FexzKmHiiYEVvm5bEZqbxOP7Wpl9jkxsf1IN7/UXE8eYAGxUwX4nJvZ7oMS2RkgM4ttPB3au4DwfT+zX1Cr+AtfjNnUcq2wVf2zboYltJ9dwvpUJP+TiVcbfqfD6TlZJjiuxfbKKP/6YRGiDvjN9nT83it7HLyeOczywL5VXab+PUKIfP9/xVV7fZ9fwup6UOEbJKn7gygKvyYZl9jmUcF+P71e06Vm0T7KK3wkFKn8D1i6yjxX4/ziwbRM/UxVX8QOfK/A6/KSKcy0pcW024vFcBTFcntjnS4QCsgMJPxjmlzj+E4RaiIo+ExXEcnvi+Gs2/P1t1oXTwAuwGQnqmAJv3s4NjvvQxPFvLbN93QlqHbHekTj3wU08V5oJ6gPA+yo8168T+04HBhXZdmMS7UiB/ar4f+V9gTfpdU/eyK8ss31dCSrhl/WE2P7zgE0q3NcIJV5lv+QIpbzx7RZTYZssQket+L7NTlDj7WPnAB11HKvVCepPE8f4RRX7fjmx799KbFsoQZ1J6BhS8PPXwPfnwMR57ymzfUsTVEKtV/yH8xIqLIwgNLGJn+d5wEpsn0xQn63kcxV9dpNtY49p4ntWUYJK+LGSTDBPqPJcWUhQk22/f00oma/mPBNoTB71s8RxD2j0+9uObVBx97cJvwbjklWz9UpW363T4OM3UrJaap00gmiBk7zyoThOIVR554wkv4lA3NHktyO9zN2vrCG+Zmr19bgf+b3Mz3D35yvZ0cPdLzm6QXLmpJwfJpbP8HTaZJUUjS4wNrbqf96CUTMaIaou/k5s1WuEz0el/k3+DEnVVAfeBXzA3c/y5k9PfS3hizZnnSafr1rfJr+K+S/uXumA67+irykThB/VxT5ThRxQyecq+uxelVhdTZv8hjOzTxKaAMV7vh/vJUaAybBkG/ujCbUJ1VgXGB+NTlSP5Ag3G9V5vH7arg1qzDzyGxtX3Xi/FHefZWYL6WuLWmxYnSx4O7E8KpUoMsTDsGQ3k98ecltC25uloraT+yR2/12Tw6tFsi1ds6/Hz8ae9xDafVXjjsTyh5MbRMNixYck6iIMgZJFyfZrVQ9flqLtyR927B/uvrjSnd29y8zuo68t5FgzW8PdJ1ew+/Hu/mYVsdbM3Rea2Wz6vheyds9O9pX4Z6U7uvsSM/s3YaD1+PHGV3iIan5MJSfFSQ6h2DJm9nFCs4h4B83j3P20IruU8iGa2wZ1Uak/mtkwCg8p6ITawesIo4S8QWjKtiLhu3wcoUY33rdiCPBvM3uxih85Scl+B9UmymW1c4Ja14VmZoMJ7as2JZS+rhI9coNVjyK/x2nJsSqbKeqw8H5CJ6BVyY9xFP1/laUWa8bcS36COq7ANpuT/0U22d0fbGpUBUQldJsShp8pdj3GNfs9jne+eymqtaiYu083s/n0dVxZs8BmO5Nfcn2fZ2Bg+CLWTiynNllADT6aWL6zhmNMTCyPJUyK0TLR2K2bED4nYwifi9H0fT5GEr7UczJzH4wGxY/fp+cQRkyoxu3kJ6gfqTeuImYllhta+FMpM9uZ0HF1SGz1j9z9V7Ucz90fb0RcdSg0+sLFwMleeszou8zsbMJ7/wv6cp9BhDbF2xXbsYyJhEKB3OckeY+rW1smqFGp1/KJ1WVnEjGzNQjtlD5HGC4ms69fNHPWgYS2N4W+3KW85EgJhV7H5ED/LateNrO1Cb2IP0dInjtbde5SopmFxsRWjTazW2s4VDxBSA6KDv1f+yzPa578clmWZi5Kvs6nRbVD1UgOS1Xo/Wy46Fr8XPT4IBm+Z5eRnPDjmag6vRrJkrJik4jUK9lbvJmljgWZ2UcIJYrxkT2OdfdleXrzQon+UV7BrIdRc6JTzWw58n+kbGtmW9fSLMrd3czepa/wo5bhy0paVj+s9RpD//970WqkqGj9OMI4mkOKbZcFZrYJoZpzt7RjeQ9IDitV6AOYLJl8vUmxLBWNJfkz+s8okhXJ12QExdvvVmq5Auta/trXYVhiORPTIVcoWUW7fQOOmXw9GipqN3ssYUiooWU2XxYk5ztPDllYiWmEqvpcrcNQMxvq7tX+2Cgn1amVzSzXFCteCPVDd/91SiE1SqFpyStuahM5mTDLXrzJzn7UXrAST1Ab/plu1wR108SyE3oe9hMlA/+l//hjOW8ResVNJNwAZhISm+mEmTtadnOMqjRuLHLObuBlQpxvE+agnkGId1NC8i35knNYJ0vdoX9JUFMTDzMbQahiLTZg9huETiyvk389zgAua2ZsMS0pHStwniwnfckftnMLbpVNzXg/m1aqFhUo3EJ+++S4twk9nycREr0ZscdfgJWaFVsdkglq1dePh/FR55H/Q3sELW5q0WTjCD37k+9htaXNWZRsOgFVFpi5+yIzu54wRXFOPZ3Y4j9GGp7rtGuCumti+Ul37/eBj5oCXEH/5PRJwoDT15dqW2dm/6g30EpFJafXkn+RdBN6L55HGEi74C/lBvTme69KfuAKJUAt+wyZWSeh2iqZnD5MuB5vLtYGM5pDu1WSXwZPEEqz6pEcdQOWrftXsqRjWS7VO5T+ne6qVWvHjEpcQv/k9GnCZ+S6Up2zzOyPTYyrHsnSs1qv/eR+hUrllmXJDqs5Z5jZTHc/r9YDm9nXaO6sf7PdvVQhwhzyS8Ah/Nioqn0/YYixuHpmj4zfx6otzS1rWbrBN0T0RZ2cRePqIpt/kv5DopxKmHmip8D2afoF+W1UpgCfc/e7U4qnEmZmVkNbqlYZnlguNJNUMmktVBXdKAeS37HBCQOSn56x1zA5bSnuXmoWqlol23E287Wv14LEchZL6YpJXvfPuXsm2/ua2ccIk6rEnUEYDWBZTsbq7ngUzTKUrIYtVCr3XvAYoXRvp2jZgL+a2Wx3Tw6DVak/0dwmVc9TopYrKgGfTX6NRvI7qhLJ+3Mtx8iJ38eS97i6teM4qAeRP75dN6EqvpBkyeK/3f0nLUpOK+7wErW3+nRi9SEZT04h3DSynFRsnFieVGCbZIeAZnZIS16Pf3b301qUnFZzr5ieWF6rSSW4yQQ1y50Bk81FUunZHKm2M13y/Vy34FbZkPyMXOnux7YoOW1mJ8VpieVa3oN1EsuzWzC2bBruJfTB2JtQe5PTCVxsZska1GVJsvSzWFOvUpI/UvoVKFQhnqA2vO1xWyWoZrYaYcDiuEvdvVjniuSwQrX+8qrF4PKbLLVxYvu5lJ43PU3J5L7hPf8a6EOJ5XsLbJPs6Z9s39xIrbwek0lvxddj1Owl3ulwJP17gjdCcmiVZr729UrOsZ0c2q2Vqrm3ADySWK5mgPdWS/Oe3cwOtE+SPxbpRlFb22pskVjO3IQWDXAPsIe7v+vucwhTQr8S+/tg4Goz+2Aq0dUv+VnsNz50BcYmlsuOAlCIma1K/jWfvMfVrW0SVDMbTqjKj7e3mEf+kAtJyYbpExodV0yyfWg1N7t+cWasyjcuWSWe2iDOpUTDceybWH1ngU2fSCxvEo1Z2AytvB6Tg0ZX++WbHGj/a3XEUsyTieVdomrMLEq+V4XG1G2WxeT/4Kg2QU2+l/ubWfJazIo079nVvq4Vc/fZhOltcwbQv9asnOT97P66gsqmO9x9aW1F1CZ/d/Lbaa4A3Bj126iYuw9yd2vio5If2LcklveOvquqkRyFo1DBSyWS97CGf9baIkE1s00Jb0JyQNpj3b1U1p+slqt4hqXoi7Ka1zeZuK1exb41xxlp2o21gGQnnm2q2HdM+U0a5ofkV8M+4O7PJTdy9+nkz6hhhGE8KmJmA6i8arCe97na97ie6xFC57y4r5jZllUeYykzKzSCwuPkN7FYifyJFcpp2XUflebEhwZq2fSP0RiI8U6gQ6PRICr1EPkD7a9MGK6mJkXey0ap5549gOr6ZSQ/I2tUsW8tLk8sfyfqyFuWmY2lbyavYsd7T3L314A9yL9XjCJM99nwweWb7L/kJ9ujgG9WunOUCyUnaLihxliSCerLNR6nqPd0gmpmY83sHEIp12aJP//d3c8pc4jkL4KKvvzMbHPgQaobFyw5s8wOVXyJvEZ+9c8aZla26N+Cw4Fyr0MjJTtXfKNc+0QzW8HMzgLObF5Yeefbnf4l66UGeL4gsXyUmSXbrxY6zyaEUoxKmzkkr8eKRl8ws63pXzVUTvJ63K3KX+o3EhLInAHAtWZW1XR4ZraqmV1IGDomj7svov+X7KnRzGnljrsDtc2IVI/4DGOrm9k6LTx38ssj2ZGoKHfvApJTQ37HzPq9J6WYWYeZfYVQDdsstX5GNgbuo7oOI8nPyHZRtWeznEt+T+kdgcPL7RSN/nEO+T2ub69jistljrv/j3DNx0u91yQkqc18zxoqakudnM75FDNLNkfrJ3YdxH/U3ODuyalpK5UsiX2oxuMU5+6ZfhB+LXjssWPi7x2EX/SrE+aa3Z8wiPmDhPaOXuDxD6CzgnN/I7FfD/AtwIpsvz7wZ8KQOMlzzi9zLiOULsb3uQgYUGTbMYl1Dyb2fRXYrMi5Ogltcx4p8vr8sYnv56cKnQ8YXGDbVQglmdOKxHlumXNdnNj+PuAwYKUi2w8l9IpflNjvxmLveSzOmYl9JgG7Fdl+Y8J4i0sK/b9KnOfYxLZdwJdKbL8RYb7uQp+Dt8u8doMIpW55rzfQUWDbDmC1Aut3oK96OfeYDXy90Pud2HcLws10QbTfcUW2ez/9P29PAuOKfG62JczN3VvgNXmxWdd9kffv+3Uc67nEscaU2f73ie3fBNYqsu1qyes9uh6S9xgn/Dhbp8y5c6U8L0f7TCix7fWJ43+kytfly4n9e4Ejk/+f2PbrAGcX+Sz2VHC+NxL7XAEMLLJtv/cIOCmx//fKnO/UxPbdhO+pYv+/lQi1GfF9lgDbljnP/Yl9Nq7iPdgsse89TfxMfTdxrp+X2f7T9L9fPE6R74QsPggFXxMS/4eZwKdK7DOCMAxlfJ+FwOY1xjCUUFuRO9aUYtdgPQ+LTpZZZvY29Y3TFbeYUDJ2plfwH48aob9E/6qbV4EHCDenxYTkeGtKdwRZ4O4lS6DM7HT6jxf5PDCekKgvT0iCtwcedvcDYvvuDVyT2LeHUFrxImEw5uUJvxo/Rv5MEkl/cvdvl4q1VlFp6QvAhok/TQHuiv4dFv19e0pXf//F3Y8oca6LCVOBJi0iJKsTCB/sYYResbvQf1SBycBW7l5y5hYz+yZhGJKkFwg/BGYREtkt6T86QB53L1htF7WjfoX+7XZfJIyFOonwhbUGIRErVY38jruXbDJhZn8Gkq/v08CthOrqFYH1CHO13+zu/Zo2mNkRhB9tSVMJ1VWPE36AdBCuzXWAT9C/R/7x7v5/ReL8HSEJSXqUMAHHHMJndFtKd056yd03KvH3upjZNuSXZN/p7rvUeKznCPPK56zupcdk3or+nWLeJbTLf5WQyK1FuGa2JfyA6E4cY/Uo/mRzj27CfeZ+wjU4lzDH/eqEHynbkv85fs3dC5akR4OIfyq2ant3r7itpJkNJnzm1kn86bUovjcIn/8xhAKNUp1let29ZPMbMzsZ+Gli9UuEtoKTCfeT9Qj3smfcfa/E/icBJ8ZWfd/df1/ifAMJ965k3I8RfpA/TfgROJpQwvql6HncT9z91DL/r/vJ74CziZee7z2+72bkT3xzr7vvWMm+1YpK8eOv18nufmKx7aN9vkT44R6/z95N6FzV6Fm1miKqIb2d/n0D/kvoGPg8IRFfnTDU1sHk19Q5cLC7X1Tj+ZP5xiXunhy+s35p/xqoIFNPlqDW8ugG/gW8r4bz70T/UqByj0WEmZnmxdaVLEGN/cqZVOE5Li+w/7k1vDYvEqrv4uuaVoIaxblD9J5UE+f9wI8S66otQa328TKwXoX/JyOUzFdz/F7g/whfKEvXlznPJ2t47eYD306sK1mCGp1rDP1L9Ys9/l7iOAeT/1mo5VGwBDU6/hDgtiqPt4hQ05L3WWjB/ezl2Pm6KVP6WOI4VZWgRvv8rYrXp1/NTXSMdQg/hup5L5tWghod4yOE0qFqYlpCKLyYEVtXSQnqSoQEv5JzXFdg/5MS25QsQY32GUWoTq3ltT+NCkq6eI+WoMb2O7rAa3Ntses+iw/CD7k5NVwDi4HD6zz3ZYlj7tuM/+N7uQ1qL6GU88fARu7+JXdPthkqy93vIrRdKTRIeyG3Alt6mPfXqzzXTEKPw+TQRZX6NpW301xIGNx/S/q3C20qd7+X0BSjkoF9ZxNKlT9K/b0E/0P/MR0L6SV8mX/I3Ss6p4dP7eGE17+3zOYQSnn2cPfjKtw+d54bCXMnVzqt53WEUrGq2xl7KJH7BPkdZKrm7hcSSnyuoIr/a+QpQuJQbKxiPLRF3YfKp3J9gFA61Mq21zkXx553UkUHhwb4DuGHes3cfSKhZO4nVD8f/EzC5+qwemIox0OJ6yfpP3ZoMXcAW3sooa/q+nT3dwkdcGptx1c1Dx0zdyNcv5WO7zoFOMzdfxzdq9qau/8GOD2xei/gvBbPulczd7+B0PH74Sp2ewrYyd3/Wut5o5qU+IgQ7wI313q8kufK+rVqZidQflDrBYRfBe8SSlxfBl5194ZNvRU1pD6WMJtPsvpxEqGq7CJ3fyi2z8mEtlsAXe6erAoqdq7BhKqZfQnNBkYSbkTTCVVUjxF+jY8vsv8OhNLGXcnvqNUV7XsJYfzXd6Lt30+YwCDnQXcvNrtWw0Q9S39M+H8mqw2fILQV/LO7zygS58Pu/p8Sx09W8e9BGM1hH8LNaCtCKeEKhC+zScBNhOqKmr9wzGw7QjKwD/nX7mJCtcylhEkfuqPtTyTWgcHdf1zBOVYnvMcH0H90gwmEap6L3P3xaHsjlNbmzPUy1Xyxcw0lzN28F+EHzQjCtTQdeJ1QTX+Vu99ZwbE2JPQm3pGQtI4kv+f0O4T3/gHgCndPDkxd7vifJLRx3YP8XvrzCO/thYTPjkedvuKfyenRD8umMbO1CM00csNhzQTGuntVs7CY2VHkN9M51QtM11xk3x0II03sQPjcDSG8l1MJI1I8BvyuXCITXRefBXaOjjWW/CYyiwhVvY8SegqP9zIDw5vZl8lvAnO3nzSlAAAgAElEQVSOFx+nuqSos9wxhJkDk0073iRUUV7ksSYEZvbT2P/Box+QlZxrEOHe9FnCyCQjCU2sZhDu2Y8TOqTcmNjv44RkM+dar65Jw6aEz+anCW3O47oJ97vrgb96GEmi0uN+i/zX7DfuXlHCb2ajgR/EVk1090LNfOpmZh8hDMifc5u731rhvgZ8n/5NCC9x9+QQdpkW3fcOJlxLyeZ7swlV/5cA/6n3B0qBZi2/c/ej6jlm0XNlPUHNIjMbQ7gIFgHTopLPzIlummsSeqbOAiaX+4JISzSJwihCye5b3oC2QIUSVHdPjiPXNNEv8dGEtqczgCne4Bltopts7npcAEz1MGbiMsPMViSUJs5uVOlONGTQaEKiMJXw2mfiZmdmFxC+THJOcPdfphVPI0U/rocBC6OS7UyI7i+rEqryp+V+9L6XRD8YViXc76cS/p/L8vSuUgMzG0n4zukkFLxMa+B9dRThB3ZuBqkuYAN3LzTLYv3ny8g9W6Th0k5QRQqJhqF7kr6OQ3MIN/lKq6RFRFrOzM4klDrn/MMLdI5tlGWirYWIyHuFuz9D6FCXsyL9xxkVEckMM/sA+W3m59N/BIuGUoIqItJ6PyW/o9tXoqFbREQyJWq6cwF9fWoATnf3t5p5XiWoIiIt5mGO8GTHgr+aWbOnyxQRqdbp5I+r/RT9R0FoOCWoIiIpcPe/kz8P9qrAdVVOKSsi0jTRyBrxdqdLCDMYNr3DtRJUEZH0HEYY3ixnS+DCaMYgEZHUmNkehAmA4n7g7v9rxfmVoIqIpCTquf8ZwvBqOfsClypJFZG0RMnpVeS3O/2Huxea0rs5MWiYKXmvMrN1CYPK57xczWDVIq1iZusTxq+Me64R4wGLiFTLzDagb7zTnGcaOQFS2RiUoIqIiIhIlqiKX0REREQyRQmqiIiIiGSKElQRERERyRQlqCIiIiKSKUpQRURERCRTlKCKiIiISKYoQRURERGRTFGCKiIiIiKZogRVRERERDJFCaqIiIiIZIoSVBERERHJFCWoIiIiIpIpSlBFREREJFOUoIqIiIhIpihBFREREZFMUYIqIiIiIpmiBFVEREREMkUJqoiIiIhkihJUkfcwM9vFzB6NPT6fdkwiIiLlDEg7ABFpqpWBrWPLo9MKREREpFIqQRURERGRTFGCKiIiIiKZogRVRERERDJFCaqIiIiIZIoSVBERERHJFCWoIiIiIpIpGmZKRAoysxVI3CPcfVZK4YiISBtRCaqI9GNmuwNTgZmxxzdTDUpERNqGSlBFJI+Z7QZcDQyJrT7e3f8vpZBERKTNKEEVkaXM7COE5HRobPVx7n5aSiGJiEgbUoIqIgCY2YeAm4Hlo1UOHOXuZ6YXlYiItCMlqCKCmW0B3AisEK1y4AfuflZ6UYmISLtSgirS5szsA8B/gZWjVQ4c6e6/Ty8qERFpZ0pQRdqYmW0EjAdGRqsc+L67/yG9qEREpN1pmCmRNmVmGwJ3AKOjVUpORUQkE1SCKtKGzGxt4FZgTLTKge+5+9npRSUiIhIoQRVpM2Y2llByuna0yoHvuvsf04tKRESkj6r4RdrLGsCdwLqxda8DF6YSjYiISAFKUEXayzHAeol16wDXm9mw1ocjIiLSnxJUkfZi0b+PA7Nj63cALjOzga0PSUREJJ8SVJH2cw+wC7AnMD+2/lPA+Wam+4KIiKRKX0Qi7eU2YA93n+PuDwJfALpjf/8CoAH6RUQkVUpQRdrLde6+ILfg7tcBhwG9sW2+bWYntzwyERGRiBJUkTbn7hcC30+s/qmZHZ1GPCIiIkpQRYRogP5fJVafYWZfTSMeERFpb0pQRSTnx8DfYssGnGtm+6UUj4iItCklqCICgLs78A3gytjqTuAiM9s9nahERKQdKUEVkaXcvQf4InBrbPUg4Aoz2yadqEREpN0oQRWRPO6+BNifMJh/zgrATWa2STpRiYhIO7FQqyci70VmtirwgdiqF939jQr3HQVskVg9xd2fblR8IiIihShBFREREZFMURW/iIiIiGSKElQRERERyRQlqCIiIiKSKQPSDiDHjC2AQ9KOQ0RERDLtRHfmpR2ENFdmOkmZ8Xng4rTjEBERkUxbzZ0paQchzZV6Fb8Z48zYv2PANT9LOxYRERHJto6O835rxv5mrJ52LNI8qZegmnEW8L1UgxAREZFlzWfcuTrtIKQ5MtMGNcc6YOgKaUfR36J50xk4aDk6Bw1NO5SCuhfPo6enywcPW9nSjqWYhXPeYeiKq6UdRlEL505hyLCRWGfmPhYALJ4/k86BgxkwaLm0QymoZ8lCursW+uDlRugarNGiudN80LCVrKNzUNqhFLRkwSyscwADB2fwJg30dC+ma9Echiy/StqhFLVwzjsMXWE1yOinZPGC2d7ZOcAGDF4+7VDyeC8snJt2FNJKmfsmXm4l+HwGK/uvP3u/7o0/dPiADbY5OO1QCnrmzr8wZeL93bt9+YqBacdSzAUnbOZfPGlGRm/LcMkvtuve4+s3DRg+Opuzed7y10N7x266Z8em238r7VAKeuXRK3n5kX927/nN/2b4GtzUv3jSzMxeg5f/cofunQ++YOAqa22bdigF3XnBdxg+ZrPeLT52fOrNwwp588W7ePSGE7r3PeqRzH235Vxw/Kb+hROnmXV0ph1KQbeff0T3qLFbD/zArsemHUqeuTPg0lPSjkJaKZM3GRERERFpX0pQRURERCRTlKCKiIiISKYoQRURERGRTFGCKiIiIiKZktmejiIiIiJpMGMgMAoYGT3mATOAN9zpSTO2dqEEVURERNqeGSsBhwC7A7sAhQaDXWTG08B/gauAR90pOOORGV+i9EREs4CFwJvA08B4d16tIM7LgXWjxbvdOarcPgWO8TB9tegXuHNWtceohRn7Ab+KFk9z56/FtlWCKiIiIm3LjKHAD4EjgZXLbD4E+GD0OA541owzgQvdWZTYdjVg6ypjuQ84zp17Smy2afQAmFzN8WO2AnKD8d5e4zFqsQ+wXvR8eKkN1QZVRERE2pIZawL3AD+nf3I6nVCy+SDwElBoLqvNgL8CJzcopO2BO83I1kwJDWDGocBBlW6vElQRERFpO2asRUg+x8RWzwPOAi515+nE9gaMA/YAvgasH/9zBaf8THT8nJHAqoTq+s8Ca0frO4DTzZjrzjkV/4cyxIzVCK/PSGBj4FPAR6s5hhJUERERaStmDAYuJz85vR/Yz513Cu0TtTV9EnjSjF8T2queAqxe4WnvcmdWkXh+BBwL/IK+ZPc3ZlzjzlsVHj9Lvk4ola6ZqvhFRESk3fwE2Da2fCfwsWLJaZI73e6cRyhRva7eYNzpcudU4Dex1UOBg+s99rJKJagiIiLSNqLe+t+NrZoOHOTOwmqP5c50M/YBxjYovF8BP6CvA9Nu9PV6X5ZcQCiRTroeGFzJAZSgioiISDv5OrBSbPn0eqrRo6r/SXVHFY41zYxXgfdFqyptPpAp7rwGvJZcb0ZvpcdQFb+IiIi0k71iz+cDf0srkCLejT0vNBZrW1CCKiIiIm3BjGHAdrFVd7szO614ioiXmk5JLYqUKUEVERGRdrE1MCi2XKidZGrMeD+wRmzVI2nFkjYlqCIiItIuVk0sv5hKFAWY0QGcllh9VRqxZIESVBEREWkXIxPLBcclbbVoutW/Ap+Mrb7XvaXTkGaKevGLiIhIu1gxsVxo+tJmWcds6XSqg4HlgHUI47EeAqwW23YWcFgLY8scJagiIiLSLuYklpMJazM9XuF2bwKfceeVZgaTdariFxERkXYxM7E8IpUoCusC/g5s486jaQeTNpWgioiISLuYlljesIXnngh5A9XPIVTlTwLuAca780YFx+mKPe8sulURZhhgsVVLqj1GKyhBFRERkXbxJNBDX2K3M3BKi869lXtDOmXFmykMqWH/oeTXoGdtHFhAVfwiIiLSJtx5l/y2oNub9evZn3XxmaZqiX2VEsfLDCWoIiIi0k7Gx54PAb6XViA1ejn2fAOzqqv5N0ksP19nPE2hBFVERETayZ+AxbHlI81Yr9aDmWFmrF1/WBWLzy61PLBjlfvvGXveAzxRd0RNoARVRERE2oY7bwHnxVatCFxmVv2QU9G4plcB32lQeJW4g/yOTcdVuqMZqwBfjq262535DYqroZSgioiISLs5AXgttrw1cJ9ZZb36zRhgxqGE0sd9mhBfUe68A1waW7W7Wfkk1Ywh0X7xRPyPDQ6vYZSgioiISFtxZybwWWBBbPXmwLNm/NmMHc0YGN/HjE4ztjPjROA54J/Q0qr9uBPJn6b1l2ZcZsa45IZmDDJjT0LTgF1if7oTuLqpUdZBw0yJiIhI23HnSTN2BK4kTDkKMBA4InosMmMKoZf7KsCqFB93dHGR9U3hzmtmHEJoXpBLpA8ADohifg2YB4wCNiC0VY2bBHzBnZ5mxGfGDync9CA+LNbPC5T8vuEekmwlqCIiItKW3HncjG2AXwKHAoNjfx5C6RLSXkJ70D8A1zUtyCLcucGMXYFLgDVifxodPYq5nZCcTm1ieEOBlSvYZmhi3dIxXpWgioiISNtyZwZwhBknA18FdgI+BAwrsPkc4F7gbuBSdyaWOPRE4L+x5a4i29XMnXujdrNfAQ4GtqFwbjeHMFvV2e7c3Og4CphA/v+9UlNyT5SgioiISNtzZzJwMkDU/nQUMAJYgVDNPyVqu1rp8S4DLmtCqMnzLCR0dvqjGcsRqvRHAMsRZomaDrzcrOr8IjFdCFxYzzGUoIqIiIjEuNMFvB09lhnRkFFPpR1HI6gXv4iIiIhkSuZKUJcsnM2jN5zesmLoSs2f/Wbna09d7rOnPNubdiyFTH39kY4Fc94a8OgNx2Xutcvp6V7cmeX4eruXdD5z95k9Q4aNSDuUguZMe7Fj0jPdvmD2G5m8Bme+/bzNmT4h09dgb093pq/BrsVzBzx37zm9y610lacdSyFTX3+wY/6ct6x78dxMvoZzZ77OgjlvZfo9dno7H73xhB4zSzuUgma+/fSAebMn9S5ZOCtT1+DihSOBY6qd0lOWYZlLUAcsWcRGj4zP3EX4xrwpvSPmL+l43xtvZi42gK5Fb9PdM683i69dzjNdizzL8b08b6aP/d/dnSM6C7WLT9/k+W/7SnPn2UZvT83ka/jq4unM7Zqe6ff42SULMh3f6/Pf9XWef7Ajq9fg1PkzGDV/kW80bU4mX8PJXbOZunhmpt/j5xbN8/c9emtnVqsvZyx4p3eFjlkdG80aX37jFprXuwbPc0zaYUgLZS5BHd4xlFNH75V2GP28tmRG74ErbdWxz4ofSDuUgv4x6wEeW/hmz6mj98rqfY9b5j2fyfc2594FE3qOGbXbgPUHjUo7lIIOn3yR77zchnbQ8A+mHUpB18x5mivmPNl96ui9BpbfOh03z3su09fgwwsndn9jxA4Dxw1Zo/zGKTjqnf+w4aBV/Zsjdshk8d8981/ltzNu7zl19F6Z+27LuXne85wy+tN0ksmXkO+9fUXP5kPGdHx95e3TDiXPG10rc8PctKOQVspsMiMiIiIi7UkJqoiIiIhkihJUEREREckUJagiIiIikilKUEVEREQkU5SgioiIiEimZHYoDhEREZE0mdEBrAQscGdx2vEsq8wYBKwMLAcsBGa5s6jUPkpQRUREpO2ZYcBHgU8AuwHrAqMgDFprxkLgecJc9+OBm9x5t8TxPgF8tsQpFwELgNeBZ4CH3VlSQZwnAWOixafc+VO5fQoc4xz6atHHu3Nltccoc/xVgD2A3YGtgPeRn3N2m/EscBPwF3deSx5DCaqIiIi0rSgx3Rc4ERhXYtOhhGRrK+AwYIkZVwO/deehAtuPA75eRSizzbgEOMWdySW2OwDYNHp+LVSfoAKHA7kZ196FxiWoZvwT+CJQatKWAYTXZxxwtBknA790Z+lU3mqDKiIiIm3JjGHARcB/KJyc9gLF5rAaBHwOeNCM4xsQznDgG8ALZny6AcdLyycpnpzOAjyxbiDwC+CP8ZUqQRUREZG2Y8aKwG3ANok/XQdcDNwFvONOrxlDgNWAHYA9CSWuw2L7rFzBKX9AqNIHGAysEh1zfWD7aB3A8sDVZuzlzk3V/r8yZAmhhPc64H5gojvdZgwAtiQk44fB0nl/v2HGeHeuAiWoIiIi0maiav3zyE9OJwFfcOf+5PZRh56J0eNCM0YDPwK+CQyp8LTnuzOrSDyrAb8DPh+t6gTOM2OjUu1cM2oJcAbwK3emJ//oTjfwCPCIGfcBf4/9+XgICaqq+EVERKTdfJP8DkwvAh8ulJwW4s4Ud44CtgOeqzcYd94htNu8PLZ6NHBgvcdOwbbuHFsoOU1y5x/AHbFVW5uxKihBFRERkTYSDXl0XGzVIuBz7rxV7bHc+R/wQRrQycgdB36cWL3MtUWt4XW8MfbcgLVBCaqIiIi0l0OANWPLZ0WJZk3cWeDOg/WHBe5MIDQjyBnbiONmXLLZw1BQgioiIiLtZf/Y8y7g7LQCKWJa7Hklna+WdasmlqeDElQRERFpE2YMJPTEz3nAnTfTiqeIkbHnZdtxvgd8OPZ8IfAyKEEVERGR9rEFYRinnPvSCqQQM8YSZrDKeSatWFrBjNUJM3fljHenC5SgioiISPtYI7H8dCpRFPcT+sYFhTCG6HvZLwkTHuQsHaxfCaqIiIi0ixGJ5ZmpRFGAGUeRPzXqi8DVKYXTdGYcBhwaW3WDO7fmFjRQv4iIiLSLZKej1AbBN2MosBawLXA4sGPsz13A4e70pBFbs5mxDfCn2Ko3CbNKLaUEVURERNrFgsTysIJbNccEs6Xz0A8nvyo/biHwZXfuaU1YrWXGJsAN9M3AtZgwg1d89AIlqCIiItI2klX6ySr/ZhpewTYPAd9054lmB5MGMzYEbqNvaKku4EB37k1uqwRVRERE2sWMxPJaqUQR9BAGqZ9IGE0grw1mmf1yau1LFC+97a7xGNWd0FiXkJyOiVb1AIe6c02h7ZWgioiISLt4BnD6ErSdgN+26NzrAbOj5z3uzKnxOPH9hhTdqggzhpCf2NYaRzXnfD9wM7B6tGoJITm9pNg+6sUvIiIibcGdd4DnY6s+GnVWaoXZ7syKHvUkhfF9V6ph/2RHsdkFt2oQM3YE7qYvOZ0P7FMqOQUlqCIiItJebo89Hw58Na1AavR67Pn6Nez/vsTyq3XEUpIZ+wC30Nf+dibwcXduLrevElQRERFpJ38GemPLPzKrb857M5arL6SqPBp7PsKMLavcf7fYcwceqz+k/sz4NnAlLC2hngzs5M4DleyvBFVERETahjvPAlfFVq0J/NOMzmqPZUanGacAJzYqvgrcBUuHqwL4fqU7mjEM+Eps1VPujZ2sIHpNzgTOhqWv6RPAdu6VT92qBFVERETazY/Jb3u5N3CVGStUegAztiY0FziB4mOaNpw7rwA3xVYdYsZ+5fYzw4A/kD/d6zmNjM2M5QnJfzxpvg74qDuTqzmWevGLiIhIW3HnFTMOBq6lr7BuL+BFM04FLnHvNyQVZqwEfAw4hJDUtiwxTTgpimMQIf5/m7Ep8Ft35ic3NmMt4HfAZ2OrXwQubHBcPye8jjlXA8cCq5otHfu0EtOUoIqIiEjbcecGM74A/B1YPlo9hlA1/XszngYmEXqdj4j+tgkZKNxz5xEzjiaUiAIMBk4GjjfjHuANwjSuowgxb0V+rfl8YH/3fjNr1WtQYnnf6FGtr6f+IouIiIikwZ3LzHgO+Avw4difOoBx0aOUtwlzyje0qrwS7pxtxkLgj4QEFcK4qB8vs+sEYL9q2oOmQQmqiIiItK0oUfuIGbsA3wI+CiWro98E7gQuBW52LzoT0yLCTFFLT1V/tPnc+bsZdxCq0b8ArFhi80mEEtdz3Znb6FgiC8n/P9dqsRJUERERaXvu3AHcAWDG+4B1gJHACoQOVe8Ak9yZWOHxfg/8vhmxJs4zAfhGNKzTFoQq/RGE4Z3mAFOBx915rQWxHEtIluumBFVEREQkxp2XgJfSjqMa7vQQxjRtyrimraZhpkREREQkUzJXgjq/dzH/nPVg2mH0M7nr3Y5b573ArJ5Gd3hrjAcWvMbrXTM7s/ja5Szs7crke5szv2dRx+XvPsFqAyoeBq+lJnbNtLvmv0KX96QdSkFPLJrM213vZvoa7PLebF+DvUs6r5/7DE8sfCPtUAp6afEU5vQssqy+hi8tnsY73XMyfQ0u7u3m/FkP0pHa6ESlvb5kRsf83sUMqn7M+qaa1TMm7RCkxTKXoC7pWOzPDhvflXYcSb3zfOC0IbN7nx32QrHG0Kma1s2Axe727LDxS9KOpRjr8EFZjm/gXB84cegD3TMG5k2BlxmL5vvAGYNn+LPDXs7c5wPgjW46F3R6R5bfY5uV7WvQ5zLwtcEP9cweTCZ/hcyY6wM7B07l2WGvZPI1nGp09iz2ziy/xwMH+KDnht3aZU3oMNMI7y7wgYs7rffZYa9m6rtuXvf6BgxMOw5pncwlqKsMdrtyV0+Oo5W6nW+i+2vvY8DB62cvNoDfPgMPTKPr8l2yGR/AqIvwLL63OeteTvdZ2/mATYanHUlhe99K7x5j6fjWxtl8DS98Ff75Cl1Zfo9H/jvb1+DGV9J12jYM3HaVjBVfRQ66CzYfTu9x47L5Go5/C37yKN1Zfo9H/hu/fBcf2JnNAlQ+fyddW430gce+v994lqmaMLeXDa5IOwppJbVBFREREZFMUYIqIiIiIpmiBFVEREREMkUJqoiIiIhkihJUEREREckUJagiIiIikilKUEVEREQkUzI3DqqIiIhIGsxYBfgYsCuwATASWBFYDMwEXgSeAm5155kyxxoHbFfmlLOBt4Bn3JldYYwHACtHi6+7c0sl+yWOcTgsnc7sKXceqvYYFZxjLPAJYFtgK2AMIe7FwHzgBeBB4FJ3nk7urwRVRERE2poZGwE/BT4PJSfK+FBsn1eAfwLnujO9wLafAE6vMAQ342HgX8Df3Ck1G9pJwKbR82uh+gQVOIe+/+cZ0LgE1Yx9geMIiWkhQ4HhwBrAbsDxZvwH+Eb8dVQVv4iIiLQlM8yME4BngYMonZwmbQCcAkwy47B6QyGUtv4ReNaMzes8Xpq+SvHktBAD9gMeMmNMbqVKUEVERKTtmDEAuIBQahr3MnAFcBcwGVgAjAJGAzsAewAfiG0/lL4SzVLOJ1Rv5ywPrBIda3Rs/QbAvWbs5M5Tlf5/MmoqoZT3LkLziBnAcsCawMeBwwmvA8B6wD+APUEJqoiIiLSnX5KfnM4HjgL+4U53YtsJ0b/XAT8yY3vgREKSVakfuDMrudIMAz4K/AbYOlq9EnCRGVu55yW1y4pngZ8D1xRprvA0cJMZ5wL3EBJ1gD3M2MidF1XFLyIiIm3FjL2BY2KrpgM7u/OXAslpP+7c587uwP7QP+mshjvuzl3AjsD9sT9tCuxdz7FTcgqwhTuXl2lLizsvEtrUxm0LaoMqIiIibSQqsTyVvl7sDhzizqPVHsudK4EtCKWAdXFnIfC9xOr96z1uq7nzUCVJfswDieWRoCp+ERERaS97QV4npPPdubnWg7kzCZhUd1ThWI+Z8TYs7Sy0biOOm3HDEstvgUpQRUREpL0cEnvuhLafWTI59nzV1KJond1jzxcCt4ESVBEREWkTUfX+zrFVj5cbcD8Fy8eeVzR4/7LKjC2Bo2OrTndnBihBFRERkfaxOWHIqJx70wqkEDNWBjaMrXolrViayYw1zfgZcDdh2CmAfxM6WAFqgyoiIiLtY53E8uNpBFHCd8ifLODGtAJpJDN2IszUNRxYjTCLVM5UwpBU57jjuZVKUEVERKRdjEgsF5qiNBVm7EFI4nKmAJemFE6jjSZMa5p0PkXGh1UVv4iIiLSLZIJa1xim9TKj04xxZvwJuB4YGPvzUe7MTym0VjkUmGzG+Wb5pdsqQRUREZF2kRyfc2DBrZrjdjN6oudGqO4eQ5gqNc6BE925qIWxNdutwDaEvHMVQjX/RwgzeQ0FvgTsY8Ze7mFMWSWoIiIi0i5mJJZHtvDcW1SwzTTg2+5c3uxgWimqwn8ssfpvZvwcuAnYhDC961VmbOLONFXxi4iISLtIJqhjCm7VWguA24GjgHUrSE57Y8+t6FaV6y2/SXO48zpwECztHDWS8DqoBFVERETaRnLYpu2BP7Xo3LsCc2LLCwltYKe701XFcebFng+uNggzBpE/UsDcao/RSO48YcaTwJbRqr2A45SgioiISFtw51UzJgFrRat2MaPTfWnb0GZ6slBv9RrEk9zli25V3IqJ5SxMBvAyfQnqOqBe/CIiItJe7og9HwPsl1YgNXor9nzdGvbfILH8Rh2xNIrHng82w5SgioiISDs5L7H8k6jae1kR72w0xoz1q9x/hxLHS0s80Z7qjitBFRERkbbhzl0QhjKKvB84vdbjmXGgGSfUHVjl7k8sH17pjmZ0Al+OrXrNncmNCKpW0finW8dWPQaq4hcREZH282PI65h0pBmnmVWeF5kx0oxzgEsIY5q2hDuPAw/HVn3PjG0q3P0YYLPY8l8bFhhgxgFRwl7R6AJRwvxn8jttXQ5KUEVERKTNuHM/cHRi9Y+Au8z4aKl9zdjQjFOA14BvNCnEck6JPR8K3GjGvsU2NmOwGScB/xdbPZ0GJ6iE9q2XAI+b8U2z4ol7VHJ6HfCJ2OpngYtBw0yJiIhIG3LnD2aMAn5K33iiOxCS1DeBu4CJwHzC7EejgQ8B67U+2nzuXGfGmcCR0apVCIPcPwvcArxOiHs4sDmwB2H2ppxe4CB3pjcpxC0Iw3f9wYwngIeAKYQRCEYDHwZ2pP9wVwe5h9m+lKCKiIhIW3LnRDMeI5Qkrhr705qEAeTL6Qb+A5zfhPDK+SEhsf5+bN1m5FfhFzIX+Io745sVWEwnYYrTciBlWR0AACAASURBVE0QJgMHuvNUboWq+EVERKRtuXMtoRf594EXKtilF/gfcBywtjsHuvNME0MsyJ1ud44E9gQeqGCXLuBfwNbuXNGksM4CvgRcTyjBLWcucCawhTv3xf+gElQRERFpa+4sAH4P/N6M1QgzTK1NmHpzOKG95jRCu9MH3JlZwWH/AnmJ4LsNDTrizs3AzdFwUx8lzGs/AlgOmEmI/THgPvd+U702OpYFwAXABWYMJgy+Pw7YkPA6Lh/F9Daho9d97nkzYy2lBFVEREQk4s47wJUNOM5sWjhLkzuvAq+26nzluLMYeDB6VE1V/CIiIiKSKUpQRURERCRTzN3Lb9XMAIyzgO/lljs6JjF8ubXTDaqAxUuwjg4YOIDMxQaweAn0ODZscDbjA3h3PrbSctmNr6sb6+zAOzL6s23BImzggOxeg4uWQE8vttyQbMYHMH9RtuPr6cYsw9fg3IUweAA2aGA2X8PubljUhS0/NJvxASxcjA3N8H16wWIM8GGD044kX2/vesye/2py8PfPuHN1KgFJ02WuDeqaI+H1v1Y2A0Er7XQC3YfvzoCDd8pebAC/vQbuf4GuK37EwLRjKWbkIfiMC7L5+gGs83W6b/oZAzZZM+1ICtvrFHr33JqOb+2Zzdfwwrvgn7fR9d+Ts3sNjjg429fgRt+m64IjGbjthmlHUthBv4XN1qL3+P2zWfs2/kk44UK6H/l19r7bckYcjE89H+vM5CsIB55B19YbMPDYz6QdSb4JU2D9I9KOQlopox8REREREWlXSlBFREREJFOUoIqIiIhIpihBFREREZFMUYIqIiIiIpmiBFVEREREMkUJqoiIiIhkSmbHihMRERFpNTM2Bz4GrAuMAkYCc4GZwEvAU8B97iwsc5y1gVKjGr8LLAImufNuFfF9GFguWpzmzlOV7hs7xm6wdEzo1915udpj1MuMVYEPxFbd6U53bkEJqoiIiLQ1M5YHvg18F1ijgl0WmHELcD5wnTu9BbY5EDi9wvO/AdwC/Mude8ps/jdg0+j5tcA+lZwj4RagM3p+BnBsDceomRkrAOOBcbHVw6EvUVcVv4iIiLQtM/YFXgNOo7LkFGAY8BngauAFM/aoM4yxwNeAu8243oxRdR4vs8zoBC4hPzntRyWoIiIi0pbMOAE4mfwCu4XAbcAdwDvAPEI1/xhgB2BnYGhs+w2B3YCby5zuSaAnfnpgdWC1xHafAh4wY2d3Jlfx31lW/B74ZLmNlKCKiIhI2zHjCOCU2Kpe4E/AL9yZWmK/ocChwHHAWlWccld3ZhU43mjgAOAE+pLVDYB/mfHxIs0Hlklm/AD4ViXbqopfRERE2ooZHwTOiq1aDHzRne+WSk4B3Fnozp8JJac/J79UtGruTHHnbGAb4JXYn3YllMy+J5ixD/DraHERcG6p7ZWgioiISLv5FTA4tvx9dy6t5gDuLHHnJGAX4NV6A4qq87+TWP2Feo+bBWZsDfybkHc6cBhwX6l9lKCKiIhI24iGado5tupm99KleaW4c09UotoI/yUMZ5WzcYOOmxozxgLX0Tc01k/duaTcfkpQRUREpJ18PbF8WipRFOBOD/B6bFWyA9UyxYwVgesJHcwA/unOqZXsqwRVRERE2smusecvuXNXapEUFu/AXnIygCwzYwBwKX2D8d8BHFHp/kpQRUREpC2YsR75Pe/vTiuWQqIRAuKzT71ebNtlwB9g6fiwzwP7ubOk0p2VoIqIiEi72Cix/FAqURR3EDAktjw+rUDqYcbRwDeixanApwsNsVWKElQRERFpFyMTy1NSiaIAMzYmjC6QMw+4OKVwambGZ+j7fywE9nVnQrXHUYIqIiIi7WJEYrmqUr1mMGM5M74JPAisHPvTL92zk0BXIhpf9kL6hpP6sjsP1HIszSQlIiIi7SJZMOctPPfvzFgcPR9KGHZpbWBz8sdkhdC5KDOjC1TCjLWBa4Fh0arj3bms1uMpQRUREZF2MSOxnCxRbab/Z+++w+Qqy/+Pv++Z3fReSEIPKNKkBKQZSgSpfmmCFAELRbB9fzZERRSVriIKfEUEBRRBioAgXQISOoQSWoCQ3vtm+87cvz/OmeTsZGZ3ZsucE+fzuq65rvM8c84z987Mbu485ylfKOGcDHARcKF7RZPnbjGjD8FyUrllsW5w716CrQRVREREqsXyvPJGsUSxvsXAA8Cl7kzv5NyeTlx7or3BBD3BEGw2cE53G1SCKiIiItUif9mmPYEbKvTa3wIaIuWVBGNgZ7vzbhnt1EeO84cGdCpcnzQdqVpTbhudOAhoMSv7upXRa5SgioiISLV4E1gKjArLkyr42jeVu9RSEasjxwOKnlXcoLzyqm7E0muUoIqIiEhVcMfNmAwcF1Z9xIxJ7jwRY1jlWhI53qwL14/PKy/sRiw5bcDLZV4zEtgyUn6VYAwuoARVREREqsvtrEtQAc43Y/IGNClpKnBSeLy5GRu5s7iM6z+RV36luwG5swrYvZxrzDgVuDlSdUDYDqB1UEVERKS63E2w9WbOp4BvdLUxMyaYcWa3oyrdC5HjFHBKmdd/PnK8FPig2xH1AiWoIiIiUjXcyQI/zqu+wqy8RM+MlBlfA6YA2/RUfCX4D/B+pPxDMzYt5UIzjgf2i1TdlNSeYyWoIiIiUlXcuQv4baSqD3CzGb83Y+OOrjWjjxknAG8AVwP9ei/S9YUJ9i8jVSOBh83YrqPrzPgscFOkqgm4tucj7BkagyoiIiLV6LvApsCxYdmArwCnhROpngDmEcxyH02wCP1ewIGsPxO+0v4AHA4cGZa3B141427gUWAGwfJRo4HtgKNo33MK8P/cmVGZcMunBFVERESqjjutZhwH/AD4GevWBu0PHBY+SvEW8EjPR1hcuBrBacAdwKfD6j7AieGjI1mCnaqu68UQu023+EVERKQquePuXAxsC/wRaCnx0kbgVuBgYEd3Hu2lEIsKZ7wfBpwLJc/inwoc5s7Pei2wHqIeVBEREalq7rwPnGnGtwhu4+8LbAGMILidv5pgvdBZwNPAi+40ddLs7bRfwqmnd2zCnQzBBK9rCHpS9ydItkcQ9ASvJlg39RXgCXem9HQM3fAY63p/of0OWUpQRURERADcWUOQOD3WA23NYv2tVXuFOw3AveFjg+DOAmBBsed1i19EREREEkUJqoiIiIgkirnHuz6rGVcB38yV+9TMZqfx49tiDKmgGQuz6WEDjRGDLdP52ZW3aIWnGpo9NX5sKnHvXc7rH2Zrdhqf3Pg+WJCt2XSkZfr2sUQuWjxjgacHD4DRQ5P5HVy+2lPL1njqoxsn9zN+c1a2ZoctkhvfjAXZmjHDLTuwn2XjjqWQDxd6un9fZ+zwVCK/g6vq3RYs9/S2myX3M357TrZmuwTH9+HCbM2AvpYdMzxZ38Hmlq3sjVnvpfOqj3HnnlgCkl6XuDGoqX4bMWrSA4mL64N7v5sZ8LGD0qM+dmjiYgNY/dodNC14s23UpJ8mMj6A7OzjfdSkOxIb35u3fiEzeI8L00OGbxl3KAXN/NePvP9mu9uojx+TyPewefqjrHj34cyoSb9MZHwArTcl+zv49u1nZIZM+HZ6+JjtE3l3a+5jF9N32GbZUbufmsz3cM6LLHzhT5lRk65NZnxAy03H+8hJt9dYQm9gznrop239xmxbM2rXExMVYMPqARUazSlJkbhf4prafmy63aFxh7GeVx+/xEdtunsiYwNYuegtWptWeVLjA0in+yT2/QNI9+nvG2+9P8PGdLgZR2zefPoaH7HJzpbU97CpfinL57+W3XS7Q/N7ORIjna5N9Hewps/A7NitJqZHb75H3KEU9P5LtzBs3A7JfQ9TKWZOuy/RfwdTqVo2/dghWCqZvybTX/iTDx+7feI+47plcUcglZao/yGJiIiIiChBFREREZFEUYIqIiIiIomiBFVEREREEkUJqoiIiIgkihJUEREREUmUxC0zJSIiIhIXM/oB+wDjgY2AoUAjsBJ4G3jdnYUlttO/g1Na3KnvQnxDgNw6Za3urOlCG8MjxSZ3GsttoyvMGAiMCYvL3VlZ7FwlqCIiIlL1zDgc+AawPx0nlpjxOnAPcIs77xc57ZvAZZ20A8EWBG8CjwB/d2dBJ6E+C2wfHt8HHNXJ+YUsYV2SewVwbhfa6IovAleHx+eGr12QbvGLiIhI1TJjJzOeBx4ADqWT5DS0E3AB8K4Z/zBjl26EsAVwOPAb4AMzLjGjthvtJZIZaeCUUs9XD6qIiIhUJTOOAW4GBuU9NQt4EpgL1AOjCW5NTwQ2i5yXAo4G3gde7eTlVgIeHqeBIQXO6Q+cB+xhxlFduX2fRGaMIug53avUa5SgioiISNUx4xDgTtrfTZ4M/NCdZzu4bkfgbOAMoG8ZL7mVOyvy2hoF7AIcB3wJ6BM+9Sngd2HdBseMTwJHAKOAbYE9KO+90i1+ERERqS5mbAH8lfZ50C+AT3WUnAK4M82drwMfAe7qThzuLHXnMXfOBvYFlkWe/qIZu3en/RgdCPwAOJPg5yorOQUlqCIiIlJ9rgBGRsqXu/Nj97W34Dvlzlx3jiPoTe32LHh3XgC+nVd9anfb3VApQRUREZGqYcY2wGcjVVOB87vanjvXuXNBtwML3A7txp12Z/JVbNz5mTuW/6CMRF4JqoiIiFSTr9E+/7nInda4golypxn4MFK1cVyxxE0JqoiIiFSTgyLH8wjWM02StshxNrYoYqYEVURERKqCGWOB7SJVT7qTiSuefGbUAFtHqubFFUvclKCKiIhItdgJsEi5wxn7MTic9uujTo4pjtgpQRUREZFqMTKvPDeWKAowYwRwZaSqDfhbTOHETgmqiIiIVIsReeUVBc+qMDMmAs8AW0Wq/+jOezGFFDvtJCUiIiLVIn/B+JYKvvb/mrVbZmkgsDnwCWD7vHNfYv01UauKElQRERGpFvk9psMr+No/KfG8+4FT3Lu/+P+GTLf4RUREpFosyyvnj0mN00vA0cCR7qyKO5i4qQdVREREqsWCvPKuwC0Veu2bgObwuJWgN3cFMAuY4s7CEttpiBzXlhuEGSnad1A2FDs3TkpQRUREpFq8SrCV6KCwPKmCr/0t9x6ZlLU6cjygC9cPpP1SWyu7F07v0C1+ERERqQrhlqZPR6p2NmPHuOLpomiSO64L12+WV17ajVh6jRJUERERqSb3Ro4N+GFcgXTR65Hj8WYMLvP6XfLKr3Uznl6hBFVERESqyZ9pPxb1RDP+p6uNmTHGjCO6HVXpXooc1wLHlHn9ZyPH9cBb3Y6oFyhBFRERkarhThNwaaTKgD+bsWe5bZmxPzAVOKBnoivJv4HFkfIFZmvH1HYo/BmPjlTd4U6mJ4PrKUpQRUREpNpcTbDeaM4I4AkzvmbW+cx4M3Yw4w7gCbo2DrTLwgT72kjV1sBdZgzt6LpwrO09rMv9HPhdrwTZAzSLX0RERKqKO1kzTgUmAzuH1f0JEtfvhMnnZGAOwW3wkcAYYC/gUGAC8XbyXQb8D7BbWD4YeNuMq4GHgdkEs/1HAdsR9JqeCfSJtHGFO6/0RnBmjCdInPNF37OPmHFQ3vNN7sEkNiWoIiIiUnXcWWnGJ4HrgZMiT40Hzg0fpaij/cSlXudOkxnHAY8AHw2rxwEXhY/O3AH8qJfCAzgVuLCTc84KH1GzgC1Bt/hFRESkSrlT787JwFHA82VePg34NrC5e8UW+1/LnZnAHsDNUPI40hUEMZ/gTlsvhdYj1IMqIiIiVc2d+4D7zJgA7A98kqAnbyQwlGCL1MWEuz4Bk915s5NmnwTOi5Qbezhs3FkJfMGMnwEnA/sB24Zx9ye4zb8YeDmM5y/u1PV0HAU8zrpds8qxdhMCJagiIiIiQDgm8xXgyh5o63nK75Xt6mt9APy8Eq9VCnemECTyXaZb/CIiIiKSKEpQRURERCRREneLv6VpFVMfuzobdxz5GlbNT8968z6vWznL446lkMUfTrE1y2fXTH3sosS9dznZTEsq2fG1pt959jrvO2h0Ij/jumUf2Lx3HvbmxhWJjG/53NepWz4z2d/BbCbR38HW5jU101/4s8+d/mgiP+Mlc16yxvol5ngi38PVS96nsW5hOsmfseOpVx+/JItZ3KEUtGLRWzUNdQs9k21N1HewuWE48FV1qlWRxCWo6eYGNvnP7Yn7Es6on58dsKY+tcmMdxL5V2VN8yIaM/WexPcu57WWhkTH93bdUh/x0gM2LN0/cZ/x0rY1ZJsWeGb5Aqud8Xri4gOgtY5MW53XPvHHxH7G3pzs+FJNS73m5XutNtUnkZ9xqnkR6ZVLvHbOe4l8D1NtDWRbVyT6M842rfbayTckNr5UyxJPM8dqF8xO1Hcw66MJltUcRDB/Sf7bJS5BHZ4awK/HHht3GOs5ec6fsycMnZA6ashOcYdS0I0rnuXlxrltvx57bKc7YMTlqfr3E/nZ5uzfeFXmR6MPqdm6z6i4Q1nPU/Xvc+WyJ9ip78bsP+ijnV8Qg+cbZjGl4YPMl4fvnbi/KzlvNM3ny8P3jjuMos5fdH/mM4N3rBnfZ2TcoRR0w4pnGVczhMMH7xB3KAW91bSQf9S9lv3y8L3TccdSzBtN8/ni8L1Ikaj8b60/LH86s0WfkTWHDNou7lDaWdo2iKmNrUBr3KFIhST2f3EiIiIiUp2UoIqIiIhIoihBFREREZFEqTGzSyPlD939utiiEREREZGqVwN8P1J+ElCCKiIiIiKx0S1+EREREUmUxC4HIyIiIhIHMzYCtgJGAUOBRmA58K47C+KMbUNjxnhgR2A0MBioBxYBr7gzr9h1SlBFRESk6oWJ1DnAIcDHofBitWYsBh4F7gEecKexyHln0X4YZSF1wFxgGvAI8KQ7mU7ifBj4SFh83J2zOnmNQm1MB3LrBV/vzqUdnV9m2/2AzwJHAgcBIzo4dxpwNfDH/J9bCaqIiIhULTNGA5cCpwKlbHazEfD58LHEjN8D17izKO+8YQS9sJ3ZGTiCIJmdacaP3Lm1g/M3jbQ7rYT2C9mKdQlq0QSyi96ktJ8bgp7V3wOnmXGMO4tzTyhBFRERkapkxk7AvcCWeU9lgNeA+QS390cAY4HtaD9/ZzTwY6A/8L0eCGlL4K9mTAS+0VlvakINzis78A7wIcHt/f7AbsC4yDn7AA+bsU+uR1oJqoiIiFQdM3YEnqZ9QjUX+DlwhzsrClwzCjgYOBvYt8yXnACsipT7E/TG7gwcT5Ck5ZxDME7zwjJfI0n+A9wI3O/O0ugTZqSAo4D/A8aE1bsA3yV4/zWLX0RERKqLGUOBu2mfnN4NfMydPxRKTgHcWerOre7sRzC+8o0yXnamOzMijzfdecKd37jzSeA0oDly/vlma8eabkheAia5s587f85PTgHcybrzD4L3MPozn2kWjP3tUoJqZjVmdoOZvRR5/MPMhnSlPREREZEKugj4aKR8J3C8Ow2lNuDO48AewDU9EZA7twA/iVTVEIyL3aC4c7g7k0s8dxpwW6RqM8Lxq2UnqGaWBm4CvkwwhmA3gi7q77r76nLbExEREakUM8YQ5DA5s4Az3cmW25Y7Te58HfhZD4X3e6AlUp7YQ+0m2Qt55XFQZoJqZkYwXuDkSPUcYJK7f9Ct8ERERER631cJxn/mXOLOyu406E5d90Ja284qIJpPjSt27n+RtrxyBspIUMPk9FrgzEj1bJScioiIyIbjsMjxCuCWuAIpoj5y3De2KCpnfF55PpQ4iz9MTn9HMGstJ5eczuiR8ERERER6UTg5akKk6slyxp32tnCC0OaRqmrYteqgyPEid2ZB6T2olwBfi5SVnIqIiMiGZgLrFqgHeCauQIrYm2BeT07S4utRZuwF7B6pujN30GmCama/oP1WXbOAA5ScioiIyAZmVF45MbmMGX2AX+VV3xFHLJUQbol6daSqBfhNrtBhgmpmPwF+FKmaRdBz+mFPBikiIiJSASPzygXXO620cGWBe4G9ItX/dOfFmEKqhKsJVoLKucSd93OFomNQzezbwE8jVTMJktOZPRufiIiISEUMyitXcvzp/masCY/TwBCC8aafINhVqV/k3Dm0n5T+X8WMrwOnR6r+TbiDVE7BBNXMvkn7buaZKDkVERGRDVv+clJDK/ja/yjxvNeBY9xZ1JvBxMWMLwBXRao+AE52D5aXylnvFr+ZfZXIGADAgc8pORUREZEN3LK88ohYoihsOXABsLd7csbG9iQzTgRuYF3+OQc4qFAynt+DuguwHwT7oObaA24ws/3dPRFjNURERES6YHFeefsKvvaTQGukXE8wBnY28DQwpcQlr6J715e0XGhUuJRVtIOyqdw2usKM4wnWnM2torCAIDmdWej8/B8s19XtwCpgWFj+OPCAmX3a3esRERER2fBMJUjwcgvgT6rgax/j3iOTsqLbyvcrelZxA2jfEdmtXbRKYcaXgD+wLu+cCRzsznvFrik0i9+BbwL7EnQ35+wN3Gtm1bCrgYiIiPyXCXsoo3u/72HGpnHF00WrIscbFT2ruLF55V5NUM34CXAj65LT14F9OkpOYf0ENQN8yd2vdvdpwOG033LrQOBvZpZGREREZMPzYOS4FvhuXIF00duR463D9VPLsWNeeVo34ynIjLQZ/0f7FaGmAAe4d75DVn6COsXdb8oV3P154ATaj5k4Brgm3P5UREREZENyHVAXKZ9t1m7707KY0ceMXbofVsmia6P2Bw4u8/r/iRy3AK91O6I8ZgwiWNf17Ej1fQS39Usa5pCfoHr+Ce7+APAlIBup/gpwUVnRioiIiMTMneXANZGqvsDfu3Kr34wtgf8An++Z6Eryb9rf3f6xWWlb14fxRmN92L3dpKtuC9/H/wBHRKqvBI4tcRIYUMJWpwDu/leCcalRPzCz75X6QiIiIiIJ8XPg1Uh5a+B5M/Yr5WIzhphxQdjGHr0QX1FhD+SfI1V7AL/rLEk1YwRBr2Z0YtXVRU7vEjN2BZ6DtT3KbcBX3fl2/jqnnSl5eQJ3v8bMNgXOi1RfZmYr3P2P5byoiIiISFzcaTDjGOB51k002hh40oyHgL8SLAs11x03oy8whmAr0kOBo4HhlY98rQuBI4HNwvJXgQlmXAI8Fu2pNGMsQbwXAOMibdwJPNrDcX0Z2CRSvg/ImHFWme08Ve76WT8k2Mc2t/2WAb83s1XufkeZbYmIiIjEwp2ZZnwCuAvYPfLUoeEDguSqnmBb0o7kr6/aq9xZEq4r+jDrlgjdi6CHtM2MJQTbuA4jyNvyTQVOd19/aGcPOzZ8lOuskm7x57i7A+cQZN05aeAvZnZIFwIQERERiYU7swmW1TwfWFLglDTFk9M1wJ+ACe5c0TsRFufO88CewCt5T9UQ9JRuzfrJqRMMD5jo3m491cQpewcCd8+Y2ecJMvZPh9V9gLvDhfyf6ckARURERHqLO03ARWZcCRxHsHj/J4EtoN0STmuAGcAzBLf/73dnTQdNvwNE7y639GTcAO68a8buwGeAUwh2A81f59QJlqaaDFzrzps9HUfEVNr/zF01owa4LFLxYSlXuXuLmR0HnEv7JHcfM3vO3bNFLhURERFJnHDc5s3hA1i7XNIwYJk7jWW2dx/BGMxeFd6m/2f4wIzhBD2ngwg2XFrmTkV2AXXnRoJF+butxt3P6/y0QkH4aoIucREREZH/OmEPaUe9pIkTzvLviS1VY1XWGFQRERERkd5W9hjU3tbgLfx9Vf543/gtbK1LPdXwAc3eFncoBb3cMJsZbcvTSXzvcpq8LZGfbU5Dtjl1f900xtV0Nlmz8qa3LGZpWz3vsIi0JfP/le+3LGVVpjH9dP0HcYdSVMazJDm+Fm9LvdY0j3mtvbo1dpctbF1NSzaT2PdwXutKVmUaU0mND6DVs0yp/wAjmZsxLs3Up9qanactWe9hXTbOFZ0kDolLUJto8idr709cFthc6zUz0suzTbVvlLXQbKXMqiFdl3V7svb+1s7Pjoeb1yY5vlSN17xa81Rmei2JG0O9tA1rTHl6cXqVe3puIr+Di4x0vTnT0i8m7vc3x1Nek+T4sinSH6Teyi5MJ+87CLAcT7ellzMtPTeR72FdllSreSrJn3E67TVvpl9KbHyr8XQDKzyVnpeovzMtjDWCGfVSJRKXoG7Uz+3BT3tt3HHkO+BB2s7YhppTtvZEdl/9eho8u4TWOyYl773LGXUrnsTPNmf8HbT9fh+v2W5Y8v4IPjQPfvIKvtso7PBNPXG/twCTF8Lj82n76a7JjA/g5Ml4kuM7+xnaztyGmm2GJnP41S+nwRYD8ePHJ/M9nLocbnmPTJI/45Mn4xfs4jWpZHagcvnrtG091Gs+u0Wy8oOFjc5ZU+KOQiopkX8ERURERKR6KUEVERERkURRgioiIiIiiaIEVUREREQSRQmqiIiIiCSKElQRERERSZRELSMhIiIikgRmDABGhY/VwAp3lsUb1YbJjI2ATYDhQCuwCnjfnYZi1yhBFRERkapnRn/gOOAQ4CBgTIFzlgGvAo8C/3BnegftfQ44s4OXrAOagFnANOAxdxaVEOcfgS3C4rPuXNDZNQXaeJh1d9HvcOcP5bbRSfsbA0cChwJ7AOMKnJY143XgduBad1ZHn1SCKiIiIlXLjD7AOcD3KZxIRY0EDgwfl5rxHPBr4G538nff2pIg0S1VNkwcz3eno33B9wa2D4+L9kB24kDW7cw1tYttFGTGRcC5dJ5jpoBdwse3zDjZncejT4qIiIhUHTNGE/SG/ob1k9NGYDZB7+YiKLgF8V7A34Gf90A4KeAw4Hkzzu6B9uKyE+snp1lgIcF7OQdoznt+I+BBM/bLVagHVURERKqOGWOBZwl6OnOageuB24Dnor2iZtQAnyS4bf0F2ie0pWzj/SWgPq9uHEEP4hEESRoEudn/mdHgzs2l/jwJ1ATcGT7+487yVxnMZwAAIABJREFU3BNmpIH9gYuBPcPqWuBPZnzUnawSVBEREakqYbJ5O+2T01eBY935sNA17rQBTwJPmvEz4CvA+QS3/UtxrzsrisTTH7gQ+F6k+mozHi5lXGrCtAC/Ai6OJqVRYeL/77DH9D8E41QBtgImAk/pFr+IiIhUm/Ng3e1k4Hlgv2LJaT53Gt35DbAz8ER3gwnbOxe4JlI9GDi5u23H4BR3vlssOY1ypwW4NK/6Y6AxqCIiIlJFzBgE/L9I1UrgRHfqym3LnXkEE6Gu76HwLqL9WNeDe6jdinGnscxLPsgr9wMlqCIiIlJdzqD9bflfujOzq425k+1ouaky21pA+4Rtk55oN+E2ziu/A0pQRUREpLocFTluBH4fVyBFrIwcD44tiso5LXI8m2Ccr2bxi4iISHUwox/B0lA5Tydwd6ixkePFsUXRy8wwgqEWJ4VVWeCccFyqElQRERGpGhMIxziGpsQVSCFmfAzYLFLV0YL9G4xwM4SBQF+CpbX2JFh2Kzd7vwk4w51/5a5RgioiIiLVYmxe+e1Yoiju4rzyvbFE0fOOJljWK189cA/wc3fejT6hMagiIiJSLfLXLC24LmmlmVFrxm+AYyPVLwIPxxRSpTwE/A3Wn6SmHlQRERGpFkPzyqsr+NrDzNYeDwwfmxPc7v4isHXk3Drgy+54BePrTWuAGcAgYDSQeyc+Gz7mm/F9d/6Su0AJqoiIiFSL/LVOKzlLfkaJ5y0BjndnWm8GU0nh2NJ/wdptTjcC9gG+A+xNsNTULWZs6h4s3K9b/CIiIlIt8nc3GhFLFIVlgb8Du7sHSy39N3In484Cd+4C9qX92NSLzNgN1IMqIiIi1WNpXnmrCr72Smh3y35F+JhJsJrAg+7BIvWdaI0cl93RGC7vZJGq1mLn9jZ3MmZ8jWASVV+Cn+ebwBeUoIqIiEi1eI2gpzKX2B3A+nvB95at3HtkUlZ03Gz/Llzfj/aJ7aruhdM97iwzYwrwqbBqEugWv4iIiFQJd5YTJKk5E83WmziVdNEEdXgXrh+VV15Z8KzKWhA5HmOGKUEVERGRavJo5Hgg8LW4AumiDyLHHzEru7Nx27zyuwXPqqwBkeOMO64EVURERKrJtbQfd/kdMzbtToNmbNy9kMryYuR4CMEs+HIcEjnOkozdqnaKHM8H3eIXERGRKuLOLFi33ibBTP7bzNr14pXEjIFm3Ax8q6fiK8ETQFukfG6pF5oxnGCL0Zxn3ddbequizDiQ9mvA/huUoIqIiEj1+SEwL1L+JDDZjE1KudgMM+MY4GXg1F6Iryh35gF3RaqONOPrnV1nRg1wC+2X1rqmJ2Mz4/tm3GLGFiWevwlwY171zaAEVURERKqMOwuB44DmSPUngOlmXG7GzuFyTO2YsZ0Z3yZITO8GPlaRgNd3Ae03HfitGX80Y3z+iWakzNgH+A9wROSp54E7eziuFHAK8IEZ95txohljC8Q01IxzgKkEu2nl3OHO06B1UEVERKQKufOcGQcRLI4/LqweAHwvfCwzYz7BrPlR4TlDijSX7eVw23FnuhlfBm4D0gTrmp4OnG7GdIK1VesIthX9GDAmr4lFwOfce20N1DRBMnwEgBmzCXqs6wnex23Dc6JeB87IFZSgioiISFVy52kzdgd+BRxP+6RpZPjoyEvAb2m/G1JFuHOnGUcAf6V9nNuEj2JeAI5zZ04vhDWfYAJabV795rTvKc13F3CG+7oltHSLX0RERKqWO/PdOQnYjiBRfYn2k5CiWgh2fboY2MmdT7hzizstBc5dSDAUIPfI9ELsDxNMMPoR8HYHp7YQ3OI/Adinl5JT3LkJ2BQ4G7gHWNbB6Q3AA8BB7hzn3n49VvWgioiISNVz5z3guwBmDAI2IeiZHACsIVhMfqF7u3GrHbV3M+GEn97kziqChPliMzYiuH0+gmCXqdXAEuANdxp7O5YwnsXAdeGDcAmvjxJsKtA3jGkh8HpHQwyUoIqIiIhEuLOGZCxgX5YwOVwcdxxR7swF5pZ7nW7xi4iIiEiiKEEVERERkUQxd483AOMq4Ju5cspmM2zgFvEGVUBzG5Y2qEmTuNgAmtvAHetXm8z4ANY0YYP6JTe+tiyWMjy13sp38WvNQHMrlk5BTSqZ72FrBrKO9a1JZnwQ/B4nOb5sFiOV3D2oG1uhNo0l9TuYyQa/x0n+jFsyWJ+E/jsCQXzueN+EDQDM+ljqm683GAQckKs+xp174otKelPCvoKw6SiYdf36i+PGbf8f0XbmwdScsn/yYgP49b3wzDu03vn99ZZ2SIyRp+LLbknm+wew5Vm0PXgBNdt1a0fm3vHQK3DB3/Ddt8YO3z2Z7+ETb8Djr9P2i88n7+9Kzkm/xG/9bjLfP4CvXEvbd46mZptK7updhl/eA5uPwj83MZnv4dQZcPMTZK48fb31FRPjpF/if/k2lkro/0Iuu5u2j4yj5rPl7u7eyxaugDN7dM8jSbqE/oqIiIiISLVSgioiIiIiiaIEVUREREQSRQmqiIiIiCSKElQRERERSRQlqCIiIiKSKEpQRURERCRRErteoYiIiEglmbErcDDwKWArYAwwGGgCVgFvAa8DjwCPu9PcQVv7A4d18HIZYDUwB5gGTHMnW0KM3wY2Cotvu3NTZ9cUaONi1nVSPuXOv8pto7sKvD8/dacpV1CCKiIiIlXNjAOBnwD7FjmlX/gYA0wC/heoM+M24Ep33i5wzZ7A98sIY74ZfwEud2dZB+edDmwfHt8H5SeowLmwdkOLFFQ2QTXj4wSxD4lUXwLrElTd4hcREZGqZEYfM/4APEbx5LSYwcCZwJthr2Z3bUyQOL5rxqQeaC+RzBgH3E/75HQ96kEVERGRqmPGAOBBYL+8p54E/gY8RXD7vQEYDYwFJhLclj4Y1m4tbsC4El7yQqAxcs0wYASwKzCBdZ2GI4GHzDjEncnl/lxJFr7n9wGbd3auElQRERGpRr+nfXK6CPiiOw8VOHdR+HgNuMaM8cD5wGmUnktd5c6KQk+YsRXwW+CIsKoPcIsZ27mzpsT2E82MFPBXYPewqgEYUOx83eIXERGRqmLGl4BTI1UzgX2KJKfrcedDd04nSHBndjced2YARxHc+s7ZFDiuu20nyBXA0eHxBwQJflFKUEVERKRqmFEDXBCpagVOCJPEsrjzLLALcG9343InA3w3r/roQuduaMw4B9aO010BfAZY2tE1SlBFRESkmpwIbBkpX+POC11tzJ1V7jzd7aiCtt4FZkeqNuuJduNkxmEEwxcAWoBj3Xmns+uUoIqIiEg1OSFynGFd8pQUiyLHI2OLogeYsRNwO8E4XQfOKnXilxJUERERqQrh7f3oxKjn3PkwrniKGB45Xh5bFN1kxsYEY2oHh1W/KGdTASWoIiIiUi12pv36m1PiCqSQcI3QrSNVb8UVS3eYMZBgOancEIVbCTZCKJkSVBEREakWm+aVX4sliuLOJVgjNef+YicmlRlpgoR0t7DqaeDL7ng57ShBFRERkWoxIq+cmFvoZpxOsIVqzgzgrpjC6Y5fAkeGx+8Dx7jTXG4jWqhfREREqkV+groylihC4S39TwBnsW6Rfggmb53jTmssgXWRGV8D/l9YXAYc4d7xclLFKEEVERGRatGYV+5XwdeeYdbuNvdgCudhLQTJ6SOVCatnmHE4cFVYbCZYTmp6V9tTgioiIiLVIv+WfiWXcRpWwjlvAmf31LqqlWLGIOA2IE2wnNQZ7jzVnTaVoIqIiEi1WJZXzp80VWmtBFulTgH+CdzjTraTazKRYyt6Vsei12WKnlW6vqxbTuppoNmM4zu5Zo+88tFmNOQKSlBFRESkWuQv27Qf625L97YJwKrwuBVY4c6aLrRTFzkue4iCGX1pP0l+dRdi6Mi+4aNcf44WlKCKiIhIVXBnnhnTgW3CqgPM6NuVWeZdMNOdFT3QTjShHFL0rOLyhxrEOlGsGCWoIiIiUk3+zboEdQRwGnB9fOGUbU7keKsuXL9NXrkndtJqBC4r85odgM9Eyr+Bdf9RUIIqIiIi1eQPwFdYNw7zB2bc5t7u1nlZzKit4JJQLwFnhsejzdjRnWllXD8pr/xydwNypwE4r5xrzDiV9gnqT93XDoHQQv0iIiJSPdyZCjwQqRoP/MGs/AlHZpgZ3wN+1lPxleApaLdc1ddLvTAcf/qlSNWb7izpqcB6khJUERERqTbnQbsJSicCfzUrfdKRGR8j2Ir0cip4R9qddwiGKeScbsahJV5+ObBlpPz7noqrpylBFRERkarizpvA6bTviTwJmGbGqWYMKHSdGX3NOMiMmwjWLD2896Mt6KesWx6qBrjTjP81o7bQyWaMNONPwDcj1TOBm3ozyO7QGFQRERGpOu783YzBwDUE63gCbA3cDFxvxgvAbKCeYEH/McCuwMAYwm3HnafNOB+4JKwaSDDJ6CdmPE4wkWo1QdzbAxOBPpEmmoHjuzPutrcpQRUREZGq5M4NZrwB3ADsGHmqL6Wt5bmSYAWASq2lupY7l5rRQjB7PpfPDQeO6+TS+cDn3HmpN+PrLt3iFxERkarlzgvATsDRwCPQ6eL5qwh2fToF2Nidc92Z17tRFubOrwk2ALgNaOnk9GXAL4Cd3ZnS27F1l3pQRUREpKq548C9wL1m1AC7AFsAo4GhwFJgMcEt/zdK2I4Udy4nmJTUq9x5AzgpHDe7F7AdwfquAwl6eBcTLCU1zb1HtjXtEe7cAtxS7HklqCIiIiIhd9oI1hpN9C3wfOFapP+m/Qz/DZZu8YuIiIhIoihBFREREZFEMXfv/KzeDMC4isi6XOnUPB85cte2GEMqqK6hpaZPnz7etyY54zeiGpvb0hlP2aB+qcS9dzkr65prhw3uW6mt4Mq2ur6ldmD/Ppl0qvOxRZXW0tJiDU2t6ZqaWmoT+h1sa8umWjNY/76pRMYH0NDYVjOgf01if0cam9rSffvUeCqB30EI/s6k02n61FgiP+O2TDbV2uap/n3Tif2Mk/4dbGrOplMpp09tOlGfcTa7kdXV/ToNg4ADctXHuHNPfFFJb0rcGNS+g0bbxC8+WnCh2Tg9dduZmfE7HZPebPvDE9nr/N6Lt7B8/uuZPY+6InHvXc79Vx/gSfxscx7545GZCUf/Nj14xJbpuGPJt+jDKbw15f98+JjtbexWExP3ewuwZM5LLJ75XHaHfb+eyPgAXrj/B77DgT9PbHxTH704u+Xun08NHr5FIv/OTH/xZgYMGeebfuzTiXwPVy5+h9lv/tN3mPS9RMYH8OL9P/TtP/WzGrOyd9WsiHef/1N20PDNU5tsc2Ci3sOm+hpeeTjuKKSSEvUFBEil+zBi453jDmM9NX36+8BhmyUyNoCBQx9nzYqZ2REb75y45CrHLJXY9w8AMx86ehuGjdku7kjW07B6Aema/vQdOJJBI8bHHU5Bdctnkq7tnx00YnwikysAM0vs+weQSqWyA4ZsnEpqjLV9BtK3/7DEvofNjStJpftmB40Yn9i/gwCDRmyJWTJ/TWr6Dsz2HTA8cd/BdGK7NqS3JPM3RERERESqlhJUEREREUkUJagiIiIikihKUEVEREQkUZSgioiIiEiiKEEVERERkURJ3DJTIiIiInEwYyCwP3AgsDUwChgONADLgOnAa8Cj7szupK2dgT2LPJ0BVgP1wFzgHXdaSozx+DAmgFnulL1CrBlnArnFeF9z5/ly2+gKM7YDjgyLT7jzQrFzlaCKiIhIVTNjM+A84HSgbwenHhK55mXgJuBP7qwpcu5lJYbQasZk4GbgVvcOd5P7KbB9eHwflJ+gAv8H5NYLvgIqk6ACxwMXhsfnQvEEVbf4RUREpGqZ8Q3gPeCrdJyc5tsN+C0wx4yTuhlGLfBp4BbgFTO27mZ7iWPGGOArpZ6vHlQRERGpOmakgN8DZ+Y9NQ+4F3gCWEBwG34kMA6YCBwKbBE5fxgwAfhbJy95L7S7jd8XGEPQGzo4Ur8z8JwZ+7rzThk/UiKZMRQ4DLgE2LjU65SgioiISDW6gPbJaTPwY+B37jQVueYvAGYcDvwE2KOM1/uSOyvyK82oJUjgLgVye22PAm41Y093Wst4jUQw40vAtwgS+7F04Y69bvGLiIhIVTHj0wTJaM4q4BB3ruggOV3LnX+5syfBmNX67sTiTqs79wF7Aa9EntoVOKI7bcdoM+DjBD2mXco11YMqIiIi1eYy2idOX3bnyXIbcedGM6YQ3JbvFndWm/F14JlI9eeAe7rbdgzeAu4oUH8s6yZndUgJqoiIiFQNMw4l6J3Muc2du7vanjvvAu92O7DAc8AigrGpwIY5WcqdO4E78+vNaAD6l9KGbvGLiIhINfliXvmKOIIoxB0nWBc1Z6O4YombElQRERGpCmYYcECk6jX3duM+kyDaw1gXWxQxU4IqIiIi1WJb1t0+B/hPXIEUYsYQ4KORqg/iiiVuSlBFRESkWmyVV345liiK+wrBov05D8UVSNyUoIqIiEi1GJlXXhJLFAWYMRH4WaRqGZ0v/v9fSwmqiIiIVIsReeX1Fs6vNDPGm3EJ8DjQL/LUee6sjims2GmZKREREakW2bxySWty9pB/mK3dFaoWGARsyfq9ugC/cuePlQosiZSgioiISLVYllculBz2lv1LOGc18C13buztYJJOCaqIiIhUi/wEdUzBsyorA0wF7gd+587yTs6P9gJbD7y+90AbPU4JqoiIiFSLGXnlTwLXVei1jwHWRMr1BGNg57mXtd5ptI2+5QZhRi3thzYkcpyrElQRERGpCu5MN2MesElYNckMC3dw6m1PuvfIpKxoQjmwC9cPySuv6kYsvUaz+EVERKSaTI4cbwocGVMcXbUocrxlF67fOq88r+uh9B4lqCIiIlJNbs4r/9hsg7qjHN1cYGMzNi/z+n06aC8xlKCKiIhI1XDnEeCFSNVuwIVdbc+Mw834drcDK92z0ZcHTi/1QjMMOC1SNded2T0VWE9SgioiIiLV5jyC2fM5PzDjh+U0YMYgMy4lmH0/rieD64g7LwCvRqq+Y8aOJV7+dWDXSDmxa60qQRUREZGq4s4TwI8jVQZcZMa/zNilo2vNGGvG9whWBPg+PbPUU7kujhwPBB4y41PFTjYjHfbyXhmpXkXlVjAo24Y05kJERESkp1xKsA7q/0bqDgMOM+Mt4AlgLsGs+dHhuXsBuxBPUrqWO3eY8UfgjLBqE+BxM54FHgZmAg0EW7tuD3wG2CraBPBFdxb2RnxmHAh8usBTtZHjw8zW2yhhpTuXghJUERERqULh0lL/z4wXgWtpv/zS9uGj02YIEsLbej7CTn2dII/7YqRu7/DRkSbgq+7c00txQbC+7Pc7OWdS+IiaRfAfB93iFxERkerlzl+BLQhu+c8v8bJcIrWdO4e5V34mvDvN7nwJOAF4o4RLssC9wF7u/KlXg+sB6kEVERGRqubOSuAXwC/M2AaYSJC0jgCGAcuBJQTjTqe4M6uEZm8GHo+Ue2XHJnf+bsYdwM7A/sC2wEhgEEHcy4CXCDYKqNSM/euBB7pwXUvuQAmqiIiISMid6cD0HmhnIfTOGM8Cr+UEM/tf7ezcSnBnAbCgO23oFr+IiIiIJIoSVBERERFJlMTd4m9trmPaUzfGHcZ6muoWp+e++whNDcviDqWghTOepm75jJppT10VdyhFZTOtluT4PNOWfu+lW+g/eEzcoaxn5aK3aapfzPIFb5DNtsUdTkGrl75Pc/3S9Kw374s7lKLcs5bk+NramtOLZjzNysXvxB1KQXXLZ9DW2khS38OGlfNoaVqdSmp8AI7b7Df/CRbrKkVFNayan25rXoOlazs/uYJamwYCB8YdhlRQ4hJUa1zDkEeTt26sN8wktWo5Q955Ke5QClrSsoRspiGR712Ot9T7kEevS+ZfZSBbv5h+z/yNIan+cYeynpbMGmhejK1ezoD5pYzNr7yGzBq8bQ0Dpj4UdyhFeWujD5j6UGK/gzUtdfSdPoUB1jfuUApKtSyhtm41AxZ3a2hZr2nNNOBtqxL9HaS10fu/+lC442Ty1LQuo9aWMGBZsjpjWnwUSlCrS+IS1BHpAVy78efiDmM9J8/5c+aEoRNqjhqyU9yhFHTjimd5uXFu2zUbH5+s//ZG7P7B5Yn8bHP2//CqzM82OqJm6z6j4g5lPU/Vv8+Vy55gp74bs/+gj8YdTkHPN8xiSsMHmXNGTkzc35Wcby24i3NGTow7jKLOX3R/5tghu9SM75O/dnUy3LDiWcbVDOHwwTvEHUpBbzUt5B91r2XPGTkxHXcsxXxrwV2cPXIiqYQmqH9Y/nRmiz4jaw4ZtF3cobSztG0QP1wUdxRSSRqDKiIiIiKJogRVRERERBJFCaqIiIiIJIoSVBERERFJFCWoIiIiIpIoSlBFREREJFESuxyMiIiISKWZsRlwEDAeGBU+6oCVwDvAa8DL7mQ6aWcssEkHpzQAjcB8d1rKiG8HoF9YXOnOB6VeG2ljAqxd62yRO3PLbaOE16gB9gR2BXYERgNDgDXAUuAl4BF3Pix0vRJUERERqWpm9AFOB74BlLII7DIz/gnc5M7kIuecBlxWQlutZkwHHgb+4s7UTs7/O7B9eHwfcFQJr5HvBSC3XvAVwLldaKMgMyYBZwGHAUM7OPUMIGvGv4Bv5iequsUvIiIiVcuMg4D3gWspLTkFGAl8EXjCjJfNOKAbIdQCOwDfBl42469mDOlGe3G7HTiRjpPTnBTwGeA1M/aPPqEeVBEREalKZnwT+BXt86E24BngCWAhwe390cA4YCLBbevobmUTgCOgaE9qzkwgm1e3ETAoGhJwMvBxMw5yZ3HpP00itQEvAlMIfv6lBMn9BOB4WJuIDwbuM2Mnd2aBElQRERGpQmacAlyVV30LcL47szu4bjhwJvA9gvGppZrgzooC7W1DkKx9BxgeVn8cuNGM/3HHy3iNpFgA/Aa42Z2FhU4w4wfAbcCnwqohwM8JhkboFr+IiIhUFzN2Aq6LVLUBZ7lzWkfJKYA7K9y5nGAS1W+gewmkO9PduQjYHdq99hHAft1pOyaXAdu4c3mx5BTAnSXA0cD8SPUxZvQFJagiIiJSfa4ABkTK33fn+nIacGeNO98iSCTndTcgd2YQTNKK+nx32600d37lzpoSz60D/hqpGgR8FHSLX0RERKqIGbsBB0eqJgNXdrU9dx4EHuxmWDn/IljOalhY3r6Dc/9bvJdXHgnqQRUREZHqcnZe+eKkjPN0p41gMlHOuJhCqaS+eeV6UIIqIiIi1eVTkeMZwGNxBVJENDdrji2KytkhcuwEn4kSVBEREakOZmwBbBWpejIpvacA4QShj0SqOpywtaEzIw38T6TqTXeWgxJUERERqR75C/E/F0sUxR1P+8lbj8cVSIWcSvvtYG/JHShBFRERkWoxMq9cdBmkSgt7d38VqWoEbo0pnF5nxnjgl5GqhQS7eQFKUEVERKR6jMgrr7dwfqWZUWvGycALBDtL5fzKvfvLVyWRGf2Bu1j3H4YscHp0eSotMyUiIiLVIj/vyVTwtX9iRlN4PBgYCGwO7Mq6ZaVyHgB+WrnQKiccd3ozwc+dc7k7/4qepwRVREREqsWyvHJ+j2pv+t8SznHgt8B33SuaPFeEGSngz8Bxkeo7gfPzz1WCKiIiItVieV55dCxRrK8eeAi4yJ2pcQfTG8ww4HrglEj1A8DnCyXjSlBFRESkWszJK38C+FOFXvtCgolPEPSUriDYNepD4NVwkf5S1EeO+5QbRHiLPR2pKmlb0u4wowa4DvhypPoh4Dh3WgpdowRVREREqsUbBInh8LA8qYKvfZV7j0zKWh05HlD0rOIG5ZVXdSOWToUTov4GHBWpvg34QrHkFDSLX0RERKqEO1ngyUjVtmbsE1c8XbQ0crxpF67fMq+8qOuhdMyMYcDDtE9OryW4rV80OQUlqCIiIlJd7sgr/yiWKLru1cjxFmbrre3amd3yyr0y5tWMzYCngH0j1T9352vhfxQ6pARVREREqsnfgfcj5cPN2o2NLIsZ25q1m/jT216IHKeBk8q8Pnr+CmB6tyPKY8ZuwPPAx8OqNuBsdy4otQ0lqCIiIlI1wslIF+ZVX23W7jZ0ScLE9EVg556IrURPArMi5R+ZtVvgvygzjgAOilT9xR3vyeDC9/FJYFxYtQo4wp3rymlHCaqIiIhUFXf+AtwQqeoP3G3G5WZrJ1AVZIaZcagZzxHsHZ8/6ahXhUsyXRmpGgs8GG6VWpQZnyaYrJTTClzdk7GFCftdBJsQQJBIT3TnkXLb0ix+ERERqUZfBzYDDg7LKeB7wFlmPAhMBuYCdQRbco4D9gQOAcZUOtg8VwOfYV1v6ATgLTP+QjApaRZB3KOA7YCjw/OjznPv8dv7e9J+CatZwAVmZbdznRJUERERqTruNJlxOHARcC6QS6OGAieGj1LMIpgMVDHuZMw4CbgX1q5CMAA4K3x05te074XtLft18bpHdYtfREREqpI7GXfOI+iB/Dt0Prs8lCHYBek44CPu/LOXQizKnaUE67j+nPZro3bkPeB4d77T02NPe5p6UEVERKSqufMqcEI42Whi+NiS4Nb+QILb5QuA2cDTwJQSFt2/l2CXqJz6Yid2VbiW6AVm/Bo4kqDHcltgBNCPYJeoJcDLBEMWHipliaduuJGe6U1+WQmqiIiICODOYuDu8NHdtt4F3u12UKW91krg5vARG3em0kPrquoWv4iIiIgkihJUEREREUmUxN3ib/RW/lX3VtxhrGdpZk3qxcbZ1Fri3jIA3miaz9zW5akkvnc5LZ5J5Geb05BtSU1e8x7v1i6OO5T1vN28kBWZBt5vXcrAxn5xh1PQ+y1LqMs2pV5qnBN3KEVl3ElyfK2eSb3TvIhlmYa4QyloSdsaPMHv4ZzW5dRlmhP9HWz1LK80zmHdhPHOx56kAAASUElEQVRkWZ5pTFnL8sR9xnWZYXGHIBWWuGyrgUa/M3tnW9xx5FttXvMay3x+9pXExQYwF0/XGak7s3e2xh1LMRm8NsnxpWq89lF/NDMg26sDyLtkhWOrzdPOSq/PzsrEHU8hS7Ok6/HUM9kpifwdAfCU1yQ5vrYU6df89WwSv4MAi7Kk69PLaMjOTuR7WOekmizZ38FU2mueyT6T2PiW4enVWfPG7JxE/Z1p9rFG+/U15b9c4hLUMf3cJh/utXHHke+AB2k7YxtqTtk6ebEB/HoaPLuE1jsmJTM+gFG34kn8bHPG30HbTft5zXbDkvdH8KF58JNX8N1GYYdv6on7vQWYvBAen0/bzyckMz6AkyfjF++e3PjOfoa2r25LzTZDkzn86pfTYIuB+PHjk/dvB8DU5XDLe2SS/BmfPBn/xW5ek0pmByqXv07b1kO95rNbJOszXtjonDUl7iikkhL5R1BEREREqpcSVBERERFJFCWoIiIiIpIoSlBFREREJFGUoIqIiIhIoihBFREREZFESdQyEiIiIiJxMiMN7Ax8BBgNDAJagJXA28Ab7tTHF+GGw4w+wI7ArsA4YAiQBVYD7wHPuVNwVwglqCIiIlL1zJgIfAM4CBjRwakZM54B7gH+5s6CIu2dC1zWQTtOkPTOA6YBjwD3uLOikzjfBLYPi/e5c1RH5xdpo411Gx9c4c655bbRQdsDgBOAY4FPAQM6ON3D9/Kn7jwWfUK3+EVERKRqmfFRMx4F/gN8jo6TUwgSu32BXwEzzbjJjG278tLAcIIexhOBG8P2zgt7cTdUtxL8LJ+h4+QUgvfgk8CjZlxutm4PYPWgioiISFUy49PA7QSJYtQy4GlgLtAAjALGAHvnndsHOA1YDHyvB0IaAlwC7G3Gie409kCblZafXLcAL8L/b+/eg6UozzyOf5/hEpSrgEoEFIgYb6uGoMGEFZWNyeIlkkQjpagbEy9LNpYbs7i6UWOFLBhKTQyJESspgwYrEcR4WRVvxEVxFRcxukoUQRCRi3I9wOFwnv2jezjdw5xzZs6ZmW7p36dqqvp9p7vnYRyox7ff93lZAqwlmDIxABhJ/H8GfgisBm4BJagiIiKSQWacBDwCRLfgXghcBzzpzq4i13QARgCXA+PYMxlrSe/o43szehIkvscC5xCM3uafbJ8FTAUmlHH/tHkamE4wDaGu8E0z9gGuBf4j0v1jM+50Z4se8YuIiEimmHEQwchpNDn9BXCCO48XS04B3Nnlznx3xgNHAXPbGoM7G915x53Z7owjmPu6KXLKFWYc09b7J2ghcKo7o925r1hyCuDONnd+BPwu0t0NGA2agyoiIiLZczPQL9Ke5s6V7jSWegN33gK+CkwEdrY3IHeeIT5NwAimD3yiuHNj+Gcp1d0F7YNBj/hFREQkQ8wYTLDKPO914Oq23CtMaG+uRFyhGcCtNC0uGl7Be6fVxoL2DtAIqoiIiGTLBOIDdJPc2Z5UMFHhoqilka5PJxVLDR1d0P4fUIIqIiIi2XJa5PhD4P6kAmlGfeTYmj1rL2BGJ+CqSNc8dxaBElQRERHJCDP2Jz5i96x7++ePVkpYJWBwpGtVUrFUmxkDgYeAYWHXGuCf8u9rDqqIiIhkxbHERyVfSCqQZvwD8Tqr85IKpJLCZHQE0IugnuwI4MsEdWQBFgHnuvNu/holqCIiIpIVfQra7yUSRRFmdCdYIJXXSFAKa29wIsX/LHMJykz9yZ2G6Bt6xC8iIiJZUZigtrjvfa2E9U7nAUdEume480ZCIdXKkcBJFKlWoBFUERERyYp9Ctq1XL1/kVmsaH0PYCBwPMEIY9RfgX+pVWA18A5wJ8Ej/f0JqhMcDfQn2JXrcjPuA77jzlZQgioiIiLZUThiul/Rs6rj1tZPAeAJYJw7m6sZTC25sxC4LNoXTmm4CrieYMvY84CeZpzujusRv4iIiGTF+oJ24SP/JC0BLgLGuPNR0sFUmzub3bkJ+EGk+x8JElWNoIqIiEhmrC5oHwvcU6PPvptwl6TQDoIR3eXA/HDr1FJsixx3KjcIM3LE1yDVNXdujUwDriN49A9wMTBTCaqIiIhkxSKChCy/legpNfzsq9wrsihrU+S4cE5tKfYlXmqrcKvRmnKnwYwFwJlh1zDQKn4RERHJCHd2APMjXZ8z47NJxdNGGyLH/dpw/YCCduG0hyREk+TeZpgSVBEREcmShyLHOWBiUoG00WuR4yFmu0eDS3VMQXtxO+OphOhc4E1aJCUiIiJZ81tgbaR9kRmj23ozM3qZcWr7wyrZy5HjzsBZZV7/9cjxNuD1dkfUDmZ0IthZKm8p6BG/iIiIZEhYZ3NqpCsH3GvG35V7LzM+DywkWH1eK09BbJX/DWZ0KeVCM44FvhnpesCdnZUKzIyhbRjRnUC83NejoARVREREsucWgkQv70Bgvhnjw1XuLTJjkBl3AS8AQ6oUY1Hu1AG/iXQdDvzBrOUFU2YMAf5MUHM07/YKh/dNYIkZl4d1TltkxlhgSqSrjqCgvxJUERERyZZw3/fzCGqP5nUHfg+8asa1Zow0Y6AZ+5lxWNi+2ownw+suoQ1lnipkEvFH82OB1834nhmHmvEpADO6mXGCGT8lmLt6cOSaae4sqEJs/YFfA6vMuMeMb5txlBl9zegUfqfnmvEwMJtgmkLeje6sANVBFRERkQxyZ50ZXwBmAGdE3jqaIAEs1Q7iiW7VubPVjG8Acwm2SwUYTGRE1Ix64slf1GPEC+RXQzfg/PBVil+787N8QyOoIiIikknubAC+Boyn/MVCy4AbgcHuTK9sZK0LC/sPBx4EvMgpxZLTOuDHwBlhya1K+wvwfJnXrAcuceefo50aQRUREZHMcqcRuMeMPwAnAaOAkcAhBOWPegNrCFb+Lwf+G5gHLAivbc6LxOdXbq9C7GuAs8PFT+eH8R8Ju+d/ehj3wjDm37rHKhhUOp75wJfMGAh8heB7PBY4jKbNERz4AHiJYCR3RrhwLUYJqoiIiGRemGw+G74qcb95BElh1bnzKvBqvh2WbupWoZ2r2hLPCuCu8JWPqTPQtdSYlKCKiIiI7EXC0lGJJKfNcaceqC/1fM1BFREREZFUUYIqIiIiIqli7sUWftUwAOPnwPfz7Zy9R899D0k2qCLqd2Edc5CzoivlEle/CwysU4d0xgdQV4/t2zm98TU6ZoZb0oEUsXMX1DdgnTqApfQ32LALPOW/wZ0NWKeO6Y3PGzFy6fwNAmzfCZ07YLlcOr/DxkbY5en+DTY0Yh1T+v1BEF9jI945ZRMA3fuxdcd0CyoXnZzvHuvOnOSikmpK2U8QBvSF5dNJ3b/Po66j4bun0fGCUemLDeCWB+H5N9l5/8TEiga3qs94fP2MdH5/AIMupeG/rqfjEQOSjmRPj70C18/Eh38GGzM8nd/hM6/BU4tp+Mn56ft3JW/cVHzm1en8/gAu+xUNPzibjocdlHQkxU2dAwf3xc8dmc7v8H+Xwu+fYdetl8R2ykmVcVPxe/8Vy6X0+eWU2TQc+mk6fuPEpCOJW/0xfHda0lFILaX0r4iIiIiIZJUSVBERERFJFSWoIiIiIpIqSlBFREREJFWUoIqIiIhIqihBFREREZFUSW05GBEREZEkmNENGAj0BfoAW4D1wNvubE4ytqxQgioiIiKZZ0Y/4DvAacAIKFpX3M14G3gSeAB4xp2GZu53KTCxhY/8GNgGrAReA55w5+US4nwcODRsPuXOpa1dU+QeS2B3veDp7kwu9x7tZcYNwIWRruOiyb8SVBEREcksM3oCNwKXAfu0djowNHxdAbxnxu0ESd7GgnN7AUNKDOM8YJIZrwPXuPNwC+cOiNz3ryXev9AQmhLU3m28R5uZcTHBdx4Vm3aqBFVEREQyyYyhwJ+Bw4u8/TdgNcHj/d5Af4LkMOpg4GfAgcAPKxDSUcBDZkwGrnVP77a4bWXGKcBvWjtPCaqIiIhkTpicLiA+grgOmALc587KItcMAr5KMNp6XJkfeSqwKdLuBPQDjgHOAY6OvHcN8BFB8rvXMONwYBbQubVztYpfREREMsWMrsBs4snpE8BQd6YWS04B3Fnmzh3AMODrwDtlfOwidxZGXgvcmePOTQRJ6vcgNp/1J2YcUs6fK83M2B94BNgv7HqrpfOVoIqIiEjW3ER8xPJR4Ax3NpRysTvuzgPA54AZ7Q0mvN80YFKkuzMwvr33TgMzugAP0jR3dg7wny1dowRVREREMsOMPgSP6PNWARe5s7Pce7mz2Z0LgZsrFN4vIBbHqArdNzFmGHA3cGLY9TJwPtDY0nVKUEVERCRLrgC6RtqT3VnXnhu6s7Z9Ie2+z0fEpw0cVIn7JmwScG54vBw405261i5SgioiIiJZMiZyvAn4XVKBNGNL5Li1slepZsa3gX8Pm5sIplGsLuVaJagiIiKSCWZ0B4ZHuv7iHksI0yBayqqkZC6NzBgN3BE2G4Bz3Euv26oEVURERLJiGPEdouYnFUgxZgwnKD2VtyCpWNrDjCOA+2n6rie480Q591CCKiIiIlmxf0H77USiKMKMjuy52GpWErG0hxkHEJST6hV23ezOneXeRwmqiIiIZEWfgvbHiURRINxudSZwSqR7rnu6RnhbY8Y+BOWkBodds2iag1oW7SQlIiIiWdG9oF3L+afHme3eSaozQSWBQcDxwLeAnpFzPwQuqWFs7WZGjqCc1Iiw60VgvHvL5aSaowRVREREsmJjQbtn0bOq4+kSz/sbcLY7K6oZTBVMItiyFWAZ8DV3trX1ZnrELyIiIlmxvqDdu+hZydgKTAWOd+eNpIMphxn7AdeEzQ3A6e582J57agRVREREsqKwIP/hNfzsRcCuSHszwRzY94DngGfCQv2tqY8cdyg3iHBnp+gA5Y5y71FE9H7vAFeatXrN0IL2bWZNfzYlqCIiIpIVrxBsJZovf3RyDT/7VPeKLMraFDluSyH/fYBo+rihfeHs4fPhq1wXRxt6xC8iIiKZEBblfznSdaJZrO7oJ0F0Hm3fNlx/YEG70glqRWgEVURERLLkMeDE8LgzcBUwMblwyvYmcGZ4/BkzOrrTUMb1RxW0KzHfdSPxHbpKMQa4KdI+mUhVBSWoIiIikiV3ECSk+4btCWbc3daFSWZ0AIa682alAmxFdAS4KzAaeLyM60+PHDcQzI1tlzBBXljONWYcWdC1yL1pdFiP+EVERCQz3FkDsZ2NugJ/Mttjl6lWhdMD5lLbmqVPQ6x803XhwqdWmdEfuDDS9VR7SkFVkxJUERERyZrrgf+LtI8EFpgxrJSLzehixpXAq8R3f6o6d9YB90a6/h6Y3Np1ZnQDZtM0cgzwy8pGVzlKUEVERCRT3NkMjCW+QGgI8JIZ95lxlll81ykzepnxFTNuJSildBtwQM2CjrsBYnVG/82MJ8wYZRafvmlGDzPGAYuBEyJvPRq+UklzUEVERCRz3HnLjBEEo4r5+ZA5gm1HvwUQbk26Edgf6NLC7TZXMdQ9uLPKjPOAR2gaEf1y+NpqxkqCBUd9gAHsme+9RTu2Ia0FjaCKiIhIJrnzFsHe8TdTPMnsAQykeHJaD8wCTnaPrUavCXeeBb4ELCl4qyvwWYJapIPYMzmdDXyhxE0BEqMRVBEREcms8HH/RDMmAxcAo4CR7Fkv1IEVwHxgHjArnA/anGXAk5H2zkrFvDsgZ5EZRxGM+F5AkLB2L3LqSuBZ4JfuvFjpONroA+LfT6xUlhJUERERybxwl6fbwxdmdCF4RN6DYK7q2nLqjbrzR+CPVQi18HMaCBZN3RvOP+0P9Aa6EWylus6d1dWOo1zuPEk8QY1RgioiIiJSwJ3twPvh6xMhTFaXh69PtNQlqJvqejBldvo2dFix1nIPv+S8vz7pSIp77g1YvsZyU2Z70qE0a3s9TJmddBTN21RnubvmOgf0TDqSPS15fykffOy88i7U1ScdTXFLV8OaDZa7//n0/gbrG+D+55OOonlbtlvu6cXO4mVJR1LcirWwqQ5yKf0OV30EH28hl+b/xvUNMOsFsJKqVtbeynWW21bveMr+Gm/Z3i3pEKTGzBP+FZrxc+D7iQYhknqLoayd7ERE9kZdaFpwz1h35iQYjFRRGkZQ3wVeyNnyYY1+yKeSDkYknY5JOgARkVTI2bIPG33QUiClzzSlEhIvM+XObe58sdGX/SjpWERERCTdGv1XY9z5ojvPJR2LVE/ij/jzwoKzM5OOQ0RERFKtn3tsFyXZC/0/Tc95AoNRmtsAAAAASUVORK5CYII=" width="250"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=1c9e4c8a">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Static-vs-dynamic-load-balancing">Static vs dynamic load balancing<a class="anchor-link" href="#Static-vs-dynamic-load-balancing">¶</a></h3><p>Load balancing is the process of distributing work to processors uniformly with the aim to efficiently exploit a parallel system. There are two key forms of load balancing: Static and dynamic load balancing.</p>
|
||
<ul>
|
||
<li><strong>Static load balancing</strong> the work distribution strategy is based on prior information of the algorithm and it does not depend on runtime values.</li>
|
||
<li><strong>Dynamic load balancing</strong> the work distribution strategy is based on runtime values.</li>
|
||
</ul>
|
||
<p>Static load balancing is often used in algorithms for which the load distribution is known in advance and it does not depend on runtime values. On the other hand, dynamic load balancing is often needed in problems in which the work distribution cannot be predicted in advance and depends on runtime values.</p>
|
||
<div class="alert alert-block alert-success">
|
||
<b>Question:</b> Using a cyclic partition for Gaussian elimination, is a form of static or dynamic load balancing?
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=a6741a25">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-julia"><pre><span></span><span class="n">ge_lb_answer</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e151fb8d">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Data-dependencies">Data dependencies<a class="anchor-link" href="#Data-dependencies">¶</a></h3><p>Using a cyclic partition, we managed to distribute the work uniformly. But we still need to study the data dependencies in order to implement this algorithm in parallel efficiently.</p>
|
||
<p>Look again to the algorithm</p>
|
||
<div class="highlight"><pre><span></span><span class="n">n</span><span class="p">,</span><span class="n">m</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">size</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
|
||
<span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">1</span><span class="o">:</span><span class="n">n</span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">m</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">t</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">t</span><span class="p">]</span><span class="o">/</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">k</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">n</span><span class="w"> </span>
|
||
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">:</span><span class="n">m</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="o">*</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">j</span><span class="p">]</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||
<span class="w"> </span><span class="k">end</span>
|
||
<span class="k">end</span>
|
||
</pre></div>
|
||
<p>Note that all updates on the loop over i and j we do the following:</p>
|
||
<div class="highlight"><pre><span></span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">k</span><span class="p">]</span><span class="o">*</span><span class="n">B</span><span class="p">[</span><span class="n">k</span><span class="p">,</span><span class="n">j</span><span class="p">]</span>
|
||
</pre></div>
|
||
<p>As we are using row-wise partitions, the CPU that updates <code>B[i,j]</code> will also have entry <code>B[i,k]</code> in memory (both are in the same row). However, <code>B[k,j]</code> is in another row and it might be located on another processor. We might need to communicate <code>B[k,j]</code> for <code>j=(k+1):m</code>. This corresponds to the cells marked in red in the figure below. These red entries are the data dependencies of this algorithm. The owner of these entries has to send them to the other processors. This is very similar to the communication pattern seen in previous notebook for Floyd's algorithm. There is a key difference however. In the current case, we do not need to send the full row, only the entries beyond column $k$ (the red cells in the figure).</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0050b6c4">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div>
|
||
<img align="left" alt="No description has been provided for this image" src="data:image/png;base64,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" width="300"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=cf189776">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="Parallel-implementation">Parallel implementation<a class="anchor-link" href="#Parallel-implementation">¶</a></h3><p>At iteration $k$,</p>
|
||
<ol>
|
||
<li>The CPU owning row $k$ does the loop over $t$ to update row $k$.</li>
|
||
<li>The CPU owning row $k$ sets $B_{kk} = 1$.</li>
|
||
<li>This CPU sends the red cells in figure above to the other processors.</li>
|
||
<li>All processors receive the updated values in row $k$ and do the loop over i and j locally (blue cells).</li>
|
||
</ol>
|
||
<p>As you probably see, the parallel implementation of this method is closely related to Floyd's algorithm. But there are some differences.</p>
|
||
<ol>
|
||
<li>The process that owns row $k$ updates its values before sending them.</li>
|
||
<li>We do not send the full row $k$, only the entries beyond column $k$.</li>
|
||
<li>We need a cyclic partition to balance the load properly.</li>
|
||
</ol>
|
||
<p>A key similarity between the two algorithms, however, is that they both suffer from synchronization problems. We need to make sure that the rows arrive in the right order. The strategies discussed for Floyd's algorithm also apply in this current case.</p>
|
||
<p>The actual implementation of the parallel algorithm is left as an open exercise.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=866824c6">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Conclusion">Conclusion<a class="anchor-link" href="#Conclusion">¶</a></h2><p>We studied the parallelization of an algorithm that leads to load imbalance. We fixed the problem using a cyclic partition. This is a form of static load balancing since we were able to distribute the load in advance without using runtime values. This is opposed to dynamic load balancing which can schedule loads flexibly during runtime. Note however that cyclic partitioning is not suitable for all communication patterns. For example, it can lead to a large communication overhead in the parallel Jacobi method, since the computation of each value depends on its neighboring elements.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=f60d9ea0">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h1 id="License">License<a class="anchor-link" href="#License">¶</a></h1><p>This notebook is part of the course <a href="https://www.francescverdugo.com/XM_40017">Programming Large Scale Parallel Systems</a> at Vrije Universiteit Amsterdam and may be used under a <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> license.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
</body>
|
||
</html>
|