Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
When getting started, you may want to:
* Set your username for signing your edits: <<option txtUserName>>
* Change the page [[title|SiteTitle]] (now "<<tiddler SiteTitle>>") and [[subtitle|SiteSubtitle]] (now "<<tiddler SiteSubtitle>>"); they also set the browser tab title
* Create a tiddler where your content "starts"
** Use the button on the sidebar or [[link|My first tiddler]] it here, follow the link, edit, and click "done"
** It will be shown in the Timeline (usually on the right), but you may want to link it in the MainMenu (usually on the left)
** and/or make it open when the ~TiddlyWiki is opened by editing the list of [[DefaultTiddlers]] (separate links with spaces or linebreaks)
* Save your ~TiddlyWiki
** Although "download saving" works in any browser, it may be not that convenient, so you'll probably want to use [[a dedicated saver|https://classic.tiddlywiki.com/#%5B%5BSetting up saving%5D%5D]]
<<importTiddlers>>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<!--{{{-->
<div class='header' role='banner'>
  <div class='headerShadow'>
    <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
    <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
  </div>
  <div class='headerForeground'>
    <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
    <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
  </div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
  <div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
  <div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1, h2, h3, h4, h5, h6 { color: [[ColorPalette::SecondaryDark]]; }
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.txtOptionInput {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {
	background: -moz-linear-gradient(to bottom, [[ColorPalette::PrimaryLight]], [[ColorPalette::PrimaryMid]]);
	background: linear-gradient(to bottom, [[ColorPalette::PrimaryLight]], [[ColorPalette::PrimaryMid]]);
}
.header a:hover {background:transparent;}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {
	color:[[ColorPalette::Foreground]];
	background:[[ColorPalette::Background]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard { background:[[ColorPalette::PrimaryPale]]; }
.wizard__title    { color:[[ColorPalette::PrimaryDark]]; border:none; }
.wizard__subtitle { color:[[ColorPalette::Foreground]]; border:none; }
.wizardStep { background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; }
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizardFooter .status a { color: [[ColorPalette::PrimaryPale]]; }
.wizard .button {
	color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryDark]];
}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {
	color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];
}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea { background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; box-shadow: 1px 2px 5px [[ColorPalette::TertiaryMid]]; }
.messageToolbar__button { color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none; }
.messageToolbar__button_withIcon { background:inherit; }
.messageToolbar__button_withIcon:active { background:inherit; border:none; }
.tw-icon line { stroke: [[ColorPalette::TertiaryDark]]; }
.messageToolbar__button:hover .tw-icon line { stroke: [[ColorPalette::Foreground]]; }

.popup {
	background: [[ColorPalette::Background]];
	color: [[ColorPalette::TertiaryDark]];
	box-shadow: 1px 2px 5px [[ColorPalette::TertiaryMid]];
}
.popup li a, .popup li a:visited, .popup li a:hover, .popup li a:active {
	color:[[ColorPalette::Foreground]]; border: none;
}
.popup li a:hover { background:[[ColorPalette::SecondaryLight]]; }
.popup li a:active { background:[[ColorPalette::SecondaryPale]]; }
.popup li.disabled { color:[[ColorPalette::TertiaryMid]]; }
.popupHighlight {color:[[ColorPalette::Foreground]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged { background: [[ColorPalette::Background]]; border: 2px solid [[ColorPalette::TertiaryPale]]; }
.selected .tagging, .selected .tagged { border: 2px solid [[ColorPalette::TertiaryLight]]; }
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button { border:none; }

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation { background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.twtable { background: [[ColorPalette::Background]]; }
.viewer th, .viewer thead td, .twtable th, .twtable thead td { background: [[ColorPalette::SecondaryMid]]; color: [[ColorPalette::Background]]; }
.viewer td, .viewer tr, .twtable td, .twtable tr { border: 1px solid [[ColorPalette::TertiaryLight]]; }
.twtable caption { color: [[ColorPalette::TertiaryMid]]; }

.viewer pre {background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%; background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
body { font-size:.75em; font-family:arial,helvetica,sans-serif; margin:0; padding:0; }

* html .tiddler {height:1%;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em; border-width: 1px; }

#contentWrapper .chkOptionInput {border:0;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}


a {text-decoration:none;}

.externalLink {text-decoration:underline;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}


.header {position:relative;}
.headerShadow {position:relative; padding:3em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:3em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
#sidebarTabs li:not(:last-child) { margin-bottom: 0.3em; }
#sidebarTabs ul:not(:last-child) { margin-bottom: 0.5em; }

.wizard { padding:0.1em 2em 0; }
.wizard__title    { font-size:2em; }
.wizard__subtitle { font-size:1.2em; }
.wizard__title, .wizard__subtitle { font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em; }
.wizardStep { padding:1em; }
.wizardFooter { padding: 0.8em 0; }
.wizardFooter .status { display: inline-block; line-height: 1.5; padding: 0.3em 1em; }
.wizardFooter .button { margin:0.5em 0 0; font-size:1.2em; padding:0.2em 0.5em; }

#messageArea { position:fixed; top:2em; right:0; margin:0.5em; padding:0.7em 1em; z-index:2000; }
.messageToolbar { text-align:right; padding:0.2em 0; }
.messageToolbar__button { text-decoration:underline; }
.messageToolbar__button_withIcon { display: inline-block; }
.tw-icon { height: 1em; width: 1em; } /* width for IE */
.tw-icon line { stroke-width: 1; stroke-linecap: round; }
.messageArea__text:not(:last-child) { margin-bottom: 0.3em; }
.messageArea__text a { text-decoration:underline; }

.popup {position:absolute; z-index:300; font-size:.9em; padding:0.3em 0; list-style:none; margin:0;}
.popup .popupMessage, .popup li.disabled, .popup li a { padding: 0.3em 0.7em; }
.popup li a {display:block; font-weight:normal; cursor:pointer;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {display: inline-block; white-space: nowrap; position: relative; bottom: -0.7px; margin: 0 0.25em 0 0; padding:0.2em;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler { padding: 1em; }

.title { font-size: 1.6em; font-weight: bold; }
.subtitle { font-size: 1.1em; }

.missing .viewer, .missing .title { font-style: italic; }
.missing .subtitle { display: none; }

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagged li, .tagging li { margin: 0.3em 0; }
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation { padding: 0.5em 0.8em; margin: 0.5em 1px; }

.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable { border-collapse: collapse; margin: 0.8em 0; }
.viewer th, .viewer td, .viewer tr, .viewer caption, .twtable th, .twtable td, .twtable tr, .twtable caption { padding: 0.2em 0.4em; }
.twtable caption { font-size: 0.9em; }
table.listView { margin: 0.8em 1.0em; }
table.listView th, table.listView td, table.listView tr { text-align: left; }
.listView > thead { position: sticky; top: 0; }

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer pre {padding:0.5em; overflow:auto;}
pre, code { font-family: monospace, monospace; font-size: 1em; }
.viewer pre, .viewer code { line-height: 1.4em; }

.editor {font-size:1.1em; line-height:1.4em;}
.editor input, .editor textarea { display: block; width: 100%; box-sizing: border-box; font: inherit; padding: 0.1em 0.4em; }
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding: 0.3em 0.5em; display: inline-block;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel { display:none; z-index:100; position:absolute; width:90%; margin:0 5%; }
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
  #mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea { display: none !important; }
  #displayArea { margin: 1em 1em 0em; }
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
config.options.chkHttpReadOnly = false;
from browser import alert
alert("ok")
{"title":"CloudData","type":"application/json","text":"[\n\t{\"text\": \"Tokyo/Yokohama\", \"size\": 33.200},\n\t{\"text\": \"New York Metro\", \"size\": 17.800},\n\t{\"text\": \"Sao Paulo\", \"size\": 17.700},\n\t{\"text\": \"Seoul/Incheon\", \"size\": 17.500},\n\t{\"text\": \"Mexico City\", \"size\": 17.400},\n\t{\"text\": \"Osaka/Kobe/Kyoto\", \"size\": 16.425},\n\t{\"text\": \"Manila\", \"size\": 14.750},\n\t{\"text\": \"Mumbai\", \"size\": 14.350},\n\t{\"text\": \"Delhi\", \"size\": 14.300},\n\t{\"text\": \"Jakarta\", \"size\": 14.250},\n\t{\"text\": \"Lagos\", \"size\": 13.400},\n\t{\"text\": \"Kolkata\", \"size\": 12.700},\n\t{\"text\": \"Cairo\", \"size\": 12.200},\n\t{\"text\": \"Los Angeles\", \"size\": 11.789},\n\t{\"text\": \"Buenos Aires\", \"size\": 11.200},\n\t{\"text\": \"Rio de Janeiro\", \"size\": 10.800},\n\t{\"text\": \"Moscow\", \"size\": 10.500},\n\t{\"text\": \"Shanghai\", \"size\": 10.000},\n\t{\"text\": \"Karachi\", \"size\": 9.800},\n\t{\"text\": \"Paris\", \"size\": 9.645},\n\t{\"text\": \"Istanbul\", \"size\": 9.000},\n\t{\"text\": \"Nagoya\", \"size\": 9.000},\n\t{\"text\": \"Beijing\", \"size\": 8.614},\n\t{\"text\": \"Chicago\", \"size\": 8.308},\n\t{\"text\": \"London\", \"size\": 8.278},\n\t{\"text\": \"Shenzhen\", \"size\": 8.000},\n\t{\"text\": \"Essen/Dusseldorf\", \"size\": 7.350},\n\t{\"text\": \"Tehran\", \"size\": 7.250},\n\t{\"text\": \"Bogota\", \"size\": 7.000},\n\t{\"text\": \"Lima\", \"size\": 7.000},\n\t{\"text\": \"Bangkok\", \"size\": 6.500},\n\t{\"text\": \"Johannesburg/East Rand\", \"size\": 6.000},\n\t{\"text\": \"Chennai\", \"size\": 5.950},\n\t{\"text\": \"Taipei\", \"size\": 5.700},\n\t{\"text\": \"Baghdad\", \"size\": 5.500},\n\t{\"text\": \"Santiago\", \"size\": 5.425},\n\t{\"text\": \"Bangalore\", \"size\": 5.400},\n\t{\"text\": \"Hyderabad\", \"size\": 5.300},\n\t{\"text\": \"St Petersburg\", \"size\": 5.300}\n]\n"}
{"title":"$:/plugins/tiddlywiki/d3","name":"D3","description":"D3 data visualisation demo","list":"readme","stability":"STABILITY_0_DEPRECATED","version":"5.3.6","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/plugins/tiddlywiki/d3/barwidget.js\":{\"title\":\"$:/plugins/tiddlywiki/d3/barwidget.js\",\"text\":\"/*\\\\\\ntitle: $:/plugins/tiddlywiki/d3/barwidget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nA widget for displaying stacked or grouped bar charts. Derived from http://bl.ocks.org/mbostock/3943967\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget,\\n\\td3 = require(\\\"$:/plugins/tiddlywiki/d3/d3.js\\\").d3;\\n\\nvar BarWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nBarWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nBarWidget.prototype.render = function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode = parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create the chart\\n\\tvar chart = this.createChart(parent,nextSibling);\\n\\tthis.updateChart = chart.updateChart;\\n\\tif(this.updateChart) {\\n\\t\\tthis.updateChart();\\n\\t}\\n\\t// Insert the chart into the DOM and render any children\\n\\tparent.insertBefore(chart.domNode,nextSibling);\\n\\tthis.domNodes.push(chart.domNode);\\n};\\n\\nBarWidget.prototype.createChart = function(parent,nextSibling) {\\n\\t// Get the data we're plotting\\n\\tvar data = this.wiki.getTiddlerData(this.barData),\\n\\t\\tn,m,stack,layers;\\n\\tif(data) {\\n\\t\\tn = data.layers;\\n\\t\\tm = data.samples;\\n\\t\\tlayers = data.data;\\n\\t} else { // Use randomly generated data if we don't have any\\n\\t\\tn = 4; // number of layers\\n\\t\\tm = 58; // number of samples per layer\\n\\t\\tstack = d3.layout.stack();\\n\\t\\tlayers = stack(d3.range(n).map(function() { return bumpLayer(m, 0.1); }));\\n\\t}\\n\\t// Calculate the maximum data values\\n\\tvar yGroupMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y; }); }),\\n\\t\\tyStackMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y0 + d.y; }); });\\n\\t// Calculate margins and width and height\\n\\tvar margin = {top: 40, right: 10, bottom: 20, left: 10},\\n\\t\\twidth = 960 - margin.left - margin.right,\\n\\t\\theight = 500 - margin.top - margin.bottom;\\n\\t// x-scale\\n\\tvar x = d3.scale.ordinal()\\n\\t\\t.domain(d3.range(m))\\n\\t\\t.rangeRoundBands([0, width], 0.08);\\n\\t// y-scale\\n\\tvar y = d3.scale.linear()\\n\\t\\t.domain([0, yStackMax])\\n\\t\\t.range([height, 0]);\\n\\t// Array of colour values\\n\\tvar color = d3.scale.linear()\\n\\t\\t.domain([0, n - 1])\\n\\t\\t.range([\\\"#aad\\\", \\\"#556\\\"]);\\n\\t// x-axis\\n\\tvar xAxis = d3.svg.axis()\\n\\t\\t.scale(x)\\n\\t\\t.tickSize(0)\\n\\t\\t.tickPadding(6)\\n\\t\\t.orient(\\\"bottom\\\");\\n\\t// Create SVG element\\n\\tvar svgElement = d3.select(parent).insert(\\\"svg\\\",function() {return nextSibling;})\\n\\t\\t.attr(\\\"viewBox\\\", \\\"0 0 960 500\\\")\\n\\t\\t.attr(\\\"preserveAspectRatio\\\", \\\"xMinYMin meet\\\")\\n\\t\\t.attr(\\\"width\\\", width + margin.left + margin.right)\\n\\t\\t.attr(\\\"height\\\", height + margin.top + margin.bottom);\\n\\t// Create main group\\n\\tvar mainGroup = svgElement.append(\\\"g\\\")\\n\\t\\t.attr(\\\"transform\\\", \\\"translate(\\\" + margin.left + \\\",\\\" + margin.top + \\\")\\\");\\n\\t// Create the layers\\n\\tvar layer = mainGroup.selectAll(\\\".layer\\\")\\n\\t\\t.data(layers)\\n\\t.enter().append(\\\"g\\\")\\n\\t\\t.attr(\\\"class\\\", \\\"layer\\\")\\n\\t\\t.style(\\\"fill\\\", function(d, i) { return color(i); });\\n\\t// Create the rectangles in each layer\\n\\tvar rect = layer.selectAll(\\\"rect\\\")\\n\\t\\t.data(function(d) { return d; })\\n\\t.enter().append(\\\"rect\\\")\\n\\t\\t.attr(\\\"x\\\", function(d) { return x(d.x); })\\n\\t\\t.attr(\\\"y\\\", height)\\n\\t\\t.attr(\\\"width\\\", x.rangeBand())\\n\\t\\t.attr(\\\"height\\\", 0);\\n\\t// Transition the rectangles to their final height\\n\\trect.transition()\\n\\t\\t.delay(function(d, i) { return i * 10; })\\n\\t\\t.attr(\\\"y\\\", function(d) { return y(d.y0 + d.y); })\\n\\t\\t.attr(\\\"height\\\", function(d) { return y(d.y0) - y(d.y0 + d.y); });\\n\\t// Add to the DOM\\n\\tmainGroup.append(\\\"g\\\")\\n\\t\\t.attr(\\\"class\\\", \\\"x axis\\\")\\n\\t\\t.attr(\\\"transform\\\", \\\"translate(0,\\\" + height + \\\")\\\")\\n\\t\\t.call(xAxis);\\n\\tvar self = this;\\n\\t// Return the svg node\\n\\treturn {\\n\\t\\tdomNode: svgElement[0][0],\\n\\t\\tupdateChart: function() {\\n\\t\\t\\tif(self.barGrouped !== \\\"no\\\") {\\n\\t\\t\\t\\ttransitionGrouped();\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttransitionStacked();\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\n\\tfunction transitionGrouped() {\\n\\t\\ty.domain([0, yGroupMax]);\\n\\t\\trect.transition()\\n\\t\\t\\t.duration(500)\\n\\t\\t\\t.delay(function(d, i) { return i * 10; })\\n\\t\\t\\t.attr(\\\"x\\\", function(d, i, j) { return x(d.x) + x.rangeBand() / n * j; })\\n\\t\\t\\t.attr(\\\"width\\\", x.rangeBand() / n)\\n\\t\\t\\t.transition()\\n\\t\\t\\t.attr(\\\"y\\\", function(d) { return y(d.y); })\\n\\t\\t\\t.attr(\\\"height\\\", function(d) { return height - y(d.y); });\\n\\t}\\n\\n\\tfunction transitionStacked() {\\n\\t\\ty.domain([0, yStackMax]);\\n\\t\\trect.transition()\\n\\t\\t\\t.duration(500)\\n\\t\\t\\t.delay(function(d, i) { return i * 10; })\\n\\t\\t\\t.attr(\\\"y\\\", function(d) { return y(d.y0 + d.y); })\\n\\t\\t\\t.attr(\\\"height\\\", function(d) { return y(d.y0) - y(d.y0 + d.y); })\\n\\t\\t\\t.transition()\\n\\t\\t\\t.attr(\\\"x\\\", function(d) { return x(d.x); })\\n\\t\\t\\t.attr(\\\"width\\\", x.rangeBand());\\n\\t}\\n\\n\\t// Inspired by Lee Byron's test data generator.\\n\\tfunction bumpLayer(n, o) {\\n\\t\\tfunction bump(a) {\\n\\t\\t\\tvar x = 1 / (0.1 + Math.random()),\\n\\t\\t\\t\\ty = 2 * Math.random() - 0.5,\\n\\t\\t\\t\\tz = 10 / (0.1 + Math.random());\\n\\t\\t\\tfor(var i = 0; i \u003C n; i++) {\\n\\t\\t\\tvar w = (i / n - y) * z;\\n\\t\\t\\ta[i] += x * Math.exp(-w * w);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar a = [], i;\\n\\t\\tfor(i = 0; i \u003C n; ++i) a[i] = o + o * Math.random();\\n\\t\\tfor(i = 0; i \u003C 5; ++i) bump(a);\\n\\t\\treturn a.map(function(d, i) { return {x: i, y: Math.max(0, d)}; });\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nBarWidget.prototype.execute = function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.barData = this.getAttribute(\\\"data\\\");\\n\\tthis.barGrouped = this.getAttribute(\\\"grouped\\\",\\\"no\\\");\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nBarWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.data || changedTiddlers[this.barData]) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedAttributes.grouped) {\\n\\t\\tthis.execute();\\n\\t\\tif(this.updateChart) {\\n\\t\\t\\tthis.updateChart();\\n\\t\\t}\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.d3bar = BarWidget;\\n\\n})();\\n\",\"type\":\"application/javascript\",\"module-type\":\"widget\"},\"$:/plugins/tiddlywiki/d3/base.tid\":{\"title\":\"$:/plugins/tiddlywiki/d3/base.tid\",\"tags\":\"[[$:/tags/Stylesheet]]\",\"text\":\"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-barwidget {\\n}\\n\\n.tc-barwidget text {\\n  font: 8px sans-serif;\\n}\\n\\n.tc-barwidget .axis path,\\n.tc-barwidget .axis line {\\n  fill: none;\\n  stroke: #000;\\n  shape-rendering: crispEdges;\\n}\\n\"},\"$:/plugins/tiddlywiki/d3/cloudwidget.js\":{\"title\":\"$:/plugins/tiddlywiki/d3/cloudwidget.js\",\"text\":\"/*\\\\\\ntitle: $:/plugins/tiddlywiki/d3/cloudwidget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nA widget for displaying word clouds. Derived from https://github.com/jasondavies/d3-cloud\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget,\\n\\td3 = require(\\\"$:/plugins/tiddlywiki/d3/d3.js\\\").d3;\\n\\nif($tw.browser) {\\n\\t// Frightful hack to give the cloud plugin the global d3 variable it needs\\n\\twindow.d3 = d3;\\n\\td3.layout.cloud  = require(\\\"$:/plugins/tiddlywiki/d3/d3.layout.cloud.js\\\").cloud;\\n}\\n\\nvar CloudWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nCloudWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nCloudWidget.prototype.render = function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode = parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create the chart\\n\\tvar chart = this.createChart(parent,nextSibling);\\n\\tthis.updateChart = chart.updateChart;\\n\\tif(this.updateChart) {\\n\\t\\tthis.updateChart();\\n\\t}\\n\\t// Insert the chart into the DOM and render any children\\n\\tparent.insertBefore(chart.domNode,nextSibling);\\n\\tthis.domNodes.push(chart.domNode);\\n};\\n\\nCloudWidget.prototype.createChart = function(parent,nextSibling) {\\n\\tvar self = this,\\n\\t\\tfill = d3.scale.category20(),\\n\\t\\tdata = this.wiki.getTiddlerData(this.cloudData);\\n\\t// Use dummy data if none provided\\n\\tif(!data) {\\n\\t\\tdata = \\\"This word cloud does not have any data in it\\\".split(\\\" \\\").map(function(d) {\\n\\t\\t\\treturn {text: d, size: 10 + Math.random() * 90};\\n\\t\\t});\\n\\t}\\n\\t// Create the svg element\\n\\tvar svgElement = d3.select(parent).insert(\\\"svg\\\",function() {return nextSibling;})\\n\\t\\t.attr(\\\"width\\\", 600)\\n\\t\\t.attr(\\\"height\\\", 400);\\n\\t// Create the main group\\n\\tvar mainGroup = svgElement\\n\\t\\t.append(\\\"g\\\")\\n\\t\\t.attr(\\\"transform\\\", \\\"translate(300,200)\\\");\\n\\t// Create the layout\\n\\tvar layout = d3.layout.cloud().size([600, 400])\\n\\t\\t.words(data)\\n\\t\\t.padding(5)\\n\\t\\t.rotate(function() { return ~~(Math.random() * 5) * 30 - 60; })\\n\\t\\t.font(\\\"Impact\\\")\\n\\t\\t.fontSize(function(d) { return d.size*2; })\\n\\t\\t.on(\\\"end\\\", draw)\\n\\t\\t.start();\\n\\t// Function to draw all the words\\n\\tfunction draw(words) {\\n\\t\\tmainGroup.selectAll(\\\"text\\\")\\n\\t\\t\\t.data(words)\\n\\t\\t\\t.enter().append(\\\"text\\\")\\n\\t\\t\\t.style(\\\"font-size\\\", function(d) { return d.size + \\\"px\\\"; })\\n\\t\\t\\t.style(\\\"font-family\\\", \\\"Impact\\\")\\n\\t\\t\\t.style(\\\"fill\\\", function(d, i) { return fill(i); })\\n\\t\\t\\t.attr(\\\"text-anchor\\\", \\\"middle\\\")\\n\\t\\t\\t.attr(\\\"transform\\\", function(d) {\\n\\t\\t\\t\\treturn \\\"translate(\\\" + [d.x, d.y] + \\\")rotate(\\\" + d.rotate + \\\")\\\";\\n\\t\\t\\t})\\n\\t\\t\\t.text(function(d) { return d.text; });\\n\\t}\\n\\tfunction updateChart() {\\n\\t\\tlayout.spiral(self.spiral);\\n\\t}\\n\\treturn {\\n\\t\\tdomNode: svgElement[0][0],\\n\\t\\tupdateChart: updateChart\\n\\t};\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nCloudWidget.prototype.execute = function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.cloudData = this.getAttribute(\\\"data\\\");\\n\\tthis.cloudSpiral = this.getAttribute(\\\"spiral\\\",\\\"archimedean\\\");\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nCloudWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.data || changedTiddlers[this.cloudData]) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedAttributes.spiral) {\\n\\t\\tthis.execute();\\n\\t\\tif(this.updateChart) {\\n\\t\\t\\tthis.updateChart();\\n\\t\\t}\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.d3cloud = CloudWidget;\\n\\n})();\\n\",\"type\":\"application/javascript\",\"module-type\":\"widget\"},\"$:/plugins/tiddlywiki/d3/d3.js\":{\"text\":\"var d3;if($tw.browser){\\nd3=function(){function n(n){return null!=n&&!isNaN(n)}function t(n){return n.length}function e(n){for(var t=1;n*t%1;)t*=10;return t}function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function i(){}function u(){}function a(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function o(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=Na.length;r>e;++e){var i=Na[e]+t;if(i in n)return i}}function c(n){for(var t=-1,e=n.length,r=[];++t\u003Ce;)r.push(n[t]);return r}function l(n){return Array.prototype.slice.call(n)}function s(){}function f(){}function h(n){function t(){for(var t,r=e,i=-1,u=r.length;++i\u003Cu;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new i;return t.on=function(t,i){var u,a=r.get(t);return arguments.length\u003C2?a&&a.on:(a&&(a.on=null,e=e.slice(0,u=e.indexOf(a)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function g(){da.event.preventDefault()}function p(){for(var n,t=da.event;n=t.sourceEvent;)t=n;return t}function d(n){for(var t=new f,e=0,r=arguments.length;++e\u003Cr;)t[arguments[e]]=h(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=da.event;i.target=n,da.event=i,t[i.type].apply(e,r)}finally{da.event=u}}},t}function m(n){return za(n,Fa),n}function v(n){return\\\"function\\\"==typeof n?n:function(){return Da(n,this)}}function y(n){return\\\"function\\\"==typeof n?n:function(){return ja(n,this)}}function M(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=da.ns.qualify(n),null==t?n.local?r:e:\\\"function\\\"==typeof t?n.local?o:a:n.local?u:i}function x(n){return n.trim().replace(/\\\\s+/g,\\\" \\\")}function b(n){return new RegExp(\\\"(?:^|\\\\\\\\s+)\\\"+da.requote(n)+\\\"(?:\\\\\\\\s+|$)\\\",\\\"g\\\")}function _(n,t){function e(){for(var e=-1;++e\u003Ci;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e\u003Ci;)n[e](this,r)}n=n.trim().split(/\\\\s+/).map(w);var i=n.length;return\\\"function\\\"==typeof t?r:e}function w(n){var t=b(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute(\\\"class\\\")||\\\"\\\";r?(t.lastIndex=0,t.test(i)||e.setAttribute(\\\"class\\\",x(i+\\\" \\\"+n))):e.setAttribute(\\\"class\\\",x(i.replace(t,\\\" \\\")))}}function S(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:\\\"function\\\"==typeof t?u:i}function E(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:\\\"function\\\"==typeof t?i:r}function k(n){return\\\"function\\\"==typeof n?n:(n=da.ns.qualify(n)).local?function(){return ma.createElementNS(n.space,n.local)}:function(){return ma.createElementNS(this.namespaceURI,n)}}function A(n){return{__data__:n}}function N(n){return function(){return Ha(this,n)}}function q(n){return arguments.length||(n=da.ascending),function(t,e){return!t-!e||n(t.__data__,e.__data__)}}function T(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],a=0,o=u.length;o>a;a++)(i=u[a])&&t(i,a,e);return n}function C(n){return za(n,Oa),n}function z(n){var t,e;return function(r,i,u){var a,o=n[u].update,c=o.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(a=o[t])&&++t\u003Cc;);return a}}function D(n,t,e){function r(){var t=this[a];t&&(this.removeEventListener(n,t,t.$),delete this[a])}function i(){var i=c(t,qa(arguments));r.call(this),this.addEventListener(n,this[a]=i,i.$=e),i._=t}function u(){var t,e=new RegExp(\\\"^__on([^.]+)\\\"+da.requote(n)+\\\"$\\\");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var a=\\\"__on\\\"+n,o=n.indexOf(\\\".\\\"),c=j;o>0&&(n=n.substring(0,o));var l=Ra.get(n);return l&&(n=l,c=L),o?t?i:r:t?s:u}function j(n,t){return function(e){var r=da.event;da.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{da.event=r}}}function L(n,t){var e=j(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function H(){var n=\\\".dragsuppress-\\\"+ ++Ia,t=\\\"touchmove\\\"+n,e=\\\"selectstart\\\"+n,r=\\\"dragstart\\\"+n,i=\\\"click\\\"+n,u=da.select(ya).on(t,g).on(e,g).on(r,g),a=va.style,o=a[Ua];return a[Ua]=\\\"none\\\",function(t){function e(){u.on(i,null)}u.on(n,null),a[Ua]=o,t&&(u.on(i,function(){g(),e()},!0),setTimeout(e,0))}}function F(n,t){var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>Va&&(ya.scrollX||ya.scrollY)){e=da.select(\\\"body\\\").append(\\\"svg\\\").style({position:\\\"absolute\\\",top:0,left:0,margin:0,padding:0,border:\\\"none\\\"},\\\"important\\\");var i=e[0][0].getScreenCTM();Va=!(i.f||i.e),e.remove()}return Va?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var u=n.getBoundingClientRect();return[t.clientX-u.left-n.clientLeft,t.clientY-u.top-n.clientTop]}function P(){}function O(n,t,e){return new Y(n,t,e)}function Y(n,t,e){this.h=n,this.s=t,this.l=e}function R(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(a-u)*n/60:180>n?a:240>n?u+(a-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,a;return n=isNaN(n)?0:(n%=360)\u003C0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,a=.5>=e?e*(1+t):e+t-e*t,u=2*e-a,it(i(n+120),i(n),i(n-120))}function U(n){return n>0?1:0>n?-1:0}function I(n){return n>1?0:-1>n?Wa:Math.acos(n)}function V(n){return n>1?Wa/2:-1>n?-Wa/2:Math.asin(n)}function X(n){return(Math.exp(n)-Math.exp(-n))/2}function Z(n){return(Math.exp(n)+Math.exp(-n))/2}function B(n){return(n=Math.sin(n/2))*n}function $(n,t,e){return new W(n,t,e)}function W(n,t,e){this.h=n,this.c=t,this.l=e}function J(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),G(e,Math.cos(n*=Ka)*t,Math.sin(n)*t)}function G(n,t,e){return new K(n,t,e)}function K(n,t,e){this.l=n,this.a=t,this.b=e}function Q(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=tt(i)*eo,r=tt(r)*ro,u=tt(u)*io,it(rt(3.2404542*i-1.5371385*r-.4985314*u),rt(-.969266*i+1.8760108*r+.041556*u),rt(.0556434*i-.2040259*r+1.0572252*u))}function nt(n,t,e){return n>0?$(Math.atan2(e,t)*Qa,Math.sqrt(t*t+e*e),n):$(0/0,0/0,n)}function tt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function et(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function rt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function it(n,t,e){return new ut(n,t,e)}function ut(n,t,e){this.r=n,this.g=t,this.b=e}function at(n){return 16>n?\\\"0\\\"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function ot(n,t,e){var r,i,u,a=0,o=0,c=0;if(r=/([a-z]+)\\\\((.*)\\\\)/i.exec(n))switch(i=r[2].split(\\\",\\\"),r[1]){case\\\"hsl\\\":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\\\"rgb\\\":return t(ft(i[0]),ft(i[1]),ft(i[2]))}return(u=oo.get(n))?t(u.r,u.g,u.b):(null!=n&&\\\"#\\\"===n.charAt(0)&&(4===n.length?(a=n.charAt(1),a+=a,o=n.charAt(2),o+=o,c=n.charAt(3),c+=c):7===n.length&&(a=n.substring(1,3),o=n.substring(3,5),c=n.substring(5,7)),a=parseInt(a,16),o=parseInt(o,16),c=parseInt(c,16)),t(a,o,c))}function ct(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),a=Math.max(n,t,e),o=a-u,c=(a+u)/2;return o?(i=.5>c?o/(a+u):o/(2-a-u),r=n==a?(t-e)/o+(e>t?6:0):t==a?(e-n)/o+2:(n-t)/o+4,r*=60):(r=0/0,i=c>0&&1>c?0:r),O(r,i,c)}function lt(n,t,e){n=st(n),t=st(t),e=st(e);var r=et((.4124564*n+.3575761*t+.1804375*e)/eo),i=et((.2126729*n+.7151522*t+.072175*e)/ro),u=et((.0193339*n+.119192*t+.9503041*e)/io);return G(116*i-16,500*(r-i),200*(i-u))}function st(n){return(n/=255)\u003C=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function ft(n){var t=parseFloat(n);return\\\"%\\\"===n.charAt(n.length-1)?Math.round(2.55*t):t}function ht(n){return\\\"function\\\"==typeof n?n:function(){return n}}function gt(n){return n}function pt(n){return function(t,e,r){return 2===arguments.length&&\\\"function\\\"==typeof e&&(r=e,e=null),dt(t,e,n,r)}}function dt(n,t,e,r){function i(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(u,c)}catch(r){return a.error.call(u,r),void 0}a.load.call(u,n)}else a.error.call(u,c)}var u={},a=da.dispatch(\\\"progress\\\",\\\"load\\\",\\\"error\\\"),o={},c=new XMLHttpRequest,l=null;return!ya.XDomainRequest||\\\"withCredentials\\\"in c||!/^(http(s)?:)?\\\\/\\\\//.test(n)||(c=new XDomainRequest),\\\"onload\\\"in c?c.onload=c.onerror=i:c.onreadystatechange=function(){c.readyState>3&&i()},c.onprogress=function(n){var t=da.event;da.event=n;try{a.progress.call(u,c)}finally{da.event=t}},u.header=function(n,t){return n=(n+\\\"\\\").toLowerCase(),arguments.length\u003C2?o[n]:(null==t?delete o[n]:o[n]=t+\\\"\\\",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+\\\"\\\",u):t},u.responseType=function(n){return arguments.length?(l=n,u):l},u.response=function(n){return e=n,u},[\\\"get\\\",\\\"post\\\"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(qa(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&\\\"function\\\"==typeof r&&(i=r,r=null),c.open(e,n,!0),null==t||\\\"accept\\\"in o||(o.accept=t+\\\",*/*\\\"),c.setRequestHeader)for(var a in o)c.setRequestHeader(a,o[a]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=i&&u.on(\\\"error\\\",i).on(\\\"load\\\",function(n){i(null,n)}),c.send(null==r?null:r),u},u.abort=function(){return c.abort(),u},da.rebind(u,a,\\\"on\\\"),null==r?u:u.get(mt(r))}function mt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function vt(){var n=yt(),t=Mt()-n;t>24?(isFinite(t)&&(clearTimeout(fo),fo=setTimeout(vt,t)),so=0):(so=1,ho(vt))}function yt(){for(var n=Date.now(),t=co;t;)n>=t.time&&(t.flush=t.callback(n-t.time)),t=t.next;return n}function Mt(){for(var n,t=co,e=1/0;t;)t.flush?t=n?n.next=t.next:co=t.next:(t.time\u003Ce&&(e=t.time),t=(n=t).next);return lo=n,e}function xt(n,t){var e=Math.pow(10,3*Math.abs(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function bt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function _t(n){return n+\\\"\\\"}function wt(){}function St(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function Et(n,t){n&&Eo.hasOwnProperty(n.type)&&Eo[n.type](n,t)}function kt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i\u003Cu;)r=n[i],t.point(r[0],r[1]);t.lineEnd()}function At(n,t){var e=-1,r=n.length;for(t.polygonStart();++e\u003Cr;)kt(n[e],t,1);t.polygonEnd()}function Nt(){function n(n,t){n*=Ka,t=t*Ka/2+Wa/4;var e=n-r,a=Math.cos(t),o=Math.sin(t),c=u*o,l=i*a+c*Math.cos(e),s=c*Math.sin(e);Ao.add(Math.atan2(s,l)),r=n,i=a,u=o}var t,e,r,i,u;No.point=function(a,o){No.point=n,r=(t=a)*Ka,i=Math.cos(o=(e=o)*Ka/2+Wa/4),u=Math.sin(o)},No.lineEnd=function(){n(t,e)}}function qt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function Tt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function Ct(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function zt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function Dt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function jt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function Lt(n){return[Math.atan2(n[1],n[0]),V(n[2])]}function Ht(n,t){return Math.abs(n[0]-t[0])\u003CJa&&Math.abs(n[1]-t[1])\u003CJa}function Ft(n,t){n*=Ka;var e=Math.cos(t*=Ka);Pt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function Pt(n,t,e){++qo,Co+=(n-Co)/qo,zo+=(t-zo)/qo,Do+=(e-Do)/qo}function Ot(){function n(n,i){n*=Ka;var u=Math.cos(i*=Ka),a=u*Math.cos(n),o=u*Math.sin(n),c=Math.sin(i),l=Math.atan2(Math.sqrt((l=e*c-r*o)*l+(l=r*a-t*c)*l+(l=t*o-e*a)*l),t*a+e*o+r*c);To+=l,jo+=l*(t+(t=a)),Lo+=l*(e+(e=o)),Ho+=l*(r+(r=c)),Pt(t,e,r)}var t,e,r;Yo.point=function(i,u){i*=Ka;var a=Math.cos(u*=Ka);t=a*Math.cos(i),e=a*Math.sin(i),r=Math.sin(u),Yo.point=n,Pt(t,e,r)}}function Yt(){Yo.point=Ft}function Rt(){function n(n,t){n*=Ka;var e=Math.cos(t*=Ka),a=e*Math.cos(n),o=e*Math.sin(n),c=Math.sin(t),l=i*c-u*o,s=u*a-r*c,f=r*o-i*a,h=Math.sqrt(l*l+s*s+f*f),g=r*a+i*o+u*c,p=h&&-I(g)/h,d=Math.atan2(h,g);Fo+=p*l,Po+=p*s,Oo+=p*f,To+=d,jo+=d*(r+(r=a)),Lo+=d*(i+(i=o)),Ho+=d*(u+(u=c)),Pt(r,i,u)}var t,e,r,i,u;Yo.point=function(a,o){t=a,e=o,Yo.point=n,a*=Ka;var c=Math.cos(o*=Ka);r=c*Math.cos(a),i=c*Math.sin(a),u=Math.sin(o),Pt(r,i,u)},Yo.lineEnd=function(){n(t,e),Yo.lineEnd=Yt,Yo.point=Ft}}function Ut(){return!0}function It(n,t,e,r,i){var u=[],a=[];if(n.forEach(function(n){if(!((t=n.length-1)\u003C=0)){var t,e=n[0],r=n[t];if(Ht(e,r)){i.lineStart();for(var o=0;t>o;++o)i.point((e=n[o])[0],e[1]);return i.lineEnd(),void 0}var c={point:e,points:n,other:null,visited:!1,entry:!0,subject:!0},l={point:e,points:[e],other:c,visited:!1,entry:!1,subject:!1};c.other=l,u.push(c),a.push(l),c={point:r,points:[r],other:null,visited:!1,entry:!1,subject:!0},l={point:r,points:[r],other:c,visited:!1,entry:!0,subject:!1},c.other=l,u.push(c),a.push(l)}}),a.sort(t),Vt(u),Vt(a),u.length){if(e)for(var o=1,c=!e(a[0].point),l=a.length;l>o;++o)a[o].entry=c=!c;for(var s,f,h,g=u[0];;){for(s=g;s.visited;)if((s=s.next)===g)return;f=s.points,i.lineStart();do{if(s.visited=s.other.visited=!0,s.entry){if(s.subject)for(var o=0;o\u003Cf.length;o++)i.point((h=f[o])[0],h[1]);else r(s.point,s.next.point,1,i);s=s.next}else{if(s.subject){f=s.prev.points;for(var o=f.length;--o>=0;)i.point((h=f[o])[0],h[1])}else r(s.point,s.prev.point,-1,i);s=s.prev}s=s.other,f=s.points}while(!s.visited);i.lineEnd()}}}function Vt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r\u003Ct;)i.next=e=n[r],e.prev=i,i=e;i.next=e=n[0],e.prev=i}}function Xt(n,t,e,r){return function(i){function u(t,e){n(t,e)&&i.point(t,e)}function a(n,t){d.point(n,t)}function o(){m.point=a,d.lineStart()}function c(){m.point=u,d.lineEnd()}function l(n,t){y.point(n,t),p.push([n,t])}function s(){y.lineStart(),p=[]}function f(){l(p[0][0],p[0][1]),y.lineEnd();var n,t=y.clean(),e=v.buffer(),r=e.length;if(p.pop(),g.push(p),p=null,r){if(1&t){n=e[0];var u,r=n.length-1,a=-1;for(i.lineStart();++a\u003Cr;)i.point((u=n[a])[0],u[1]);return i.lineEnd(),void 0}r>1&&2&t&&e.push(e.pop().concat(e.shift())),h.push(e.filter(Zt))}}var h,g,p,d=t(i),m={point:u,lineStart:o,lineEnd:c,polygonStart:function(){m.point=l,m.lineStart=s,m.lineEnd=f,h=[],g=[],i.polygonStart()},polygonEnd:function(){m.point=u,m.lineStart=o,m.lineEnd=c,h=da.merge(h),h.length?It(h,$t,null,e,i):r(g)&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),h=g=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},v=Bt(),y=t(v);return m}}function Zt(n){return n.length>1}function Bt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:s,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function $t(n,t){return((n=n.point)[0]\u003C0?n[1]-Wa/2-Ja:Wa/2-n[1])-((t=t.point)[0]\u003C0?t[1]-Wa/2-Ja:Wa/2-t[1])}function Wt(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,a=!1,o=!1,c=0;Ao.reset();for(var l=0,s=t.length;s>l;++l){var f=t[l],h=f.length;if(h){for(var g=f[0],p=g[0],d=g[1]/2+Wa/4,m=Math.sin(d),v=Math.cos(d),y=1;;){y===h&&(y=0),n=f[y];var M=n[0],x=n[1]/2+Wa/4,b=Math.sin(x),_=Math.cos(x),w=M-p,S=Math.abs(w)>Wa,E=m*b;if(Ao.add(Math.atan2(E*Math.sin(w),v*_+E*Math.cos(w))),Math.abs(x)\u003CJa&&(o=!0),u+=S?w+(w>=0?2:-2)*Wa:w,S^p>=e^M>=e){var k=Ct(qt(g),qt(n));jt(k);var A=Ct(i,k);jt(A);var N=(S^w>=0?-1:1)*V(A[2]);r>N&&(c+=S^w>=0?1:-1)}if(!y++)break;p=M,m=b,v=_,g=n}Math.abs(u)>Ja&&(a=!0)}}return(!o&&!a&&0>Ao||-Ja>u)^1&c}function Jt(n){var t,e=0/0,r=0/0,i=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(u,a){var o=u>0?Wa:-Wa,c=Math.abs(u-e);Math.abs(c-Wa)\u003CJa?(n.point(e,r=(r+a)/2>0?Wa/2:-Wa/2),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),n.point(u,r),t=0):i!==o&&c>=Wa&&(Math.abs(e-i)\u003CJa&&(e-=i*Ja),Math.abs(u-o)\u003CJa&&(u-=o*Ja),r=Gt(e,r,u,a),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),t=0),n.point(e=u,r=a),i=o},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function Gt(n,t,e,r){var i,u,a=Math.sin(n-e);return Math.abs(a)>Ja?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*a)):(t+r)/2}function Kt(n,t,e,r){var i;if(null==n)i=e*Wa/2,r.point(-Wa,i),r.point(0,i),r.point(Wa,i),r.point(Wa,0),r.point(Wa,-i),r.point(0,-i),r.point(-Wa,-i),r.point(-Wa,0),r.point(-Wa,i);else if(Math.abs(n[0]-t[0])>Ja){var u=(n[0]\u003Ct[0]?1:-1)*Wa;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Qt(n){return Wt(Uo,n)}function ne(n){function t(n,t){return Math.cos(n)*Math.cos(t)>a}function e(n){var e,u,a,c,s;return{lineStart:function(){c=a=!1,s=1},point:function(f,h){var g,p=[f,h],d=t(f,h),m=o?d?0:i(f,h):d?i(f+(0>f?Wa:-Wa),h):0;if(!e&&(c=a=d)&&n.lineStart(),d!==a&&(g=r(e,p),(Ht(e,g)||Ht(p,g))&&(p[0]+=Ja,p[1]+=Ja,d=t(p[0],p[1]))),d!==a)s=0,d?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(l&&e&&o^d){var v;m&u||!(v=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(v[0][0],v[0][1]),n.point(v[1][0],v[1][1]),n.lineEnd()):(n.point(v[1][0],v[1][1]),n.lineEnd(),n.lineStart(),n.point(v[0][0],v[0][1])))}!d||e&&Ht(e,p)||n.point(p[0],p[1]),e=p,a=d,u=m},lineEnd:function(){a&&n.lineEnd(),e=null},clean:function(){return s|(c&&a)\u003C\u003C1}}}function r(n,t,e){var r=qt(n),i=qt(t),u=[1,0,0],o=Ct(r,i),c=Tt(o,o),l=o[0],s=c-l*l;if(!s)return!e&&n;var f=a*c/s,h=-a*l/s,g=Ct(u,o),p=Dt(u,f),d=Dt(o,h);zt(p,d);var m=g,v=Tt(p,m),y=Tt(m,m),M=v*v-y*(Tt(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=Dt(m,(-v-x)/y);if(zt(b,p),b=Lt(b),!e)return b;var _,w=n[0],S=t[0],E=n[1],k=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=Math.abs(A-Wa)\u003CJa,q=N||Ja>A;if(!N&&E>k&&(_=E,E=k,k=_),q?N?E+k>0^b[1]\u003C(Math.abs(b[0]-w)\u003CJa?E:k):E\u003C=b[1]&&b[1]\u003C=k:A>Wa^(w\u003C=b[0]&&b[0]\u003C=S)){var T=Dt(m,(-v+x)/y);return zt(T,p),[b,Lt(T)]}}}function i(t,e){var r=o?n:Wa-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}function u(n){return Wt(c,n)}var a=Math.cos(n),o=a>0,c=[n,0],l=Math.abs(a)>Ja,s=Ee(n,6*Ka);return Xt(t,e,s,u)}function te(n,t,e,r){function i(r,i){return Math.abs(r[0]-n)\u003CJa?i>0?0:3:Math.abs(r[0]-e)\u003CJa?i>0?2:1:Math.abs(r[1]-t)\u003CJa?i>0?1:0:i>0?3:2}function u(n,t){return a(n.point,t.point)}function a(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}function o(i,u){var a=u[0]-i[0],o=u[1]-i[1],c=[0,1];return Math.abs(a)\u003CJa&&Math.abs(o)\u003CJa?n\u003C=i[0]&&i[0]\u003C=e&&t\u003C=i[1]&&i[1]\u003C=r:ee(n-i[0],a,c)&&ee(i[0]-e,-a,c)&&ee(t-i[1],o,c)&&ee(i[1]-r,-o,c)?(c[1]\u003C1&&(u[0]=i[0]+c[1]*a,u[1]=i[1]+c[1]*o),c[0]>0&&(i[0]+=c[0]*a,i[1]+=c[0]*o),!0):!1}return function(c){function l(u){var a=i(u,-1),o=s([0===a||3===a?n:e,a>1?r:t]);return o}function s(n){for(var t=0,e=M.length,r=n[1],i=0;e>i;++i)for(var u,a=1,o=M[i],c=o.length,l=o[0];c>a;++a)u=o[a],l[1]\u003C=r?u[1]>r&&f(l,u,n)>0&&++t:u[1]\u003C=r&&f(l,u,n)\u003C0&&--t,l=u;return 0!==t}function f(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(e[0]-n[0])*(t[1]-n[1])}function h(u,o,c,l){var s=0,f=0;if(null==u||(s=i(u,c))!==(f=i(o,c))||a(u,o)\u003C0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(o[0],o[1])}function g(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function p(n,t){g(n,t)&&c.point(n,t)}function d(){T.point=v,M&&M.push(x=[]),A=!0,k=!1,S=E=0/0}function m(){y&&(v(b,_),w&&k&&q.rejoin(),y.push(q.buffer())),T.point=p,k&&c.lineEnd()}function v(n,t){n=Math.max(-Io,Math.min(Io,n)),t=Math.max(-Io,Math.min(Io,t));var e=g(n,t);if(M&&x.push([n,t]),A)b=n,_=t,w=e,A=!1,e&&(c.lineStart(),c.point(n,t));else if(e&&k)c.point(n,t);else{var r=[S,E],i=[n,t];o(r,i)?(k||(c.lineStart(),c.point(r[0],r[1])),c.point(i[0],i[1]),e||c.lineEnd()):e&&(c.lineStart(),c.point(n,t))}S=n,E=t,k=e}var y,M,x,b,_,w,S,E,k,A,N=c,q=Bt(),T={point:p,lineStart:d,lineEnd:m,polygonStart:function(){c=q,y=[],M=[]},polygonEnd:function(){c=N,(y=da.merge(y)).length?(c.polygonStart(),It(y,u,l,h,c),c.polygonEnd()):s([n,t])&&(c.polygonStart(),c.lineStart(),h(null,null,1,c),c.lineEnd(),c.polygonEnd()),y=M=x=null}};return T}}function ee(n,t,e){if(Math.abs(t)\u003CJa)return 0>=n;var r=n/t;if(t>0){if(r>e[1])return!1;r>e[0]&&(e[0]=r)}else{if(r\u003Ce[0])return!1;r\u003Ce[1]&&(e[1]=r)}return!0}function re(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function ie(n){var t=0,e=Wa/3,r=ye(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Wa/180,e=n[1]*Wa/180):[180*(t/Wa),180*(e/Wa)]},i}function ue(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),a-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),a=Math.sqrt(u)/i;return e.invert=function(n,t){var e=a-t;return[Math.atan2(n,e)/i,V((u-(n*n+e*e)*i*i)/(2*i))]},e}function ae(){function n(n,t){Xo+=i*n-r*t,r=n,i=t}var t,e,r,i;Jo.point=function(u,a){Jo.point=n,t=r=u,e=i=a},Jo.lineEnd=function(){n(t,e)}}function oe(n,t){Zo>n&&(Zo=n),n>$o&&($o=n),Bo>t&&(Bo=t),t>Wo&&(Wo=t)}function ce(){function n(n,t){a.push(\\\"M\\\",n,\\\",\\\",t,u)}function t(n,t){a.push(\\\"M\\\",n,\\\",\\\",t),o.point=e}function e(n,t){a.push(\\\"L\\\",n,\\\",\\\",t)}function r(){o.point=n}function i(){a.push(\\\"Z\\\")}var u=le(4.5),a=[],o={point:n,lineStart:function(){o.point=t},lineEnd:r,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=r,o.point=n},pointRadius:function(n){return u=le(n),o},result:function(){if(a.length){var n=a.join(\\\"\\\");return a=[],n}}};return o}function le(n){return\\\"m0,\\\"+n+\\\"a\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,\\\"+-2*n+\\\"a\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,\\\"+2*n+\\\"z\\\"}function se(n,t){Co+=n,zo+=t,++Do}function fe(){function n(n,r){var i=n-t,u=r-e,a=Math.sqrt(i*i+u*u);jo+=a*(t+n)/2,Lo+=a*(e+r)/2,Ho+=a,se(t=n,e=r)}var t,e;Ko.point=function(r,i){Ko.point=n,se(t=r,e=i)}}function he(){Ko.point=se}function ge(){function n(n,t){var e=n-r,u=t-i,a=Math.sqrt(e*e+u*u);jo+=a*(r+n)/2,Lo+=a*(i+t)/2,Ho+=a,a=i*n-r*t,Fo+=a*(r+n),Po+=a*(i+t),Oo+=3*a,se(r=n,i=t)}var t,e,r,i;Ko.point=function(u,a){Ko.point=n,se(t=r=u,e=i=a)},Ko.lineEnd=function(){n(t,e)}}function pe(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,a,0,2*Wa)}function e(t,e){n.moveTo(t,e),o.point=r}function r(t,e){n.lineTo(t,e)}function i(){o.point=t}function u(){n.closePath()}var a=4.5,o={point:t,lineStart:function(){o.point=e},lineEnd:i,polygonStart:function(){o.lineEnd=u},polygonEnd:function(){o.lineEnd=i,o.point=t},pointRadius:function(n){return a=n,o},result:s};return o}function de(n){function t(t){function r(e,r){e=n(e,r),t.point(e[0],e[1])}function i(){M=0/0,S.point=a,t.lineStart()}function a(r,i){var a=qt([r,i]),o=n(r,i);e(M,x,y,b,_,w,M=o[0],x=o[1],y=r,b=a[0],_=a[1],w=a[2],u,t),t.point(M,x)}function o(){S.point=r,t.lineEnd()}function c(){i(),S.point=l,S.lineEnd=s}function l(n,t){a(f=n,h=t),g=M,p=x,d=b,m=_,v=w,S.point=a}function s(){e(M,x,y,b,_,w,g,p,f,d,m,v,u,t),S.lineEnd=o,o()}var f,h,g,p,d,m,v,y,M,x,b,_,w,S={point:r,lineStart:i,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=i}};return S}function e(t,u,a,o,c,l,s,f,h,g,p,d,m,v){var y=s-t,M=f-u,x=y*y+M*M;if(x>4*r&&m--){var b=o+g,_=c+p,w=l+d,S=Math.sqrt(b*b+_*_+w*w),E=Math.asin(w/=S),k=Math.abs(Math.abs(w)-1)\u003CJa?(a+h)/2:Math.atan2(_,b),A=n(k,E),N=A[0],q=A[1],T=N-t,C=q-u,z=M*T-y*C;(z*z/x>r||Math.abs((y*T+M*C)/x-.5)>.3||i>o*g+c*p+l*d)&&(e(t,u,a,o,c,l,N,q,k,b/=S,_/=S,w,m,v),v.point(N,q),e(N,q,k,b,_,w,s,f,h,g,p,d,m,v))}}var r=.5,i=Math.cos(30*Ka),u=16;return t.precision=function(n){return arguments.length?(u=(r=n*n)>0&&16,t):Math.sqrt(r)},t}function me(n){var t=de(function(t,e){return n([t*Qa,e*Qa])});return function(n){return n=t(n),{point:function(t,e){n.point(t*Ka,e*Ka)},sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}}function ve(n){return ye(function(){return n})()}function ye(n){function t(n){return n=o(n[0]*Ka,n[1]*Ka),[n[0]*h+c,l-n[1]*h]}function e(n){return n=o.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Qa,n[1]*Qa]}function r(){o=re(a=be(v,y,M),u);var n=u(d,m);return c=g-n[0]*h,l=p+n[1]*h,i()}function i(){return s&&(s.valid=!1,s=null),t}var u,a,o,c,l,s,f=de(function(n,t){return n=u(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,d=0,m=0,v=0,y=0,M=0,x=Ro,b=gt,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=Me(a,x(f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Ro):ne((_=+n)*Ka),i()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=null==n?gt:te(n[0][0],n[0][1],n[1][0],n[1][1]),i()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(d=n[0]%360*Ka,m=n[1]%360*Ka,r()):[d*Qa,m*Qa]},t.rotate=function(n){return arguments.length?(v=n[0]%360*Ka,y=n[1]%360*Ka,M=n.length>2?n[2]%360*Ka:0,r()):[v*Qa,y*Qa,M*Qa]},da.rebind(t,f,\\\"precision\\\"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function Me(n,t){return{point:function(e,r){r=n(e*Ka,r*Ka),e=r[0],t.point(e>Wa?e-2*Wa:-Wa>e?e+2*Wa:e,r[1])},sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function xe(n,t){return[n,t]}function be(n,t,e){return n?t||e?re(we(n),Se(t,e)):we(n):t||e?Se(t,e):xe}function _e(n){return function(t,e){return t+=n,[t>Wa?t-2*Wa:-Wa>t?t+2*Wa:t,e]}}function we(n){var t=_e(n);return t.invert=_e(-n),t}function Se(n,t){function e(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+o*i;return[Math.atan2(c*u-s*a,o*r-l*i),V(s*u+c*a)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),a=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*u-c*a;return[Math.atan2(c*u+l*a,o*r+s*i),V(s*r-o*i)]},e}function Ee(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,a,o){null!=i?(i=ke(e,i),u=ke(e,u),(a>0?u>i:i>u)&&(i+=2*a*Wa)):(i=n+2*a*Wa,u=n);for(var c,l=a*t,s=i;a>0?s>u:u>s;s-=l)o.point((c=Lt([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],c[1])}}function ke(n,t){var e=qt(t);e[0]-=n,jt(e);var r=I(-e[1]);return((-e[2]\u003C0?-r:r)+2*Math.PI-Ja)%(2*Math.PI)}function Ae(n,t,e){var r=da.range(n,t-Ja,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function Ne(n,t,e){var r=da.range(n,t-Ja,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function qe(n){return n.source}function Te(n){return n.target}function Ce(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),a=Math.cos(r),o=Math.sin(r),c=i*Math.cos(n),l=i*Math.sin(n),s=a*Math.cos(e),f=a*Math.sin(e),h=2*Math.asin(Math.sqrt(B(r-t)+i*a*B(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,i=e*l+t*f,a=e*u+t*o;return[Math.atan2(i,r)*Qa,Math.atan2(a,Math.sqrt(r*r+i*i))*Qa]}:function(){return[n*Qa,t*Qa]};return p.distance=h,p}function ze(){function n(n,i){var u=Math.sin(i*=Ka),a=Math.cos(i),o=Math.abs((n*=Ka)-t),c=Math.cos(o);Qo+=Math.atan2(Math.sqrt((o=a*Math.sin(o))*o+(o=r*u-e*a*c)*o),e*u+r*a*c),t=n,e=u,r=a}var t,e,r;nc.point=function(i,u){t=i*Ka,e=Math.sin(u*=Ka),r=Math.cos(u),nc.point=n},nc.lineEnd=function(){nc.point=nc.lineEnd=s}}function De(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),a=Math.cos(i);return[Math.atan2(n*u,r*a),Math.asin(r&&e*u/r)]},e}function je(n,t){function e(n,t){var e=Math.abs(Math.abs(t)-Wa/2)\u003CJa?0:a/Math.pow(i(t),u);return[e*Math.sin(u*n),a-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Wa/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),a=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=a-t,r=U(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(a/r,1/u))-Wa/2]},e):He}function Le(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return Math.abs(i)\u003CJa?xe:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-U(i)*Math.sqrt(n*n+e*e)]},e)}function He(n,t){return[n,Math.log(Math.tan(Wa/4+t/2))]}function Fe(n){var t,e=ve(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var a=u.apply(e,arguments);if(a===e){if(t=null==n){var o=Wa*r(),c=i();u([[c[0]-o,c[1]-o],[c[0]+o,c[1]+o]])}}else t&&(a=null);return a},e.clipExtent(null)}function Pe(n,t){var e=Math.cos(t)*Math.sin(n);return[Math.log((1+e)/(1-e))/2,Math.atan2(Math.tan(t),Math.cos(n))]}function Oe(n){function t(t){function a(){l.push(\\\"M\\\",u(n(s),o))}for(var c,l=[],s=[],f=-1,h=t.length,g=ht(e),p=ht(r);++f\u003Ch;)i.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(a(),s=[]);return s.length&&a(),l.length?l.join(\\\"\\\"):null}var e=Ye,r=Re,i=Ut,u=Ue,a=u.key,o=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(a=\\\"function\\\"==typeof n?u=n:(u=ac.get(n)||Ue).key,t):a},t.tension=function(n){return arguments.length?(o=n,t):o},t}function Ye(n){return n[0]}function Re(n){return n[1]}function Ue(n){return n.join(\\\"L\\\")}function Ie(n){return Ue(n)+\\\"Z\\\"}function Ve(n){for(var t=0,e=n.length,r=n[0],i=[r[0],\\\",\\\",r[1]];++t\u003Ce;)i.push(\\\"H\\\",(r[0]+(r=n[t])[0])/2,\\\"V\\\",r[1]);return e>1&&i.push(\\\"H\\\",r[0]),i.join(\\\"\\\")}function Xe(n){for(var t=0,e=n.length,r=n[0],i=[r[0],\\\",\\\",r[1]];++t\u003Ce;)i.push(\\\"V\\\",(r=n[t])[1],\\\"H\\\",r[0]);return i.join(\\\"\\\")}function Ze(n){for(var t=0,e=n.length,r=n[0],i=[r[0],\\\",\\\",r[1]];++t\u003Ce;)i.push(\\\"H\\\",(r=n[t])[0],\\\"V\\\",r[1]);return i.join(\\\"\\\")}function Be(n,t){return n.length\u003C4?Ue(n):n[1]+Je(n.slice(1,n.length-1),Ge(n,t))}function $e(n,t){return n.length\u003C3?Ue(n):n[0]+Je((n.push(n[0]),n),Ge([n[n.length-2]].concat(n,[n[1]]),t))}function We(n,t){return n.length\u003C3?Ue(n):n[0]+Je(n,Ge(n,t))}function Je(n,t){if(t.length\u003C1||n.length!=t.length&&n.length!=t.length+2)return Ue(n);var e=n.length!=t.length,r=\\\"\\\",i=n[0],u=n[1],a=t[0],o=a,c=1;if(e&&(r+=\\\"Q\\\"+(u[0]-2*a[0]/3)+\\\",\\\"+(u[1]-2*a[1]/3)+\\\",\\\"+u[0]+\\\",\\\"+u[1],i=n[1],c=2),t.length>1){o=t[1],u=n[c],c++,r+=\\\"C\\\"+(i[0]+a[0])+\\\",\\\"+(i[1]+a[1])+\\\",\\\"+(u[0]-o[0])+\\\",\\\"+(u[1]-o[1])+\\\",\\\"+u[0]+\\\",\\\"+u[1];for(var l=2;l\u003Ct.length;l++,c++)u=n[c],o=t[l],r+=\\\"S\\\"+(u[0]-o[0])+\\\",\\\"+(u[1]-o[1])+\\\",\\\"+u[0]+\\\",\\\"+u[1]}if(e){var s=n[c];r+=\\\"Q\\\"+(u[0]+2*o[0]/3)+\\\",\\\"+(u[1]+2*o[1]/3)+\\\",\\\"+s[0]+\\\",\\\"+s[1]}return r}function Ge(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],a=n[1],o=1,c=n.length;++o\u003Cc;)e=u,u=a,a=n[o],r.push([i*(a[0]-e[0]),i*(a[1]-e[1])]);return r}function Ke(n){if(n.length\u003C3)return Ue(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],a=[i,i,i,(r=n[1])[0]],o=[u,u,u,r[1]],c=[i,\\\",\\\",u,\\\"L\\\",er(lc,a),\\\",\\\",er(lc,o)];for(n.push(n[e-1]);++t\u003C=e;)r=n[t],a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),rr(c,a,o);return n.pop(),c.push(\\\"L\\\",r),c.join(\\\"\\\")}function Qe(n){if(n.length\u003C4)return Ue(n);for(var t,e=[],r=-1,i=n.length,u=[0],a=[0];++r\u003C3;)t=n[r],u.push(t[0]),a.push(t[1]);for(e.push(er(lc,u)+\\\",\\\"+er(lc,a)),--r;++r\u003Ci;)t=n[r],u.shift(),u.push(t[0]),a.shift(),a.push(t[1]),rr(e,u,a);return e.join(\\\"\\\")}function nr(n){for(var t,e,r=-1,i=n.length,u=i+4,a=[],o=[];++r\u003C4;)e=n[r%i],a.push(e[0]),o.push(e[1]);for(t=[er(lc,a),\\\",\\\",er(lc,o)],--r;++r\u003Cu;)e=n[r%i],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),rr(t,a,o);return t.join(\\\"\\\")}function tr(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],a=n[0][1],o=n[e][0]-u,c=n[e][1]-a,l=-1;++l\u003C=e;)r=n[l],i=l/e,r[0]=t*r[0]+(1-t)*(u+i*o),r[1]=t*r[1]+(1-t)*(a+i*c);return Ke(n)}function er(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function rr(n,t,e){n.push(\\\"C\\\",er(oc,t),\\\",\\\",er(oc,e),\\\",\\\",er(cc,t),\\\",\\\",er(cc,e),\\\",\\\",er(lc,t),\\\",\\\",er(lc,e))}function ir(n,t){return(t[1]-n[1])/(t[0]-n[0])\\n}function ur(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],a=r[0]=ir(i,u);++t\u003Ce;)r[t]=(a+(a=ir(i=u,u=n[t+1])))/2;return r[t]=a,r}function ar(n){for(var t,e,r,i,u=[],a=ur(n),o=-1,c=n.length-1;++o\u003Cc;)t=ir(n[o],n[o+1]),Math.abs(t)\u003C1e-6?a[o]=a[o+1]=0:(e=a[o]/t,r=a[o+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),a[o]=i*e,a[o+1]=i*r));for(o=-1;++o\u003C=c;)i=(n[Math.min(c,o+1)][0]-n[Math.max(0,o-1)][0])/(6*(1+a[o]*a[o])),u.push([i||0,a[o]*i||0]);return u}function or(n){return n.length\u003C3?Ue(n):n[0]+Je(n,ar(n))}function cr(n,t,e,r){var i,u,a,o,c,l,s;return i=r[n],u=i[0],a=i[1],i=r[t],o=i[0],c=i[1],i=r[e],l=i[0],s=i[1],(s-a)*(o-u)-(c-a)*(l-u)>0}function lr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])\u003C(e[1]-t[1])*(n[0]-t[0])}function sr(n,t,e,r){var i=n[0],u=e[0],a=t[0]-i,o=r[0]-u,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(o*(c-l)-f*(i-u))/(f*a-o*s);return[i+h*a,c+h*s]}function fr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function hr(n,t){var e={list:n.map(function(n,t){return{index:t,x:n[0],y:n[1]}}).sort(function(n,t){return n.y\u003Ct.y?-1:n.y>t.y?1:n.x\u003Ct.x?-1:n.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,\\\"l\\\"),r.rightEnd=r.createHalfEdge(null,\\\"l\\\"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(n,t){return{edge:n,side:t,vertex:null,l:null,r:null}},insert:function(n,t){t.l=n,t.r=n.r,n.r.l=t,n.r=t},leftBound:function(n){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,n));return t=t.l},del:function(n){n.l.r=n.r,n.r.l=n.l,n.edge=null},right:function(n){return n.r},left:function(n){return n.l},leftRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[n.side]},rightRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[fc[n.side]]}},i={bisect:function(n,t){var e={region:{l:n,r:t},ep:{l:null,r:null}},r=t.x-n.x,i=t.y-n.y,u=r>0?r:-r,a=i>0?i:-i;return e.c=n.x*r+n.y*i+.5*(r*r+i*i),u>a?(e.a=1,e.b=i/r,e.c/=r):(e.b=1,e.a=r/i,e.c/=i),e},intersect:function(n,t){var e=n.edge,r=t.edge;if(!e||!r||e.region.r==r.region.r)return null;var i=e.a*r.b-e.b*r.a;if(Math.abs(i)\u003C1e-10)return null;var u,a,o=(e.c*r.b-r.c*e.b)/i,c=(r.c*e.a-e.c*r.a)/i,l=e.region.r,s=r.region.r;l.y\u003Cs.y||l.y==s.y&&l.x\u003Cs.x?(u=n,a=e):(u=t,a=r);var f=o>=a.region.r.x;return f&&\\\"l\\\"===u.side||!f&&\\\"r\\\"===u.side?null:{x:o,y:c}},rightOf:function(n,t){var e=n.edge,r=e.region.r,i=t.x>r.x;if(i&&\\\"l\\\"===n.side)return 1;if(!i&&\\\"r\\\"===n.side)return 0;if(1===e.a){var u=t.y-r.y,a=t.x-r.x,o=0,c=0;if(!i&&e.b\u003C0||i&&e.b>=0?c=o=u>=e.b*a:(c=t.x+t.y*e.b>e.c,e.b\u003C0&&(c=!c),c||(o=1)),!o){var l=r.x-e.region.l.x;c=e.b*(a*a-u*u)\u003Cl*u*(1+2*a/l+e.b*e.b),e.b\u003C0&&(c=!c)}}else{var s=e.c-e.a*t.x,f=t.y-s,h=t.x-r.x,g=s-r.y;c=f*f>h*h+g*g}return\\\"l\\\"===n.side?c:!c},endPoint:function(n,e,r){n.ep[e]=r,n.ep[fc[e]]&&t(n)},distance:function(n,t){var e=n.x-t.x,r=n.y-t.y;return Math.sqrt(e*e+r*r)}},u={list:[],insert:function(n,t,e){n.vertex=t,n.ystar=t.y+e;for(var r=0,i=u.list,a=i.length;a>r;r++){var o=i[r];if(!(n.ystar>o.ystar||n.ystar==o.ystar&&t.x>o.vertex.x))break}i.splice(r,0,n)},del:function(n){for(var t=0,e=u.list,r=e.length;r>t&&e[t]!=n;++t);e.splice(t,1)},empty:function(){return 0===u.list.length},nextEvent:function(n){for(var t=0,e=u.list,r=e.length;r>t;++t)if(e[t]==n)return e[t+1];return null},min:function(){var n=u.list[0];return{x:n.vertex.x,y:n.ystar}},extractMin:function(){return u.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var a,o,c,l,s,f,h,g,p,d,m,v,y,M=e.list.shift();;)if(u.empty()||(a=u.min()),M&&(u.empty()||M.y\u003Ca.y||M.y==a.y&&M.x\u003Ca.x))o=r.leftBound(M),c=r.right(o),h=r.rightRegion(o),v=i.bisect(h,M),f=r.createHalfEdge(v,\\\"l\\\"),r.insert(o,f),d=i.intersect(o,f),d&&(u.del(o),u.insert(o,d,i.distance(d,M))),o=f,f=r.createHalfEdge(v,\\\"r\\\"),r.insert(o,f),d=i.intersect(f,c),d&&u.insert(f,d,i.distance(d,M)),M=e.list.shift();else{if(u.empty())break;o=u.extractMin(),l=r.left(o),c=r.right(o),s=r.right(c),h=r.leftRegion(o),g=r.rightRegion(c),m=o.vertex,i.endPoint(o.edge,o.side,m),i.endPoint(c.edge,c.side,m),r.del(o),u.del(c),r.del(c),y=\\\"l\\\",h.y>g.y&&(p=h,h=g,g=p,y=\\\"r\\\"),v=i.bisect(h,g),f=r.createHalfEdge(v,y),r.insert(l,f),i.endPoint(v,fc[y],m),d=i.intersect(l,f),d&&(u.del(l),u.insert(l,d,i.distance(d,h))),d=i.intersect(f,s),d&&u.insert(f,d,i.distance(d,h))}for(o=r.right(r.leftEnd);o!=r.rightEnd;o=r.right(o))t(o.edge)}function gr(n){return n.x}function pr(n){return n.y}function dr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function mr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var a=.5*(e+i),o=.5*(r+u),c=t.nodes;c[0]&&mr(n,c[0],e,r,a,o),c[1]&&mr(n,c[1],a,r,i,o),c[2]&&mr(n,c[2],e,o,a,u),c[3]&&mr(n,c[3],a,o,i,u)}}function vr(n,t){n=da.rgb(n),t=da.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,a=t.g-r,o=t.b-i;return function(t){return n.r=Math.round(e+u*t),n.g=Math.round(r+a*t),n.b=Math.round(i+o*t),n}}function yr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=br(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function Mr(n,t){return t-=n=+n,function(e){return n+t*e}}function xr(n,t){var e,r,i,u,a,o=0,c=0,l=[],s=[];for(n+=\\\"\\\",t+=\\\"\\\",hc.lastIndex=0,r=0;e=hc.exec(t);++r)e.index&&l.push(t.substring(o,c=e.index)),s.push({i:l.length,x:e[0]}),l.push(null),o=hc.lastIndex;for(o\u003Ct.length&&l.push(t.substring(o)),r=0,u=s.length;(e=hc.exec(n))&&u>r;++r)if(a=s[r],a.x==e[0]){if(a.i)if(null==l[a.i+1])for(l[a.i-1]+=a.x,l.splice(a.i,1),i=r+1;u>i;++i)s[i].i--;else for(l[a.i-1]+=a.x+l[a.i+1],l.splice(a.i,2),i=r+1;u>i;++i)s[i].i-=2;else if(null==l[a.i+1])l[a.i]=a.x;else for(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1),i=r+1;u>i;++i)s[i].i--;s.splice(r,1),u--,r--}else a.x=Mr(parseFloat(e[0]),parseFloat(a.x));for(;u>r;)a=s.pop(),null==l[a.i+1]?l[a.i]=a.x:(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1)),u--;return 1===l.length?null==l[0]?(a=s[0].x,function(n){return a(n)+\\\"\\\"}):function(){return t}:function(n){for(r=0;u>r;++r)l[(a=s[r]).i]=a.x(n);return l.join(\\\"\\\")}}function br(n,t){for(var e,r=da.interpolators.length;--r>=0&&!(e=da.interpolators[r](n,t)););return e}function _r(n,t){var e,r=[],i=[],u=n.length,a=t.length,o=Math.min(n.length,t.length);for(e=0;o>e;++e)r.push(br(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;a>e;++e)i[e]=t[e];return function(n){for(e=0;o>e;++e)i[e]=r[e](n);return i}}function wr(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function Sr(n){return function(t){return 1-n(1-t)}}function Er(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function kr(n){return n*n}function Ar(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function qr(n){return function(t){return Math.pow(t,n)}}function Tr(n){return 1-Math.cos(n*Wa/2)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Dr(n,t){var e;return arguments.length\u003C2&&(t=.45),arguments.length?e=t/(2*Wa)*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,10*-r)*Math.sin(2*(r-e)*Wa/t)}}function jr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Lr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Hr(n,t){n=da.hcl(n),t=da.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,a=t.c-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(t){return n.h=e+u*t,n.c=r+a*t,n.l=i+o*t,n}}function Fr(n,t){n=da.hsl(n),t=da.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,a=t.s-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(t){return n.h=e+u*t,n.s=r+a*t,n.l=i+o*t,n}}function Pr(n,t){n=da.lab(n),t=da.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,a=t.a-r,o=t.b-i;return function(t){return n.l=e+u*t,n.a=r+a*t,n.b=i+o*t,n}}function Or(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Yr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Ur(t),i=Rr(t,e),u=Ur(Ir(e,t,-i))||0;t[0]*e[1]\u003Ce[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Qa,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Qa:0}function Rr(n,t){return n[0]*t[0]+n[1]*t[1]}function Ur(n){var t=Math.sqrt(Rr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ir(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Vr(n,t){var e,r=[],i=[],u=da.transform(n),a=da.transform(t),o=u.translate,c=a.translate,l=u.rotate,s=a.rotate,f=u.skew,h=a.skew,g=u.scale,p=a.scale;return o[0]!=c[0]||o[1]!=c[1]?(r.push(\\\"translate(\\\",null,\\\",\\\",null,\\\")\\\"),i.push({i:1,x:Mr(o[0],c[0])},{i:3,x:Mr(o[1],c[1])})):c[0]||c[1]?r.push(\\\"translate(\\\"+c+\\\")\\\"):r.push(\\\"\\\"),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),i.push({i:r.push(r.pop()+\\\"rotate(\\\",null,\\\")\\\")-2,x:Mr(l,s)})):s&&r.push(r.pop()+\\\"rotate(\\\"+s+\\\")\\\"),f!=h?i.push({i:r.push(r.pop()+\\\"skewX(\\\",null,\\\")\\\")-2,x:Mr(f,h)}):h&&r.push(r.pop()+\\\"skewX(\\\"+h+\\\")\\\"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+\\\"scale(\\\",null,\\\",\\\",null,\\\")\\\"),i.push({i:e-4,x:Mr(g[0],p[0])},{i:e-2,x:Mr(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+\\\"scale(\\\"+p+\\\")\\\"),e=i.length,function(n){for(var t,u=-1;++u\u003Ce;)r[(t=i[u]).i]=t.x(n);return r.join(\\\"\\\")}}function Xr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Zr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Br(n){for(var t=n.source,e=n.target,r=Wr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function $r(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Wr(n,t){if(n===t)return n;for(var e=$r(n),r=$r(t),i=e.pop(),u=r.pop(),a=null;i===u;)a=i,i=e.pop(),u=r.pop();return a}function Jr(n){n.fixed|=2}function Gr(n){n.fixed&=-7}function Kr(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Qr(n){n.fixed&=-5}function ni(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,a=n.nodes,o=a.length,c=-1;++c\u003Co;)u=a[c],null!=u&&(ni(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,i+=l*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ti(n,t){return da.rebind(n,t,\\\"sort\\\",\\\"children\\\",\\\"value\\\"),n.nodes=n,n.links=ui,n}function ei(n){return n.children}function ri(n){return n.value}function ii(n,t){return t.value-n.value}function ui(n){return da.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ai(n){return n.x}function oi(n){return n.y}function ci(n,t,e){n.y0=t,n.y=e}function li(n){return da.range(n.length)}function si(n){for(var t=-1,e=n[0].length,r=[];++t\u003Ce;)r[t]=0;return r}function fi(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function hi(n){return n.reduce(gi,0)}function gi(n,t){return n+t[1]}function pi(n,t){return di(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function di(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e\u003C=t;)u[e]=i*e+r;return u}function mi(n){return[da.min(n),da.max(n)]}function vi(n,t){return n.parent==t.parent?1:2}function yi(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function Mi(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function xi(n,t){var e=n.children;if(e&&(i=e.length))for(var r,i,u=-1;++u\u003Ci;)t(r=xi(e[u],t),n)>0&&(n=r);return n}function bi(n,t){return n.x-t.x}function _i(n,t){return t.x-n.x}function wi(n,t){return n.depth-t.depth}function Si(n,t){function e(n,r){var i=n.children;if(i&&(a=i.length))for(var u,a,o=null,c=-1;++c\u003Ca;)u=i[c],e(u,o),o=u;t(n,r)}e(n,null)}function Ei(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function ki(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function Ai(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function Ni(n,t){return n.value-t.value}function qi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Ti(n,t){n._pack_next=t,t._pack_prev=n}function Ci(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function zi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,i,u,a,o,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(Di),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(i=e[1],i.x=i.r,i.y=0,t(i),l>2))for(u=e[2],Hi(r,i,u),t(u),qi(r,u),r._pack_prev=u,qi(u,i),i=r._pack_next,a=3;l>a;a++){Hi(r,i,u=e[a]);var p=0,d=1,m=1;for(o=i._pack_next;o!==i;o=o._pack_next,d++)if(Ci(o,u)){p=1;break}if(1==p)for(c=r._pack_prev;c!==o._pack_prev&&!Ci(c,u);c=c._pack_prev,m++);p?(m>d||d==m&&i.r\u003Cr.r?Ti(r,i=o):Ti(r=c,i),a--):(qi(r,u),i=u,t(u))}var v=(s+f)/2,y=(h+g)/2,M=0;for(a=0;l>a;a++)u=e[a],u.x-=v,u.y-=y,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(ji)}}function Di(n){n._pack_next=n._pack_prev=n}function ji(n){delete n._pack_next,delete n._pack_prev}function Li(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,a=i.length;++u\u003Ca;)Li(i[u],t,e,r)}function Hi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var a=t.r+e.r,o=i*i+u*u;a*=a,r*=r;var c=.5+(r-a)/(2*o),l=Math.sqrt(Math.max(0,2*a*(r+o)-(r-=o)*r-a*a))/(2*o);e.x=n.x+c*i+l*u,e.y=n.y+c*u-l*i}else e.x=n.x+r,e.y=n.y}function Fi(n){return 1+da.max(n,function(n){return n.y})}function Pi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Oi(n){var t=n.children;return t&&t.length?Oi(t[0]):n}function Yi(n){var t,e=n.children;return e&&(t=e.length)?Yi(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ui(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Ii(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Vi(n){return n.rangeExtent?n.rangeExtent():Ii(n.range())}function Xi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Zi(n,t){var e,r=0,i=n.length-1,u=n[r],a=n[i];return u>a&&(e=r,r=i,i=e,e=u,u=a,a=e),n[r]=t.floor(u),n[i]=t.ceil(a),n}function Bi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:_c}function $i(n,t,e,r){var i=[],u=[],a=0,o=Math.min(n.length,t.length)-1;for(n[o]\u003Cn[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++a\u003C=o;)i.push(e(n[a-1],n[a])),u.push(r(t[a-1],t[a]));return function(t){var e=da.bisect(n,t,1,o)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?$i:Xi,c=r?Zr:Xr;return a=i(n,t,c,e),o=i(t,n,c,br),u}function u(n){return a(n)}var a,o;return u.invert=function(n){return o(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Or)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return nu(n,t)},u.tickFormat=function(t,e){return tu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return da.rebind(n,t,\\\"range\\\",\\\"rangeRound\\\",\\\"interpolate\\\",\\\"clamp\\\")}function Gi(n,t){return Zi(n,Bi(t?Qi(n,t)[2]:Ki(n)))}function Ki(n){var t=Ii(n),e=t[1]-t[0];return Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1)}function Qi(n,t){var e=Ii(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function nu(n,t){return da.range.apply(da,Qi(n,t))}function tu(n,t,e){var r=-Math.floor(Math.log(Qi(n,t)[2])/Math.LN10+.01);return da.format(e?e.replace(Mo,function(n,t,e,i,u,a,o,c,l,s){return[t,e,i,u,a,o,c,l||\\\".\\\"+(r-2*(\\\"%\\\"===s)),s].join(\\\"\\\")}):\\\",.\\\"+r+\\\"f\\\")}function eu(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function a(t){return n(i(t))}return a.invert=function(t){return u(n.invert(t))},a.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),a):r},a.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),a):t},a.nice=function(){var t=Zi(r.map(i),e?Math:Sc);return n.domain(t),r=t.map(u),a},a.ticks=function(){var n=Ii(r),a=[];if(n.every(isFinite)){var o=n[0],c=n[1],l=Math.floor(i(o)),s=Math.ceil(i(c)),f=t%1?2:t;if(e){for(;s>l;l++)for(var h=1;f>h;h++)a.push(u(l)*h);a.push(u(l))}else for(a.push(u(l));l++\u003Cs;)for(var h=f-1;h>0;h--)a.push(u(l)*h);for(l=0;a[l]\u003Co;l++);for(s=a.length;a[s-1]>c;s--);a=a.slice(l,s)}return a},a.tickFormat=function(n,t){if(!arguments.length)return wc;arguments.length\u003C2?t=wc:\\\"function\\\"!=typeof t&&(t=da.format(t));var r,o=Math.max(.1,n/a.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/u(c(i(n)+r))\u003C=o?t(n):\\\"\\\"}},a.copy=function(){return eu(n.copy(),t,e,r)},Ji(a,n)}function ru(n,t,e){function r(t){return n(i(t))}var i=iu(t),u=iu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return nu(e,n)},r.tickFormat=function(n,t){return tu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(a){return arguments.length?(i=iu(t=a),u=iu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return ru(n.copy(),t,e)},Ji(r,n)}function iu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function uu(n,t){function e(t){return a[((u.get(t)||u.set(t,n.push(t)))-1)%a.length]}function r(t,e){return da.range(n.length).map(function(n){return t+e*n})}var u,a,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new i;for(var a,o=-1,c=r.length;++o\u003Cc;)u.has(a=r[o])||u.set(a,n.push(a));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(a=n,o=0,t={t:\\\"range\\\",a:arguments},e):a},e.rangePoints=function(i,u){arguments.length\u003C2&&(u=0);var c=i[0],l=i[1],s=(l-c)/(Math.max(1,n.length-1)+u);return a=r(n.length\u003C2?(c+l)/2:c+s*u/2,s),o=0,t={t:\\\"rangePoints\\\",a:arguments},e},e.rangeBands=function(i,u,c){arguments.length\u003C2&&(u=0),arguments.length\u003C3&&(c=u);var l=i[1]\u003Ci[0],s=i[l-0],f=i[1-l],h=(f-s)/(n.length-u+2*c);return a=r(s+h*c,h),l&&a.reverse(),o=h*(1-u),t={t:\\\"rangeBands\\\",a:arguments},e},e.rangeRoundBands=function(i,u,c){arguments.length\u003C2&&(u=0),arguments.length\u003C3&&(c=u);var l=i[1]\u003Ci[0],s=i[l-0],f=i[1-l],h=Math.floor((f-s)/(n.length-u+2*c)),g=f-s-(n.length-u)*h;return a=r(s+Math.round(g/2),h),l&&a.reverse(),o=Math.round(h*(1-u)),t={t:\\\"rangeRoundBands\\\",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Ii(t.a[0])},e.copy=function(){return uu(n,t)},e.domain(n)}function au(n,t){function e(){var e=0,u=t.length;for(i=[];++e\u003Cu;)i[e-1]=da.quantile(n,e/u);return r}function r(n){return isNaN(n=+n)?void 0:t[da.bisect(i,n)]}var i;return r.domain=function(t){return arguments.length?(n=t.filter(function(n){return!isNaN(n)}).sort(da.ascending),e()):n},r.range=function(n){return arguments.length?(t=n,e()):t},r.quantiles=function(){return i},r.invertExtent=function(e){return e=t.indexOf(e),0>e?[0/0,0/0]:[e>0?i[e-1]:n[0],e\u003Ci.length?i[e]:n[n.length-1]]},r.copy=function(){return au(n,t)},e()}function ou(n,t,e){function r(t){return e[Math.max(0,Math.min(a,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),a=e.length-1,r}var u,a;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/u+n,[t,t+1/u]},r.copy=function(){return ou(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[da.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function lu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return nu(n,t)},t.tickFormat=function(t,e){return tu(n,t,e)},t.copy=function(){return lu(n)},t}function su(n){return n.innerRadius}function fu(n){return n.outerRadius}function hu(n){return n.startAngle}function gu(n){return n.endAngle}function pu(n){for(var t,e,r,i=-1,u=n.length;++i\u003Cu;)t=n[i],e=t[0],r=t[1]+qc,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function du(n){function t(t){function c(){d.push(\\\"M\\\",o(n(v),f),s,l(n(m.reverse()),f),\\\"Z\\\")}for(var h,g,p,d=[],m=[],v=[],y=-1,M=t.length,x=ht(e),b=ht(i),_=e===r?function(){return g}:ht(r),w=i===u?function(){return p}:ht(u);++y\u003CM;)a.call(this,h=t[y],y)?(m.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),v.push([+_.call(this,h,y),+w.call(this,h,y)])):m.length&&(c(),m=[],v=[]);return m.length&&c(),d.length?d.join(\\\"\\\"):null}var e=Ye,r=Ye,i=0,u=Re,a=Ut,o=Ue,c=o.key,l=o,s=\\\"L\\\",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(a=n,t):a},t.interpolate=function(n){return arguments.length?(c=\\\"function\\\"==typeof n?o=n:(o=ac.get(n)||Ue).key,l=o.reverse||o,s=o.closed?\\\"M\\\":\\\"L\\\",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function mu(n){return n.radius}function vu(n){return[n.x,n.y]}function yu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+qc;return[e*Math.cos(r),e*Math.sin(r)]}}function Mu(){return 64}function xu(){return\\\"circle\\\"}function bu(n){var t=Math.sqrt(n/Wa);return\\\"M0,\\\"+t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+-t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+t+\\\"Z\\\"}function _u(n,t){return za(n,Hc),n.id=t,n}function wu(n,t,e,r){var i=n.id;return T(n,\\\"function\\\"==typeof e?function(n,u,a){n.__transition__[i].tween.set(t,r(e.call(n,n.__data__,u,a)))}:(e=r(e),function(n){n.__transition__[i].tween.set(t,e)}))}function Su(n){return null==n&&(n=\\\"\\\"),function(){this.textContent=n}}function Eu(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),a=u[e];if(!a){var o=r.time;return a=u[e]={tween:new i,time:o,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,da.timer(function(r){function i(r){return u.active>e?l():(u.active=e,a.event&&a.event.start.call(n,s,t),a.tween.forEach(function(e,r){(r=r.call(n,s,t))&&p.push(r)}),c(r)||da.timer(c,0,o),1)}function c(r){if(u.active!==e)return l();for(var i=(r-h)/g,o=f(i),c=p.length;c>0;)p[--c].call(n,o);return i>=1?(l(),a.event&&a.event.end.call(n,s,t),1):void 0}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=a.ease,h=a.delay,g=a.duration,p=[];return r>=h?i(r):da.timer(i,h,o),1},0,o),a}}function ku(n,t){n.attr(\\\"transform\\\",function(n){return\\\"translate(\\\"+t(n)+\\\",0)\\\"})}function Au(n,t){n.attr(\\\"transform\\\",function(n){return\\\"translate(0,\\\"+t(n)+\\\")\\\"})}function Nu(n,t,e){if(r=[],e&&t.length>1){for(var r,i,u,a=Ii(n.domain()),o=-1,c=t.length,l=(t[1]-t[0])/++e;++o\u003Cc;)for(i=e;--i>0;)(u=+t[o]-i*l)>=a[0]&&r.push(u);for(--o,i=0;++i\u003Ce&&(u=+t[o]+i*l)\u003Ca[1];)r.push(u)}return r}function qu(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Tu(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new Uc(e-1)),1),e}function u(n,e){return t(n=new Uc(+n),e),n}function a(n,r,u){var a=i(n),o=[];if(u>1)for(;r>a;)e(a)%u||o.push(new Date(+a)),t(a,1);else for(;r>a;)o.push(new Date(+a)),t(a,1);return o}function o(n,t,e){try{Uc=qu;var r=new qu;return r._=n,a(r,t,e)}finally{Uc=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=a;var c=n.utc=Cu(n);return c.floor=c,c.round=Cu(r),c.ceil=Cu(i),c.offset=Cu(u),c.range=o,n}function Cu(n){return function(t,e){try{Uc=qu;var r=new qu;return r._=t,n(r,e)._}finally{Uc=Date}}}function zu(n,t,e,r){for(var i,u,a=0,o=t.length,c=e.length;o>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(u=ll[t.charAt(a++)],!u||(r=u(n,e,r))\u003C0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function Du(n){return new RegExp(\\\"^(?:\\\"+n.map(da.requote).join(\\\"|\\\")+\\\")\\\",\\\"i\\\")}function ju(n){for(var t=new i,e=-1,r=n.length;++e\u003Cr;)t.set(n[e].toLowerCase(),e);return t}function Lu(n,t,e){var r=0>n?\\\"-\\\":\\\"\\\",i=(r?-n:n)+\\\"\\\",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Hu(n,t,e){nl.lastIndex=0;var r=nl.exec(t.substring(e));return r?(n.w=tl.get(r[0].toLowerCase()),e+r[0].length):-1}function Fu(n,t,e){Kc.lastIndex=0;var r=Kc.exec(t.substring(e));return r?(n.w=Qc.get(r[0].toLowerCase()),e+r[0].length):-1}function Pu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Ou(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Yu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Ru(n,t,e){il.lastIndex=0;var r=il.exec(t.substring(e));return r?(n.m=ul.get(r[0].toLowerCase()),e+r[0].length):-1}function Uu(n,t,e){el.lastIndex=0;var r=el.exec(t.substring(e));return r?(n.m=rl.get(r[0].toLowerCase()),e+r[0].length):-1}function Iu(n,t,e){return zu(n,cl.c.toString(),t,e)}function Vu(n,t,e){return zu(n,cl.x.toString(),t,e)}function Xu(n,t,e){return zu(n,cl.X.toString(),t,e)}function Zu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Bu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.y=$u(+r[0]),e+r[0].length):-1}function $u(n){return n+(n>68?1900:2e3)}function Wu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Ju(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Gu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Ku(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Qu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function na(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ta(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ea(n,t,e){var r=fl.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}function ra(n){var t=n.getTimezoneOffset(),e=t>0?\\\"-\\\":\\\"+\\\",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return e+Lu(r,\\\"0\\\",2)+Lu(i,\\\"0\\\",2)}function ia(n,t,e){al.lastIndex=0;var r=al.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function ua(n){return n.toISOString()}function aa(n,t,e){function r(t){return n(t)}return r.invert=function(t){return oa(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(oa)},r.nice=function(n){return r.domain(Zi(r.domain(),n))},r.ticks=function(e,i){var u=Ii(r.domain());if(\\\"function\\\"!=typeof e){var a=u[1]-u[0],o=a/e,c=da.bisect(gl,o);if(c==gl.length)return t.year(u,e);if(!c)return n.ticks(e).map(oa);Math.log(o/gl[c-1])\u003CMath.log(gl[c]/o)&&--c,e=t[c],i=e[1],e=e[0].range}return e(u[0],new Date(+u[1]+1),i)},r.tickFormat=function(){return e},r.copy=function(){return aa(n.copy(),t,e)},Ji(r,n)}function oa(n){return new Date(n)}function ca(n){return function(t){for(var e=n.length-1,r=n[e];!r[1](t);)r=n[--e];return r[0](t)}}function la(n){var t=new Date(n,0,1);return t.setFullYear(n),t}function sa(n){var t=n.getFullYear(),e=la(t),r=la(t+1);return t+(n-e)/(r-e)}function fa(n){var t=new Date(Date.UTC(n,0,1));return t.setUTCFullYear(n),t}function ha(n){var t=n.getUTCFullYear(),e=fa(t),r=fa(t+1);return t+(n-e)/(r-e)}function ga(n){return JSON.parse(n.responseText)}function pa(n){var t=ma.createRange();return t.selectNode(ma.body),t.createContextualFragment(n.responseText)}var da={version:\\\"3.2.6\\\"};Date.now||(Date.now=function(){return+new Date});var ma=document,va=ma.documentElement,ya=window;try{ma.createElement(\\\"div\\\").style.setProperty(\\\"opacity\\\",0,\\\"\\\")}catch(Ma){var xa=ya.Element.prototype,ba=xa.setAttribute,_a=xa.setAttributeNS,wa=ya.CSSStyleDeclaration.prototype,Sa=wa.setProperty;xa.setAttribute=function(n,t){ba.call(this,n,t+\\\"\\\")},xa.setAttributeNS=function(n,t,e){_a.call(this,n,t,e+\\\"\\\")},wa.setProperty=function(n,t,e){Sa.call(this,n,t+\\\"\\\",e)}}da.ascending=function(n,t){return t>n?-1:n>t?1:n>=t?0:0/0},da.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},da.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i\u003Cu&&!(null!=(e=n[i])&&e>=e);)e=void 0;for(;++i\u003Cu;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i\u003Cu&&!(null!=(e=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i\u003Cu;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},da.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i\u003Cu&&!(null!=(e=n[i])&&e>=e);)e=void 0;for(;++i\u003Cu;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i\u003Cu&&!(null!=(e=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i\u003Cu;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},da.extent=function(n,t){var e,r,i,u=-1,a=n.length;if(1===arguments.length){for(;++u\u003Ca&&!(null!=(e=i=n[u])&&e>=e);)e=i=void 0;for(;++u\u003Ca;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u\u003Ca&&!(null!=(e=i=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u\u003Ca;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},da.sum=function(n,t){var e,r=0,i=n.length,u=-1;if(1===arguments.length)for(;++u\u003Ci;)isNaN(e=+n[u])||(r+=e);else for(;++u\u003Ci;)isNaN(e=+t.call(n,n[u],u))||(r+=e);return r},da.mean=function(t,e){var r,i=t.length,u=0,a=-1,o=0;if(1===arguments.length)for(;++a\u003Ci;)n(r=t[a])&&(u+=(r-u)/++o);else for(;++a\u003Ci;)n(r=e.call(t,t[a],a))&&(u+=(r-u)/++o);return o?u:void 0},da.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},da.median=function(t,e){return arguments.length>1&&(t=t.map(e)),t=t.filter(n),t.length?da.quantile(t.sort(da.ascending),.5):void 0},da.bisector=function(n){return{left:function(t,e,r,i){for(arguments.length\u003C3&&(r=0),arguments.length\u003C4&&(i=t.length);i>r;){var u=r+i>>>1;n.call(t,t[u],u)\u003Ce?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length\u003C3&&(r=0),arguments.length\u003C4&&(i=t.length);i>r;){var u=r+i>>>1;e\u003Cn.call(t,t[u],u)?i=u:r=u+1}return r}}};var Ea=da.bisector(function(n){return n});da.bisectLeft=Ea.left,da.bisect=da.bisectRight=Ea.right,da.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},da.permute=function(n,t){for(var e=[],r=-1,i=t.length;++r\u003Ci;)e[r]=n[t[r]];return e},da.zip=function(){if(!(i=arguments.length))return[];for(var n=-1,e=da.min(arguments,t),r=new Array(e);++n\u003Ce;)for(var i,u=-1,a=r[n]=new Array(i);++u\u003Ci;)a[u]=arguments[u][n];return r},da.transpose=function(n){return da.zip.apply(da,n)},da.keys=function(n){var t=[];for(var e in n)t.push(e);return t},da.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},da.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},da.merge=function(n){return Array.prototype.concat.apply([],n)},da.range=function(n,t,r){if(arguments.length\u003C3&&(r=1,arguments.length\u003C2&&(t=n,n=0)),1/0===(t-n)/r)throw new Error(\\\"infinite range\\\");var i,u=[],a=e(Math.abs(r)),o=-1;if(n*=a,t*=a,r*=a,0>r)for(;(i=n+r*++o)>t;)u.push(i/a);else for(;(i=n+r*++o)\u003Ct;)u.push(i/a);return u},da.map=function(n){var t=new i;for(var e in n)t.set(e,n[e]);return t},r(i,{has:function(n){return ka+n in this},get:function(n){return this[ka+n]},set:function(n,t){return this[ka+n]=t},remove:function(n){return n=ka+n,n in this&&delete this[n]},keys:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Aa&&n.call(this,t.substring(1),this[t])\\n}});var ka=\\\"\\\\0\\\",Aa=ka.charCodeAt(0);da.nest=function(){function n(t,o,c){if(c>=a.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,d=a[c++],m=new i;++g\u003Cp;)(h=m.get(l=d(s=o[g])))?h.push(s):m.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))}):(s={},f=function(e,r){s[e]=n(t,r,c)}),m.forEach(f),s}function t(n,e){if(e>=a.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,u={},a=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(da.map,e,0),0)},u.key=function(n){return a.push(n),u},u.sortKeys=function(n){return o[a.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},da.set=function(n){var t=new u;if(n)for(var e=0;e\u003Cn.length;e++)t.add(n[e]);return t},r(u,{has:function(n){return ka+n in this},add:function(n){return this[ka+n]=!0,n},remove:function(n){return n=ka+n,n in this&&delete this[n]},values:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Aa&&n.call(this,t.substring(1))}}),da.behavior={},da.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r\u003Ci;)n[e=arguments[r]]=a(n,t,t[e]);return n};var Na=[\\\"webkit\\\",\\\"ms\\\",\\\"moz\\\",\\\"Moz\\\",\\\"o\\\",\\\"O\\\"],qa=l;try{qa(va.childNodes)[0].nodeType}catch(Ta){qa=c}da.dispatch=function(){for(var n=new f,t=-1,e=arguments.length;++t\u003Ce;)n[arguments[t]]=h(n);return n},f.prototype.on=function(n,t){var e=n.indexOf(\\\".\\\"),r=\\\"\\\";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length\u003C2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},da.event=null,da.requote=function(n){return n.replace(Ca,\\\"\\\\\\\\$&\\\")};var Ca=/[\\\\\\\\\\\\^\\\\$\\\\*\\\\+\\\\?\\\\|\\\\[\\\\]\\\\(\\\\)\\\\.\\\\{\\\\}]/g,za={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Da=function(n,t){return t.querySelector(n)},ja=function(n,t){return t.querySelectorAll(n)},La=va[o(va,\\\"matchesSelector\\\")],Ha=function(n,t){return La.call(n,t)};\\\"function\\\"==typeof Sizzle&&(Da=function(n,t){return Sizzle(n,t)[0]||null},ja=function(n,t){return Sizzle.uniqueSort(Sizzle(n,t))},Ha=Sizzle.matchesSelector),da.selection=function(){return Ya};var Fa=da.selection.prototype=[];Fa.select=function(n){var t,e,r,i,u=[];n=v(n);for(var a=-1,o=this.length;++a\u003Co;){u.push(t=[]),t.parentNode=(r=this[a]).parentNode;for(var c=-1,l=r.length;++c\u003Cl;)(i=r[c])?(t.push(e=n.call(i,i.__data__,c,a)),e&&\\\"__data__\\\"in i&&(e.__data__=i.__data__)):t.push(null)}return m(u)},Fa.selectAll=function(n){var t,e,r=[];n=y(n);for(var i=-1,u=this.length;++i\u003Cu;)for(var a=this[i],o=-1,c=a.length;++o\u003Cc;)(e=a[o])&&(r.push(t=qa(n.call(e,e.__data__,o,i))),t.parentNode=e);return m(r)};var Pa={svg:\\\"http://www.w3.org/2000/svg\\\",xhtml:\\\"http://www.w3.org/1999/xhtml\\\",xlink:\\\"http://www.w3.org/1999/xlink\\\",xml:\\\"http://www.w3.org/XML/1998/namespace\\\",xmlns:\\\"http://www.w3.org/2000/xmlns/\\\"};da.ns={prefix:Pa,qualify:function(n){var t=n.indexOf(\\\":\\\"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),Pa.hasOwnProperty(e)?{space:Pa[e],local:n}:n}},Fa.attr=function(n,t){if(arguments.length\u003C2){if(\\\"string\\\"==typeof n){var e=this.node();return n=da.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(M(t,n[t]));return this}return this.each(M(n,t))},Fa.classed=function(n,t){if(arguments.length\u003C2){if(\\\"string\\\"==typeof n){var e=this.node(),r=(n=n.trim().split(/^|\\\\s+/g)).length,i=-1;if(t=e.classList){for(;++i\u003Cr;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute(\\\"class\\\");++i\u003Cr;)if(!b(n[i]).test(t))return!1;return!0}for(t in n)this.each(_(t,n[t]));return this}return this.each(_(n,t))},Fa.style=function(n,t,e){var r=arguments.length;if(3>r){if(\\\"string\\\"!=typeof n){2>r&&(t=\\\"\\\");for(e in n)this.each(S(e,n[e],t));return this}if(2>r)return ya.getComputedStyle(this.node(),null).getPropertyValue(n);e=\\\"\\\"}return this.each(S(n,t,e))},Fa.property=function(n,t){if(arguments.length\u003C2){if(\\\"string\\\"==typeof n)return this.node()[n];for(t in n)this.each(E(t,n[t]));return this}return this.each(E(n,t))},Fa.text=function(n){return arguments.length?this.each(\\\"function\\\"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?\\\"\\\":t}:null==n?function(){this.textContent=\\\"\\\"}:function(){this.textContent=n}):this.node().textContent},Fa.html=function(n){return arguments.length?this.each(\\\"function\\\"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?\\\"\\\":t}:null==n?function(){this.innerHTML=\\\"\\\"}:function(){this.innerHTML=n}):this.node().innerHTML},Fa.append=function(n){return n=k(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Fa.insert=function(n,t){return n=k(n),t=v(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments))})},Fa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},Fa.data=function(n,t){function e(n,e){var r,u,a,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),d=new Array(o);if(t){var m,v=new i,y=new i,M=[];for(r=-1;++r\u003Co;)m=t.call(u=n[r],u.__data__,r),v.has(m)?d[r]=u:v.set(m,u),M.push(m);for(r=-1;++r\u003Cf;)m=t.call(e,a=e[r],r),(u=v.get(m))?(g[r]=u,u.__data__=a):y.has(m)||(p[r]=A(a)),y.set(m,a),v.remove(m);for(r=-1;++r\u003Co;)v.has(M[r])&&(d[r]=n[r])}else{for(r=-1;++r\u003Ch;)u=n[r],a=e[r],u?(u.__data__=a,g[r]=u):p[r]=A(a);for(;f>r;++r)p[r]=A(e[r]);for(;o>r;++r)d[r]=n[r]}p.update=g,p.parentNode=g.parentNode=d.parentNode=n.parentNode,c.push(p),l.push(g),s.push(d)}var r,u,a=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++a\u003Co;)(u=r[a])&&(n[a]=u.__data__);return n}var c=C([]),l=m([]),s=m([]);if(\\\"function\\\"==typeof n)for(;++a\u003Co;)e(r=this[a],n.call(r,r.parentNode.__data__,a));else for(;++a\u003Co;)e(r=this[a],n);return l.enter=function(){return c},l.exit=function(){return s},l},Fa.datum=function(n){return arguments.length?this.property(\\\"__data__\\\",n):this.property(\\\"__data__\\\")},Fa.filter=function(n){var t,e,r,i=[];\\\"function\\\"!=typeof n&&(n=N(n));for(var u=0,a=this.length;a>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return m(i)},Fa.order=function(){for(var n=-1,t=this.length;++n\u003Ct;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Fa.sort=function(n){n=q.apply(this,arguments);for(var t=-1,e=this.length;++t\u003Ce;)this[t].sort(n);return this.order()},Fa.each=function(n){return T(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Fa.call=function(n){var t=qa(arguments);return n.apply(t[0]=this,t),this},Fa.empty=function(){return!this.node()},Fa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Fa.size=function(){var n=0;return this.each(function(){++n}),n};var Oa=[];da.selection.enter=C,da.selection.enter.prototype=Oa,Oa.append=Fa.append,Oa.empty=Fa.empty,Oa.node=Fa.node,Oa.call=Fa.call,Oa.size=Fa.size,Oa.select=function(n){for(var t,e,r,i,u,a=[],o=-1,c=this.length;++o\u003Cc;){r=(i=this[o]).update,a.push(t=[]),t.parentNode=i.parentNode;for(var l=-1,s=i.length;++l\u003Cs;)(u=i[l])?(t.push(r[l]=e=n.call(i.parentNode,u.__data__,l,o)),e.__data__=u.__data__):t.push(null)}return m(a)},Oa.insert=function(n,t){return arguments.length\u003C2&&(t=z(this)),Fa.insert.call(this,n,t)},Fa.transition=function(){for(var n,t,e=zc||++Fc,r=[],i=Dc||{time:Date.now(),ease:Nr,delay:0,duration:250},u=-1,a=this.length;++u\u003Ca;){r.push(n=[]);for(var o=this[u],c=-1,l=o.length;++c\u003Cl;)(t=o[c])&&Eu(t,c,e,i),n.push(t)}return _u(r,e)},da.select=function(n){var t=[\\\"string\\\"==typeof n?Da(n,ma):n];return t.parentNode=va,m([t])},da.selectAll=function(n){var t=qa(\\\"string\\\"==typeof n?ja(n,ma):n);return t.parentNode=va,m([t])};var Ya=da.select(va);Fa.on=function(n,t,e){var r=arguments.length;if(3>r){if(\\\"string\\\"!=typeof n){2>r&&(t=!1);for(e in n)this.each(D(e,n[e],t));return this}if(2>r)return(r=this.node()[\\\"__on\\\"+n])&&r._;e=!1}return this.each(D(n,t,e))};var Ra=da.map({mouseenter:\\\"mouseover\\\",mouseleave:\\\"mouseout\\\"});Ra.forEach(function(n){\\\"on\\\"+n in ma&&Ra.remove(n)});var Ua=o(va.style,\\\"userSelect\\\"),Ia=0;da.mouse=function(n){return F(n,p())};var Va=/WebKit/.test(ya.navigator.userAgent)?-1:0;da.touches=function(n,t){return arguments.length\u003C2&&(t=p().touches),t?qa(t).map(function(t){var e=F(n,t);return e.identifier=t.identifier,e}):[]},da.behavior.drag=function(){function n(){this.on(\\\"mousedown.drag\\\",a).on(\\\"touchstart.drag\\\",o)}function t(){return da.event.changedTouches[0].identifier}function e(n,t){return da.touches(n).filter(function(n){return n.identifier===t})[0]}function r(n,t,e,r){return function(){function a(){if(!s)return o();var n=t(s,g),e=n[0]-d[0],r=n[1]-d[1];m|=e|r,d=n,f({type:\\\"drag\\\",x:n[0]+c[0],y:n[1]+c[1],dx:e,dy:r})}function o(){v.on(e+\\\".\\\"+p,null).on(r+\\\".\\\"+p,null),y(m&&da.event.target===h),f({type:\\\"dragend\\\"})}var c,l=this,s=l.parentNode,f=i.of(l,arguments),h=da.event.target,g=n(),p=null==g?\\\"drag\\\":\\\"drag-\\\"+g,d=t(s,g),m=0,v=da.select(ya).on(e+\\\".\\\"+p,a).on(r+\\\".\\\"+p,o),y=H();u?(c=u.apply(l,arguments),c=[c.x-d[0],c.y-d[1]]):c=[0,0],f({type:\\\"dragstart\\\"})}}var i=d(n,\\\"drag\\\",\\\"dragstart\\\",\\\"dragend\\\"),u=null,a=r(s,da.mouse,\\\"mousemove\\\",\\\"mouseup\\\"),o=r(t,e,\\\"touchmove\\\",\\\"touchend\\\");return n.origin=function(t){return arguments.length?(u=t,n):u},da.rebind(n,i,\\\"on\\\")},da.behavior.zoom=function(){function n(){this.on(E,o).on(Ba+\\\".zoom\\\",l).on(k,s).on(\\\"dblclick.zoom\\\",f).on(\\\"touchstart.zoom\\\",c)}function t(n){return[(n[0]-_[0])/w,(n[1]-_[1])/w]}function e(n){return[n[0]*w+_[0],n[1]*w+_[1]]}function r(n){w=Math.max(S[0],Math.min(S[1],n))}function i(n,t){t=e(t),_[0]+=n[0]-t[0],_[1]+=n[1]-t[1]}function u(){y&&y.domain(v.range().map(function(n){return(n-_[0])/w}).map(v.invert)),x&&x.domain(M.range().map(function(n){return(n-_[1])/w}).map(M.invert))}function a(n){u(),n({type:\\\"zoom\\\",scale:w,translate:_})}function o(){function n(){c=1,i(da.mouse(r),f),a(u)}function e(){l.on(k,ya===r?s:null).on(A,null),h(c&&da.event.target===o)}var r=this,u=N.of(r,arguments),o=da.event.target,c=0,l=da.select(ya).on(k,n).on(A,e),f=t(da.mouse(r)),h=H()}function c(){function n(){var n=da.touches(u),t=n[0],e=h[t.identifier];if(c=n[1]){var c,l=h[c.identifier],s=da.event.scale;if(null==s){var f=(f=c[0]-t[0])*f+(f=c[1]-t[1])*f;s=p&&Math.sqrt(f/p)}t=[(t[0]+c[0])/2,(t[1]+c[1])/2],e=[(e[0]+l[0])/2,(e[1]+l[1])/2],r(s*m)}b=null,i(t,e),a(o)}function e(){v.on(f,null).on(d,null),y()}var u=this,o=N.of(u,arguments),c=da.touches(u),l=Date.now(),s=\\\"zoom-\\\"+da.event.changedTouches[0].identifier,f=\\\"touchmove.\\\"+s,d=\\\"touchend.\\\"+s,v=da.select(ya).on(f,n).on(d,e).on(E,null).on(k,null),y=H();if(m=w,h={},p=0,c.forEach(function(n){h[n.identifier]=t(n)}),1===c.length){if(500>l-b){var M=c[0],x=t(c[0]);r(2*w),i(M,x),g(),a(o)}b=l}else if(c.length>1){var M=c[0],_=c[1],S=M[0]-_[0],A=M[1]-_[1];p=S*S+A*A}}function l(){g(),h||(h=t(da.mouse(this))),r(Math.pow(2,.002*Xa())*w),i(da.mouse(this),h),a(N.of(this,arguments))}function s(){h=null}function f(){var n=da.mouse(this),e=t(n),u=Math.log(w)/Math.LN2;r(Math.pow(2,da.event.shiftKey?Math.ceil(u)-1:Math.floor(u)+1)),i(n,e),a(N.of(this,arguments))}var h,p,m,v,y,M,x,b,_=[0,0],w=1,S=Za,E=\\\"mousedown.zoom\\\",k=\\\"mousemove.zoom\\\",A=\\\"mouseup.zoom\\\",N=d(n,\\\"zoom\\\");return n.translate=function(t){return arguments.length?(_=t.map(Number),u(),n):_},n.scale=function(t){return arguments.length?(w=+t,u(),n):w},n.scaleExtent=function(t){return arguments.length?(S=null==t?Za:t.map(Number),n):S},n.x=function(t){return arguments.length?(y=t,v=t.copy(),_=[0,0],w=1,n):y},n.y=function(t){return arguments.length?(x=t,M=t.copy(),_=[0,0],w=1,n):x},da.rebind(n,N,\\\"on\\\")};var Xa,Za=[0,1/0],Ba=\\\"onwheel\\\"in ma?(Xa=function(){return-da.event.deltaY*(da.event.deltaMode?120:1)},\\\"wheel\\\"):\\\"onmousewheel\\\"in ma?(Xa=function(){return da.event.wheelDelta},\\\"mousewheel\\\"):(Xa=function(){return-da.event.detail},\\\"MozMousePixelScroll\\\");P.prototype.toString=function(){return this.rgb()+\\\"\\\"},da.hsl=function(n,t,e){return 1===arguments.length?n instanceof Y?O(n.h,n.s,n.l):ot(\\\"\\\"+n,ct,O):O(+n,+t,+e)};var $a=Y.prototype=new P;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),O(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),O(this.h,this.s,n*this.l)},$a.rgb=function(){return R(this.h,this.s,this.l)};var Wa=Math.PI,Ja=1e-6,Ga=Ja*Ja,Ka=Wa/180,Qa=180/Wa;da.hcl=function(n,t,e){return 1===arguments.length?n instanceof W?$(n.h,n.c,n.l):n instanceof K?nt(n.l,n.a,n.b):nt((n=lt((n=da.rgb(n)).r,n.g,n.b)).l,n.a,n.b):$(+n,+t,+e)};var no=W.prototype=new P;no.brighter=function(n){return $(this.h,this.c,Math.min(100,this.l+to*(arguments.length?n:1)))},no.darker=function(n){return $(this.h,this.c,Math.max(0,this.l-to*(arguments.length?n:1)))},no.rgb=function(){return J(this.h,this.c,this.l).rgb()},da.lab=function(n,t,e){return 1===arguments.length?n instanceof K?G(n.l,n.a,n.b):n instanceof W?J(n.l,n.c,n.h):lt((n=da.rgb(n)).r,n.g,n.b):G(+n,+t,+e)};var to=18,eo=.95047,ro=1,io=1.08883,uo=K.prototype=new P;uo.brighter=function(n){return G(Math.min(100,this.l+to*(arguments.length?n:1)),this.a,this.b)},uo.darker=function(n){return G(Math.max(0,this.l-to*(arguments.length?n:1)),this.a,this.b)},uo.rgb=function(){return Q(this.l,this.a,this.b)},da.rgb=function(n,t,e){return 1===arguments.length?n instanceof ut?it(n.r,n.g,n.b):ot(\\\"\\\"+n,it,R):it(~~n,~~t,~~e)};var ao=ut.prototype=new P;ao.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),it(Math.min(255,Math.floor(t/n)),Math.min(255,Math.floor(e/n)),Math.min(255,Math.floor(r/n)))):it(i,i,i)},ao.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),it(Math.floor(n*this.r),Math.floor(n*this.g),Math.floor(n*this.b))},ao.hsl=function(){return ct(this.r,this.g,this.b)},ao.toString=function(){return\\\"#\\\"+at(this.r)+at(this.g)+at(this.b)};var oo=da.map({aliceblue:\\\"#f0f8ff\\\",antiquewhite:\\\"#faebd7\\\",aqua:\\\"#00ffff\\\",aquamarine:\\\"#7fffd4\\\",azure:\\\"#f0ffff\\\",beige:\\\"#f5f5dc\\\",bisque:\\\"#ffe4c4\\\",black:\\\"#000000\\\",blanchedalmond:\\\"#ffebcd\\\",blue:\\\"#0000ff\\\",blueviolet:\\\"#8a2be2\\\",brown:\\\"#a52a2a\\\",burlywood:\\\"#deb887\\\",cadetblue:\\\"#5f9ea0\\\",chartreuse:\\\"#7fff00\\\",chocolate:\\\"#d2691e\\\",coral:\\\"#ff7f50\\\",cornflowerblue:\\\"#6495ed\\\",cornsilk:\\\"#fff8dc\\\",crimson:\\\"#dc143c\\\",cyan:\\\"#00ffff\\\",darkblue:\\\"#00008b\\\",darkcyan:\\\"#008b8b\\\",darkgoldenrod:\\\"#b8860b\\\",darkgray:\\\"#a9a9a9\\\",darkgreen:\\\"#006400\\\",darkgrey:\\\"#a9a9a9\\\",darkkhaki:\\\"#bdb76b\\\",darkmagenta:\\\"#8b008b\\\",darkolivegreen:\\\"#556b2f\\\",darkorange:\\\"#ff8c00\\\",darkorchid:\\\"#9932cc\\\",darkred:\\\"#8b0000\\\",darksalmon:\\\"#e9967a\\\",darkseagreen:\\\"#8fbc8f\\\",darkslateblue:\\\"#483d8b\\\",darkslategray:\\\"#2f4f4f\\\",darkslategrey:\\\"#2f4f4f\\\",darkturquoise:\\\"#00ced1\\\",darkviolet:\\\"#9400d3\\\",deeppink:\\\"#ff1493\\\",deepskyblue:\\\"#00bfff\\\",dimgray:\\\"#696969\\\",dimgrey:\\\"#696969\\\",dodgerblue:\\\"#1e90ff\\\",firebrick:\\\"#b22222\\\",floralwhite:\\\"#fffaf0\\\",forestgreen:\\\"#228b22\\\",fuchsia:\\\"#ff00ff\\\",gainsboro:\\\"#dcdcdc\\\",ghostwhite:\\\"#f8f8ff\\\",gold:\\\"#ffd700\\\",goldenrod:\\\"#daa520\\\",gray:\\\"#808080\\\",green:\\\"#008000\\\",greenyellow:\\\"#adff2f\\\",grey:\\\"#808080\\\",honeydew:\\\"#f0fff0\\\",hotpink:\\\"#ff69b4\\\",indianred:\\\"#cd5c5c\\\",indigo:\\\"#4b0082\\\",ivory:\\\"#fffff0\\\",khaki:\\\"#f0e68c\\\",lavender:\\\"#e6e6fa\\\",lavenderblush:\\\"#fff0f5\\\",lawngreen:\\\"#7cfc00\\\",lemonchiffon:\\\"#fffacd\\\",lightblue:\\\"#add8e6\\\",lightcoral:\\\"#f08080\\\",lightcyan:\\\"#e0ffff\\\",lightgoldenrodyellow:\\\"#fafad2\\\",lightgray:\\\"#d3d3d3\\\",lightgreen:\\\"#90ee90\\\",lightgrey:\\\"#d3d3d3\\\",lightpink:\\\"#ffb6c1\\\",lightsalmon:\\\"#ffa07a\\\",lightseagreen:\\\"#20b2aa\\\",lightskyblue:\\\"#87cefa\\\",lightslategray:\\\"#778899\\\",lightslategrey:\\\"#778899\\\",lightsteelblue:\\\"#b0c4de\\\",lightyellow:\\\"#ffffe0\\\",lime:\\\"#00ff00\\\",limegreen:\\\"#32cd32\\\",linen:\\\"#faf0e6\\\",magenta:\\\"#ff00ff\\\",maroon:\\\"#800000\\\",mediumaquamarine:\\\"#66cdaa\\\",mediumblue:\\\"#0000cd\\\",mediumorchid:\\\"#ba55d3\\\",mediumpurple:\\\"#9370db\\\",mediumseagreen:\\\"#3cb371\\\",mediumslateblue:\\\"#7b68ee\\\",mediumspringgreen:\\\"#00fa9a\\\",mediumturquoise:\\\"#48d1cc\\\",mediumvioletred:\\\"#c71585\\\",midnightblue:\\\"#191970\\\",mintcream:\\\"#f5fffa\\\",mistyrose:\\\"#ffe4e1\\\",moccasin:\\\"#ffe4b5\\\",navajowhite:\\\"#ffdead\\\",navy:\\\"#000080\\\",oldlace:\\\"#fdf5e6\\\",olive:\\\"#808000\\\",olivedrab:\\\"#6b8e23\\\",orange:\\\"#ffa500\\\",orangered:\\\"#ff4500\\\",orchid:\\\"#da70d6\\\",palegoldenrod:\\\"#eee8aa\\\",palegreen:\\\"#98fb98\\\",paleturquoise:\\\"#afeeee\\\",palevioletred:\\\"#db7093\\\",papayawhip:\\\"#ffefd5\\\",peachpuff:\\\"#ffdab9\\\",peru:\\\"#cd853f\\\",pink:\\\"#ffc0cb\\\",plum:\\\"#dda0dd\\\",powderblue:\\\"#b0e0e6\\\",purple:\\\"#800080\\\",red:\\\"#ff0000\\\",rosybrown:\\\"#bc8f8f\\\",royalblue:\\\"#4169e1\\\",saddlebrown:\\\"#8b4513\\\",salmon:\\\"#fa8072\\\",sandybrown:\\\"#f4a460\\\",seagreen:\\\"#2e8b57\\\",seashell:\\\"#fff5ee\\\",sienna:\\\"#a0522d\\\",silver:\\\"#c0c0c0\\\",skyblue:\\\"#87ceeb\\\",slateblue:\\\"#6a5acd\\\",slategray:\\\"#708090\\\",slategrey:\\\"#708090\\\",snow:\\\"#fffafa\\\",springgreen:\\\"#00ff7f\\\",steelblue:\\\"#4682b4\\\",tan:\\\"#d2b48c\\\",teal:\\\"#008080\\\",thistle:\\\"#d8bfd8\\\",tomato:\\\"#ff6347\\\",turquoise:\\\"#40e0d0\\\",violet:\\\"#ee82ee\\\",wheat:\\\"#f5deb3\\\",white:\\\"#ffffff\\\",whitesmoke:\\\"#f5f5f5\\\",yellow:\\\"#ffff00\\\",yellowgreen:\\\"#9acd32\\\"});oo.forEach(function(n,t){oo.set(n,ot(t,it,R))}),da.functor=ht,da.xhr=pt(gt),da.dsv=function(n,t){function e(n,e,u){arguments.length\u003C3&&(u=e,e=null);var a=da.xhr(n,t,u);return a.row=function(n){return arguments.length?a.response(null==(e=n)?r:i(n)):e},a.row(e)}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function a(t){return t.map(o).join(n)}function o(n){return c.test(n)?'\\\"'+n.replace(/\\\\\\\"/g,'\\\"\\\"')+'\\\"':n}var c=new RegExp('[\\\"'+n+\\\"\\\\n]\\\"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function(\\\"d\\\",\\\"return {\\\"+n.map(function(n,t){return JSON.stringify(n)+\\\": d[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\"}\\\");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(s>=c)return a;if(i)return i=!1,u;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++\u003Cc;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(i=!0),n.substring(t+1,e).replace(/\\\"\\\"/g,'\\\"')}for(;c>s;){var r=n.charCodeAt(s++),o=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(s)&&(++s,++o);else if(r!==l)continue;return n.substring(t,s-o)}return n.substring(t)}for(var r,i,u={},a={},o=[],c=n.length,s=0,f=0;(r=e())!==a;){for(var h=[];r!==u&&r!==a;)h.push(r),r=e();(!t||(h=t(h,f++)))&&o.push(h)}return o},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new u,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join(\\\"\\\\n\\\")},e.formatRows=function(n){return n.map(a).join(\\\"\\\\n\\\")},e},da.csv=da.dsv(\\\",\\\",\\\"text/csv\\\"),da.tsv=da.dsv(\\\"\\t\\\",\\\"text/tab-separated-values\\\");var co,lo,so,fo;da.timer=function(n,t,e){if(arguments.length\u003C3){if(arguments.length\u003C2)t=0;else if(!isFinite(t))return;e=Date.now()}var r=e+t,i={callback:n,time:r,next:null};lo?lo.next=i:co=i,lo=i,so||(fo=clearTimeout(fo),so=1,ho(vt))},da.timer.flush=function(){yt(),Mt()};var ho=ya[o(ya,\\\"requestAnimationFrame\\\")]||function(n){setTimeout(n,17)},go=\\\".\\\",po=\\\",\\\",mo=[3,3],vo=\\\"$\\\",yo=[\\\"y\\\",\\\"z\\\",\\\"a\\\",\\\"f\\\",\\\"p\\\",\\\"n\\\",\\\"µ\\\",\\\"m\\\",\\\"\\\",\\\"k\\\",\\\"M\\\",\\\"G\\\",\\\"T\\\",\\\"P\\\",\\\"E\\\",\\\"Z\\\",\\\"Y\\\"].map(xt);da.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=da.round(n,bt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),yo[8+e/3]},da.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)},da.format=function(n){var t=Mo.exec(n),e=t[1]||\\\" \\\",r=t[2]||\\\">\\\",i=t[3]||\\\"\\\",u=t[4]||\\\"\\\",a=t[5],o=+t[6],c=t[7],l=t[8],s=t[9],f=1,h=\\\"\\\",g=!1;switch(l&&(l=+l.substring(1)),(a||\\\"0\\\"===e&&\\\"=\\\"===r)&&(a=e=\\\"0\\\",r=\\\"=\\\",c&&(o-=Math.floor((o-1)/4))),s){case\\\"n\\\":c=!0,s=\\\"g\\\";break;case\\\"%\\\":f=100,h=\\\"%\\\",s=\\\"f\\\";break;case\\\"p\\\":f=100,h=\\\"%\\\",s=\\\"r\\\";break;case\\\"b\\\":case\\\"o\\\":case\\\"x\\\":case\\\"X\\\":\\\"#\\\"===u&&(u=\\\"0\\\"+s.toLowerCase());case\\\"c\\\":case\\\"d\\\":g=!0,l=0;break;case\\\"s\\\":f=-1,s=\\\"r\\\"}\\\"#\\\"===u?u=\\\"\\\":\\\"$\\\"===u&&(u=vo),\\\"r\\\"!=s||l||(s=\\\"g\\\"),null!=l&&(\\\"g\\\"==s?l=Math.max(1,Math.min(21,l)):(\\\"e\\\"==s||\\\"f\\\"==s)&&(l=Math.max(0,Math.min(20,l)))),s=xo.get(s)||_t;var p=a&&c;return function(n){if(g&&n%1)return\\\"\\\";var t=0>n||0===n&&0>1/n?(n=-n,\\\"-\\\"):i;if(0>f){var d=da.formatPrefix(n,l);n=d.scale(n),h=d.symbol}else n*=f;n=s(n,l);var m=n.lastIndexOf(\\\".\\\"),v=0>m?n:n.substring(0,m),y=0>m?\\\"\\\":go+n.substring(m+1);!a&&c&&(v=bo(v));var M=u.length+v.length+y.length+(p?0:t.length),x=o>M?new Array(M=o-M+1).join(e):\\\"\\\";return p&&(v=bo(x+v)),t+=u,n=v+y,(\\\"\u003C\\\"===r?t+n+x:\\\">\\\"===r?x+t+n:\\\"^\\\"===r?x.substring(0,M>>=1)+t+n+x.substring(M):t+(p?n:x+n))+h}};var Mo=/(?:([^{])?([\u003C>=^]))?([+\\\\- ])?([$#])?(0)?(\\\\d+)?(,)?(\\\\.-?\\\\d+)?([a-z%])?/i,xo=da.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=da.round(n,bt(n,t))).toFixed(Math.max(0,Math.min(20,bt(n*(1+1e-15),t))))}}),bo=gt;if(mo){var _o=mo.length;bo=function(n){for(var t=n.length,e=[],r=0,i=mo[0];t>0&&i>0;)e.push(n.substring(t-=i,t+i)),i=mo[r=(r+1)%_o];return e.reverse().join(po)}}da.geo={},wt.prototype={s:0,t:0,add:function(n){St(n,this.t,wo),St(wo.s,this.s,this),this.s?this.t+=wo.t:this.s=wo.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var wo=new wt;da.geo.stream=function(n,t){n&&So.hasOwnProperty(n.type)?So[n.type](n,t):Et(n,t)};var So={Feature:function(n,t){Et(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r\u003Ci;)Et(e[r].geometry,t)}},Eo={Sphere:function(n,t){t.sphere()},Point:function(n,t){var e=n.coordinates;t.point(e[0],e[1])},MultiPoint:function(n,t){for(var e,r=n.coordinates,i=-1,u=r.length;++i\u003Cu;)e=r[i],t.point(e[0],e[1])},LineString:function(n,t){kt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r\u003Ci;)kt(e[r],t,0)},Polygon:function(n,t){At(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r\u003Ci;)At(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r\u003Ci;)Et(e[r],t)}};da.geo.area=function(n){return ko=0,da.geo.stream(n,No),ko};var ko,Ao=new wt,No={sphere:function(){ko+=4*Wa},point:s,lineStart:s,lineEnd:s,polygonStart:function(){Ao.reset(),No.lineStart=Nt},polygonEnd:function(){var n=2*Ao;ko+=0>n?4*Wa+n:n,No.lineStart=No.lineEnd=No.point=s}};da.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=qt([t*Ka,e*Ka]);if(v){var i=Ct(v,r),u=[i[1],-i[0],0],a=Ct(u,i);jt(a),a=Lt(a);var c=t-p,l=c>0?1:-1,d=a[0]*Qa*l,m=Math.abs(c)>180;if(m^(d>l*p&&l*t>d)){var y=a[1]*Qa;y>g&&(g=y)}else if(d=(d+360)%360-180,m^(d>l*p&&l*t>d)){var y=-a[1]*Qa;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);m?p>t?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t)}else n(t,e);v=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,v=null}function i(n,e){if(v){var r=n-p;y+=Math.abs(r)>180?r+(r>0?360:-360):r}else d=n,m=e;No.point(n,e),t(n,e)}function u(){No.lineStart()}function a(){i(d,m),No.lineEnd(),Math.abs(y)>Ja&&(s=-(h=180)),x[0]=s,x[1]=h,v=null}function o(n,t){return(t-=n)\u003C0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]\u003C=t[1]?t[0]\u003C=n&&n\u003C=t[1]:n\u003Ct[0]||t[1]\u003Cn}var s,f,h,g,p,d,m,v,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=a,y=0,No.polygonStart()},polygonEnd:function(){No.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>Ao?(s=-(h=180),f=-(g=90)):y>Ja?g=90:-Ja>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],da.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],l(e[0],i)||l(e[1],i)?(o(i[0],e[1])>o(i[0],i[1])&&(i[1]=e[1]),o(e[0],i[1])>o(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var a,e,p=-1/0,t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(a=o(i[1],e[0]))>p&&(p=a,s=e[0],h=i[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),da.geo.centroid=function(n){qo=To=Co=zo=Do=jo=Lo=Ho=Fo=Po=Oo=0,da.geo.stream(n,Yo);var t=Fo,e=Po,r=Oo,i=t*t+e*e+r*r;return Ga>i&&(t=jo,e=Lo,r=Ho,Ja>To&&(t=Co,e=zo,r=Do),i=t*t+e*e+r*r,Ga>i)?[0/0,0/0]:[Math.atan2(e,t)*Qa,V(r/Math.sqrt(i))*Qa]};var qo,To,Co,zo,Do,jo,Lo,Ho,Fo,Po,Oo,Yo={sphere:s,point:Ft,lineStart:Ot,lineEnd:Yt,polygonStart:function(){Yo.lineStart=Rt},polygonEnd:function(){Yo.lineStart=Ot}},Ro=Xt(Ut,Jt,Kt,Qt),Uo=[-Wa,0],Io=1e9;(da.geo.conicEqualArea=function(){return ie(ue)}).raw=ue,da.geo.albers=function(){return da.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},da.geo.albersUsa=function(){function n(n){var u=n[0],a=n[1];return t=null,e(u,a),t||(r(u,a),t)||i(u,a),t}var t,e,r,i,u=da.geo.albers(),a=da.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),o=da.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?a:i>=.166&&.234>i&&r>=-.214&&-.115>r?o:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=a.stream(n),r=o.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),a.precision(t),o.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),a.scale(.35*t),o.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var l=u.scale(),s=+t[0],f=+t[1];return e=u.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=a.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ja,f+.12*l+Ja],[s-.214*l-Ja,f+.234*l-Ja]]).stream(c).point,i=o.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ja,f+.166*l+Ja],[s-.115*l-Ja,f+.234*l-Ja]]).stream(c).point,n},n.scale(1070)};var Vo,Xo,Zo,Bo,$o,Wo,Jo={point:s,lineStart:s,lineEnd:s,polygonStart:function(){Xo=0,Jo.lineStart=ae},polygonEnd:function(){Jo.lineStart=Jo.lineEnd=Jo.point=s,Vo+=Math.abs(Xo/2)}},Go={point:oe,lineStart:s,lineEnd:s,polygonStart:s,polygonEnd:s},Ko={point:se,lineStart:fe,lineEnd:he,polygonStart:function(){Ko.lineStart=ge},polygonEnd:function(){Ko.point=se,Ko.lineStart=fe,Ko.lineEnd=he}};da.geo.path=function(){function n(n){return n&&(\\\"function\\\"==typeof o&&u.pointRadius(+o.apply(this,arguments)),a&&a.valid||(a=i(u)),da.geo.stream(n,a)),u.result()}function t(){return a=null,n}var e,r,i,u,a,o=4.5;return n.area=function(n){return Vo=0,da.geo.stream(n,i(Jo)),Vo},n.centroid=function(n){return Co=zo=Do=jo=Lo=Ho=Fo=Po=Oo=0,da.geo.stream(n,i(Ko)),Oo?[Fo/Oo,Po/Oo]:Ho?[jo/Ho,Lo/Ho]:Do?[Co/Do,zo/Do]:[0/0,0/0]},n.bounds=function(n){return $o=Wo=-(Zo=Bo=1/0),da.geo.stream(n,i(Go)),[[Zo,Bo],[$o,Wo]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||me(n):gt,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new ce:new pe(n),\\\"function\\\"!=typeof o&&u.pointRadius(o),t()):r},n.pointRadius=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:(u.pointRadius(+t),+t),n):o},n.projection(da.geo.albersUsa()).context(null)},da.geo.projection=ve,da.geo.projectionMutator=ye,(da.geo.equirectangular=function(){return ve(xe)}).raw=xe.invert=xe,da.geo.rotation=function(n){function t(t){return t=n(t[0]*Ka,t[1]*Ka),t[0]*=Qa,t[1]*=Qa,t}return n=be(n[0]%360*Ka,n[1]*Ka,n.length>2?n[2]*Ka:0),t.invert=function(t){return t=n.invert(t[0]*Ka,t[1]*Ka),t[0]*=Qa,t[1]*=Qa,t},t},da.geo.circle=function(){function n(){var n=\\\"function\\\"==typeof r?r.apply(this,arguments):r,t=be(-n[0]*Ka,-n[1]*Ka,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Qa,n[1]*=Qa}}),{type:\\\"Polygon\\\",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=Ee((t=+r)*Ka,i*Ka),n):t},n.precision=function(r){return arguments.length?(e=Ee(t*Ka,(i=+r)*Ka),n):i},n.angle(90)},da.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Ka,i=n[1]*Ka,u=t[1]*Ka,a=Math.sin(r),o=Math.cos(r),c=Math.sin(i),l=Math.cos(i),s=Math.sin(u),f=Math.cos(u);return Math.atan2(Math.sqrt((e=f*a)*e+(e=l*s-c*f*o)*e),c*s+l*f*o)},da.geo.graticule=function(){function n(){return{type:\\\"MultiLineString\\\",coordinates:t()}}function t(){return da.range(Math.ceil(u/m)*m,i,m).map(h).concat(da.range(Math.ceil(l/v)*v,c,v).map(g)).concat(da.range(Math.ceil(r/p)*p,e,p).filter(function(n){return Math.abs(n%m)>Ja}).map(s)).concat(da.range(Math.ceil(o/d)*d,a,d).filter(function(n){return Math.abs(n%v)>Ja}).map(f))}var e,r,i,u,a,o,c,l,s,f,h,g,p=10,d=p,m=90,v=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:\\\"LineString\\\",coordinates:n}})},n.outline=function(){return{type:\\\"Polygon\\\",coordinates:[h(u).concat(g(c).slice(1),h(i).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],l=+t[0][1],c=+t[1][1],u>i&&(t=u,u=i,i=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[u,l],[i,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),o>a&&(t=o,o=a,a=t),n.precision(y)):[[r,o],[e,a]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(m=+t[0],v=+t[1],n):[m,v]},n.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],n):[p,d]},n.precision=function(t){return arguments.length?(y=+t,s=Ae(o,a,90),f=Ne(r,e,y),h=Ae(l,c,90),g=Ne(u,i,y),n):y},n.majorExtent([[-180,-90+Ja],[180,90-Ja]]).minorExtent([[-180,-80-Ja],[180,80+Ja]])},da.geo.greatArc=function(){function n(){return{type:\\\"LineString\\\",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=qe,i=Te;return n.distance=function(){return da.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t=\\\"function\\\"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e=\\\"function\\\"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},da.geo.interpolate=function(n,t){return Ce(n[0]*Ka,n[1]*Ka,t[0]*Ka,t[1]*Ka)},da.geo.length=function(n){return Qo=0,da.geo.stream(n,nc),Qo};var Qo,nc={sphere:s,point:s,lineStart:ze,lineEnd:s,polygonStart:s,polygonEnd:s},tc=De(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(da.geo.azimuthalEqualArea=function(){return ve(tc)}).raw=tc;var ec=De(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},gt);(da.geo.azimuthalEquidistant=function(){return ve(ec)}).raw=ec,(da.geo.conicConformal=function(){return ie(je)}).raw=je,(da.geo.conicEquidistant=function(){return ie(Le)}).raw=Le;var rc=De(function(n){return 1/n},Math.atan);(da.geo.gnomonic=function(){return ve(rc)}).raw=rc,He.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Wa/2]},(da.geo.mercator=function(){return Fe(He)}).raw=He;var ic=De(function(){return 1},Math.asin);(da.geo.orthographic=function(){return ve(ic)}).raw=ic;var uc=De(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(da.geo.stereographic=function(){return ve(uc)}).raw=uc,Pe.invert=function(n,t){return[Math.atan2(X(n),Math.cos(t)),V(Math.sin(t)/Z(n))]},(da.geo.transverseMercator=function(){return Fe(Pe)}).raw=Pe,da.geom={},da.svg={},da.svg.line=function(){return Oe(gt)\\n};var ac=da.map({linear:Ue,\\\"linear-closed\\\":Ie,step:Ve,\\\"step-before\\\":Xe,\\\"step-after\\\":Ze,basis:Ke,\\\"basis-open\\\":Qe,\\\"basis-closed\\\":nr,bundle:tr,cardinal:We,\\\"cardinal-open\\\":Be,\\\"cardinal-closed\\\":$e,monotone:or});ac.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var oc=[0,2/3,1/3,0],cc=[0,1/3,2/3,0],lc=[0,1/6,2/3,1/6];da.geom.hull=function(n){function t(n){if(n.length\u003C3)return[];var t,i,u,a,o,c,l,s,f,h,g,p,d=ht(e),m=ht(r),v=n.length,y=v-1,M=[],x=[],b=0;if(d===Ye&&r===Re)t=n;else for(u=0,t=[];v>u;++u)t.push([+d.call(this,i=n[u],u),+m.call(this,i,u)]);for(u=1;v>u;++u)(t[u][1]\u003Ct[b][1]||t[u][1]==t[b][1]&&t[u][0]\u003Ct[b][0])&&(b=u);for(u=0;v>u;++u)u!==b&&(c=t[u][1]-t[b][1],o=t[u][0]-t[b][0],M.push({angle:Math.atan2(c,o),index:u}));for(M.sort(function(n,t){return n.angle-t.angle}),g=M[0].angle,h=M[0].index,f=0,u=1;y>u;++u){if(a=M[u].index,g==M[u].angle){if(o=t[h][0]-t[b][0],c=t[h][1]-t[b][1],l=t[a][0]-t[b][0],s=t[a][1]-t[b][1],o*o+c*c>=l*l+s*s){M[u].index=-1;continue}M[f].index=-1}g=M[u].angle,f=u,h=a}for(x.push(b),u=0,a=0;2>u;++a)M[a].index>-1&&(x.push(M[a].index),u++);for(p=x.length;y>a;++a)if(!(M[a].index\u003C0)){for(;!cr(x[p-2],x[p-1],M[a].index,t);)--p;x[p++]=M[a].index}var _=[];for(u=p-1;u>=0;--u)_.push(n[x[u]]);return _}var e=Ye,r=Re;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},da.geom.polygon=function(n){return za(n,sc),n};var sc=da.geom.polygon.prototype=[];sc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t\u003Ce;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},sc.centroid=function(n){var t,e,r=-1,i=this.length,u=0,a=0,o=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r\u003Ci;)t=o,o=this[r],e=t[0]*o[1]-o[0]*t[1],u+=(t[0]+o[0])*e,a+=(t[1]+o[1])*e;return[u*n,a*n]},sc.clip=function(n){for(var t,e,r,i,u,a,o=fr(n),c=-1,l=this.length-fr(this),s=this[l-1];++c\u003Cl;){for(t=n.slice(),n.length=0,i=this[c],u=t[(r=t.length-o)-1],e=-1;++e\u003Cr;)a=t[e],lr(a,s,i)?(lr(u,s,i)||n.push(sr(u,a,s,i)),n.push(a)):lr(u,s,i)&&n.push(sr(u,a,s,i)),u=a;o&&n.push(n[0]),s=i}return n},da.geom.delaunay=function(n){var t=n.map(function(){return[]}),e=[];return hr(n,function(e){t[e.region.l.index].push(n[e.region.r.index])}),t.forEach(function(t,r){var i=n[r],u=i[0],a=i[1];t.forEach(function(n){n.angle=Math.atan2(n[0]-u,n[1]-a)}),t.sort(function(n,t){return n.angle-t.angle});for(var o=0,c=t.length-1;c>o;o++)e.push([i,t[o],t[o+1]])}),e},da.geom.voronoi=function(n){function t(n){var t,u,a,o=n.map(function(){return[]}),c=ht(e),l=ht(r),s=n.length,f=1e6;if(c===Ye&&l===Re)t=n;else for(t=new Array(s),a=0;s>a;++a)t[a]=[+c.call(this,u=n[a],a),+l.call(this,u,a)];if(hr(t,function(n){var t,e,r,i,u,a;1===n.a&&n.b>=0?(t=n.ep.r,e=n.ep.l):(t=n.ep.l,e=n.ep.r),1===n.a?(u=t?t.y:-f,r=n.c-n.b*u,a=e?e.y:f,i=n.c-n.b*a):(r=t?t.x:-f,u=n.c-n.a*r,i=e?e.x:f,a=n.c-n.a*i);var c=[r,u],l=[i,a];o[n.region.l.index].push(c,l),o[n.region.r.index].push(c,l)}),o=o.map(function(n,e){var r=t[e][0],i=t[e][1],u=n.map(function(n){return Math.atan2(n[0]-r,n[1]-i)}),a=da.range(n.length).sort(function(n,t){return u[n]-u[t]});return a.filter(function(n,t){return!t||u[n]-u[a[t-1]]>Ja}).map(function(t){return n[t]})}),o.forEach(function(n,e){var r=n.length;if(!r)return n.push([-f,-f],[-f,f],[f,f],[f,-f]);if(!(r>2)){var i=t[e],u=n[0],a=n[1],o=i[0],c=i[1],l=u[0],s=u[1],h=a[0],g=a[1],p=Math.abs(h-l),d=g-s;if(Math.abs(d)\u003CJa){var m=s>c?-f:f;n.push([-f,m],[f,m])}else if(Ja>p){var v=l>o?-f:f;n.push([v,-f],[v,f])}else{var m=(l-o)*(g-s)>(h-l)*(s-c)?f:-f,y=Math.abs(d)-p;Math.abs(y)\u003CJa?n.push([0>d?m:-m,m]):(y>0&&(m*=-1),n.push([-f,m],[f,m]))}}}),i)for(a=0;s>a;++a)i.clip(o[a]);for(a=0;s>a;++a)o[a].point=n[a];return o}var e=Ye,r=Re,i=null;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.clipExtent=function(n){if(!arguments.length)return i&&[i[0],i[2]];if(null==n)i=null;else{var e=+n[0][0],r=+n[0][1],u=+n[1][0],a=+n[1][1];i=da.geom.polygon([[e,r],[e,a],[u,a],[u,r]])}return t},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):i&&i[2]},t.links=function(n){var t,i,u,a=n.map(function(){return[]}),o=[],c=ht(e),l=ht(r),s=n.length;if(c===Ye&&l===Re)t=n;else for(t=new Array(s),u=0;s>u;++u)t[u]=[+c.call(this,i=n[u],u),+l.call(this,i,u)];return hr(t,function(t){var e=t.region.l.index,r=t.region.r.index;a[e][r]||(a[e][r]=a[r][e]=!0,o.push({source:n[e],target:n[r]}))}),o},t.triangles=function(n){if(e===Ye&&r===Re)return da.geom.delaunay(n);for(var t,i=new Array(c),u=ht(e),a=ht(r),o=-1,c=n.length;++o\u003Cc;)(i[o]=[+u.call(this,t=n[o],o),+a.call(this,t,o)]).data=t;return da.geom.delaunay(i).map(function(n){return n.map(function(n){return n.data})})},t)};var fc={l:\\\"r\\\",r:\\\"l\\\"};da.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,a,o){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(Math.abs(c-e)+Math.abs(s-r)\u003C.01)l(n,t,e,r,i,u,a,o);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,i,u,a,o),l(n,t,e,r,i,u,a,o)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,i,u,a,o)}function l(n,t,e,r,i,a,o,c){var l=.5*(i+o),s=.5*(a+c),f=e>=l,h=r>=s,g=(h\u003C\u003C1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=dr()),f?i=l:o=l,h?a=s:c=s,u(n,t,e,r,i,a,o,c)}var s,f,h,g,p,d,m,v,y,M=ht(o),x=ht(c);if(null!=t)d=t,m=e,v=r,y=i;else if(v=y=-(d=m=1/0),f=[],h=[],p=n.length,a)for(g=0;p>g;++g)s=n[g],s.x\u003Cd&&(d=s.x),s.y\u003Cm&&(m=s.y),s.x>v&&(v=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);d>b&&(d=b),m>_&&(m=_),b>v&&(v=b),_>y&&(y=_),f.push(b),h.push(_)}var w=v-d,S=y-m;w>S?y=m+w:v=d+S;var E=dr();if(E.add=function(n){u(E,n,+M(n,++g),+x(n,g),d,m,v,y)},E.visit=function(n){mr(n,E,d,m,v,y)},g=-1,null==t){for(;++g\u003Cp;)u(E,n[g],f[g],h[g],d,m,v,y);--g}else n.forEach(E.add);return f=h=n=s=null,E}var a,o=Ye,c=Re;return(a=arguments.length)?(o=gr,c=pr,3===a&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(o=n,u):o},u.y=function(n){return arguments.length?(c=n,u):c},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},da.interpolateRgb=vr,da.interpolateObject=yr,da.interpolateNumber=Mr,da.interpolateString=xr;var hc=/[-+]?(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?/g;da.interpolate=br,da.interpolators=[function(n,t){var e=typeof t;return(\\\"string\\\"===e?oo.has(t)||/^(#|rgb\\\\(|hsl\\\\()/.test(t)?vr:xr:t instanceof P?vr:\\\"object\\\"===e?Array.isArray(t)?_r:yr:Mr)(n,t)}],da.interpolateArray=_r;var gc=function(){return gt},pc=da.map({linear:gc,poly:qr,quad:function(){return kr},cubic:function(){return Ar},sin:function(){return Tr},exp:function(){return Cr},circle:function(){return zr},elastic:Dr,back:jr,bounce:function(){return Lr}}),dc=da.map({\\\"in\\\":gt,out:Sr,\\\"in-out\\\":Er,\\\"out-in\\\":function(n){return Er(Sr(n))}});da.ease=function(n){var t=n.indexOf(\\\"-\\\"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):\\\"in\\\";return e=pc.get(e)||gc,r=dc.get(r)||gt,wr(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},da.interpolateHcl=Hr,da.interpolateHsl=Fr,da.interpolateLab=Pr,da.interpolateRound=Or,da.transform=function(n){var t=ma.createElementNS(da.ns.prefix.svg,\\\"g\\\");return(da.transform=function(n){if(null!=n){t.setAttribute(\\\"transform\\\",n);var e=t.transform.baseVal.consolidate()}return new Yr(e?e.matrix:mc)})(n)},Yr.prototype.toString=function(){return\\\"translate(\\\"+this.translate+\\\")rotate(\\\"+this.rotate+\\\")skewX(\\\"+this.skew+\\\")scale(\\\"+this.scale+\\\")\\\"};var mc={a:1,b:0,c:0,d:1,e:0,f:0};da.interpolateTransform=Vr,da.layout={},da.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e\u003Cr;)t.push(Br(n[e]));return t}},da.layout.chord=function(){function n(){var n,l,f,h,g,p={},d=[],m=da.range(u),v=[];for(e=[],r=[],n=0,h=-1;++h\u003Cu;){for(l=0,g=-1;++g\u003Cu;)l+=i[h][g];d.push(l),v.push(da.range(u)),n+=l}for(a&&m.sort(function(n,t){return a(d[n],d[t])}),o&&v.forEach(function(n,t){n.sort(function(n,e){return o(i[t][n],i[t][e])})}),n=(2*Wa-s*u)/n,l=0,h=-1;++h\u003Cu;){for(f=l,g=-1;++g\u003Cu;){var y=m[h],M=v[y][g],x=i[y][M],b=l,_=l+=x*n;p[y+\\\"-\\\"+M]={index:y,subindex:M,startAngle:b,endAngle:_,value:x}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h\u003Cu;)for(g=h-1;++g\u003Cu;){var w=p[h+\\\"-\\\"+g],S=p[g+\\\"-\\\"+h];(w.value||S.value)&&e.push(w.value\u003CS.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,a,o,c,l={},s=0;return l.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,l):i},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(a=n,e=r=null,l):a},l.sortSubgroups=function(n){return arguments.length?(o=n,e=null,l):o},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},da.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,a=t.cy-n.y,o=1/Math.sqrt(u*u+a*a);if(d>(i-e)*o){var c=t.charge*o*o;return n.px-=u*c,n.py-=a*c,!0}if(t.point&&isFinite(o)){var c=t.pointCharge*o*o;n.px-=u*c,n.py-=a*c}}return!t.charge}}function t(n){n.px=da.event.x,n.py=da.event.y,o.resume()}var e,r,i,u,a,o={},c=da.dispatch(\\\"start\\\",\\\"tick\\\",\\\"end\\\"),l=[1,1],s=.9,f=vc,h=yc,g=-30,p=.1,d=.8,m=[],v=[];return o.tick=function(){if((r*=.99)\u003C.005)return c.end({type:\\\"end\\\",alpha:r=0}),!0;var t,e,o,f,h,d,y,M,x,b=m.length,_=v.length;for(e=0;_>e;++e)o=v[e],f=o.source,h=o.target,M=h.x-f.x,x=h.y-f.y,(d=M*M+x*x)&&(d=r*u[e]*((d=Math.sqrt(d))-i[e])/d,M*=d,x*=d,h.x-=M*(y=f.weight/(h.weight+f.weight)),h.y-=x*y,f.x+=M*(y=1-y),f.y+=x*y);if((y=r*p)&&(M=l[0]/2,x=l[1]/2,e=-1,y))for(;++e\u003Cb;)o=m[e],o.x+=(M-o.x)*y,o.y+=(x-o.y)*y;if(g)for(ni(t=da.geom.quadtree(m),r,a),e=-1;++e\u003Cb;)(o=m[e]).fixed||t.visit(n(o));for(e=-1;++e\u003Cb;)o=m[e],o.fixed?(o.x=o.px,o.y=o.py):(o.x-=(o.px-(o.px=o.x))*s,o.y-=(o.py-(o.py=o.y))*s);c.tick({type:\\\"tick\\\",alpha:r})},o.nodes=function(n){return arguments.length?(m=n,o):m},o.links=function(n){return arguments.length?(v=n,o):v},o.size=function(n){return arguments.length?(l=n,o):l},o.linkDistance=function(n){return arguments.length?(f=\\\"function\\\"==typeof n?n:+n,o):f},o.distance=o.linkDistance,o.linkStrength=function(n){return arguments.length?(h=\\\"function\\\"==typeof n?n:+n,o):h},o.friction=function(n){return arguments.length?(s=+n,o):s},o.charge=function(n){return arguments.length?(g=\\\"function\\\"==typeof n?n:+n,o):g},o.gravity=function(n){return arguments.length?(p=+n,o):p},o.theta=function(n){return arguments.length?(d=+n,o):d},o.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:\\\"start\\\",alpha:r=n}),da.timer(o.tick)),o):r},o.start=function(){function n(n,r){for(var i,u=t(e),a=-1,o=u.length;++a\u003Co;)if(!isNaN(i=u[a][n]))return i;return Math.random()*r}function t(){if(!c){for(c=[],r=0;p>r;++r)c[r]=[];for(r=0;d>r;++r){var n=v[r];c[n.source.index].push(n.target),c[n.target.index].push(n.source)}}return c[e]}var e,r,c,s,p=m.length,d=v.length,y=l[0],M=l[1];for(e=0;p>e;++e)(s=m[e]).index=e,s.weight=0;for(e=0;d>e;++e)s=v[e],\\\"number\\\"==typeof s.source&&(s.source=m[s.source]),\\\"number\\\"==typeof s.target&&(s.target=m[s.target]),++s.source.weight,++s.target.weight;for(e=0;p>e;++e)s=m[e],isNaN(s.x)&&(s.x=n(\\\"x\\\",y)),isNaN(s.y)&&(s.y=n(\\\"y\\\",M)),isNaN(s.px)&&(s.px=s.x),isNaN(s.py)&&(s.py=s.y);if(i=[],\\\"function\\\"==typeof f)for(e=0;d>e;++e)i[e]=+f.call(this,v[e],e);else for(e=0;d>e;++e)i[e]=f;if(u=[],\\\"function\\\"==typeof h)for(e=0;d>e;++e)u[e]=+h.call(this,v[e],e);else for(e=0;d>e;++e)u[e]=h;if(a=[],\\\"function\\\"==typeof g)for(e=0;p>e;++e)a[e]=+g.call(this,m[e],e);else for(e=0;p>e;++e)a[e]=g;return o.resume()},o.resume=function(){return o.alpha(.1)},o.stop=function(){return o.alpha(0)},o.drag=function(){return e||(e=da.behavior.drag().origin(gt).on(\\\"dragstart.force\\\",Jr).on(\\\"drag.force\\\",t).on(\\\"dragend.force\\\",Gr)),arguments.length?(this.on(\\\"mouseover.force\\\",Kr).on(\\\"mouseout.force\\\",Qr).call(e),void 0):e},da.rebind(o,c,\\\"on\\\")};var vc=20,yc=1;da.layout.hierarchy=function(){function n(t,a,o){var c=i.call(e,t,a);if(t.depth=a,o.push(t),c&&(l=c.length)){for(var l,s,f=-1,h=t.children=[],g=0,p=a+1;++f\u003Cl;)s=n(c[f],p,o),s.parent=t,h.push(s),g+=s.value;r&&h.sort(r),u&&(t.value=g)}else u&&(t.value=+u.call(e,t,a)||0);return t}function t(n,r){var i=n.children,a=0;if(i&&(o=i.length))for(var o,c=-1,l=r+1;++c\u003Co;)a+=t(i[c],l);else u&&(a=+u.call(e,n,r)||0);return u&&(n.value=a),a}function e(t){var e=[];return n(t,0,e),e}var r=ii,i=ei,u=ri;return e.sort=function(n){return arguments.length?(r=n,e):r},e.children=function(n){return arguments.length?(i=n,e):i},e.value=function(n){return arguments.length?(u=n,e):u},e.revalue=function(n){return t(n,0),n},e},da.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(a=u.length)){var a,o,c,l=-1;for(r=t.value?r/t.value:0;++l\u003Ca;)n(o=u[l],e,c=o.value*r,i),e+=c}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u\u003Ci;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var a=r.call(this,e,u);return n(a[0],0,i[0],i[1]/t(a[0])),a}var r=da.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ti(e,r)},da.layout.pie=function(){function n(u){var a=u.map(function(e,r){return+t.call(n,e,r)}),o=+(\\\"function\\\"==typeof r?r.apply(this,arguments):r),c=((\\\"function\\\"==typeof i?i.apply(this,arguments):i)-o)/da.sum(a),l=da.range(u.length);null!=e&&l.sort(e===Mc?function(n,t){return a[t]-a[n]}:function(n,t){return e(u[n],u[t])});var s=[];return l.forEach(function(n){var t;s[n]={data:u[n],value:t=a[n],startAngle:o,endAngle:o+=t*c}}),s}var t=Number,e=Mc,r=0,i=2*Wa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n};var Mc={};da.layout.stack=function(){function n(o,c){var l=o.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),a.call(n,t,e)]})}),f=e.call(n,s,c);l=da.permute(l,f),s=da.permute(s,f);var h,g,p,d=r.call(n,s,c),m=l.length,v=l[0].length;for(g=0;v>g;++g)for(i.call(n,l[0][g],p=d[g],s[0][g][1]),h=1;m>h;++h)i.call(n,l[h][g],p+=s[h-1][g][1],s[h][g][1]);return o}var t=gt,e=li,r=si,i=ci,u=ai,a=oi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e=\\\"function\\\"==typeof t?t:xc.get(t)||li,n):e},n.offset=function(t){return arguments.length?(r=\\\"function\\\"==typeof t?t:bc.get(t)||si,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(a=t,n):a},n.out=function(t){return arguments.length?(i=t,n):i},n};var xc=da.map({\\\"inside-out\\\":function(n){var t,e,r=n.length,i=n.map(fi),u=n.map(hi),a=da.range(r).sort(function(n,t){return i[n]-i[t]}),o=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=a[t],c>o?(o+=u[e],l.push(e)):(c+=u[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return da.range(n.length).reverse()},\\\"default\\\":li}),bc=da.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,a=[],o=0,c=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>o&&(o=r),a.push(r)}for(e=0;u>e;++e)c[e]=(o-a[e])/2;return c},wiggle:function(n){var t,e,r,i,u,a,o,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,i=0;s>t;++t)i+=n[t][e][1];for(t=0,u=0,o=f[e][0]-f[e-1][0];s>t;++t){for(r=0,a=(n[t][e][1]-n[t][e-1][1])/(2*o);t>r;++r)a+=(n[r][e][1]-n[r][e-1][1])/o;u+=a*n[t][e][1]}g[e]=c-=i?u/i*o:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,i=n.length,u=n[0].length,a=1/i,o=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=a}for(e=0;u>e;++e)o[e]=0;return o},zero:si});da.layout.histogram=function(){function n(n,u){for(var a,o,c=[],l=n.map(e,this),s=r.call(this,l,u),f=i.call(this,s,l,u),u=-1,h=l.length,g=f.length-1,p=t?1:1/h;++u\u003Cg;)a=c[u]=[],a.dx=f[u+1]-(a.x=f[u]),a.y=0;if(g>0)for(u=-1;++u\u003Ch;)o=l[u],o>=s[0]&&o\u003C=s[1]&&(a=c[da.bisect(f,o,1,g)-1],a.y+=p,a.push(n[u]));return c}var t=!0,e=Number,r=mi,i=pi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=ht(t),n):r},n.bins=function(t){return arguments.length?(i=\\\"number\\\"==typeof t?function(n){return di(n,t)}:ht(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},da.layout.tree=function(){function n(n,u){function a(n,t){var r=n.children,i=n._tree;if(r&&(u=r.length)){for(var u,o,l,s=r[0],f=s,h=-1;++h\u003Cu;)l=r[h],a(l,o),f=c(l,o,f),o=l;Ei(n);var g=.5*(s._tree.prelim+l._tree.prelim);t?(i.prelim=t._tree.prelim+e(n,t),i.mod=i.prelim-g):i.prelim=g}else t&&(i.prelim=t._tree.prelim+e(n,t))}function o(n,t){n.x=n._tree.prelim+t;var e=n.children;if(e&&(r=e.length)){var r,i=-1;for(t+=n._tree.mod;++i\u003Cr;)o(e[i],t)}}function c(n,t,r){if(t){for(var i,u=n,a=n,o=t,c=n.parent.children[0],l=u._tree.mod,s=a._tree.mod,f=o._tree.mod,h=c._tree.mod;o=Mi(o),u=yi(u),o&&u;)c=yi(c),a=Mi(a),a._tree.ancestor=n,i=o._tree.prelim+f-u._tree.prelim-l+e(o,u),i>0&&(ki(Ai(o,n,r),n,i),l+=i,s+=i),f+=o._tree.mod,l+=u._tree.mod,h+=c._tree.mod,s+=a._tree.mod;o&&!Mi(a)&&(a._tree.thread=o,a._tree.mod+=f-s),u&&!yi(c)&&(c._tree.thread=u,c._tree.mod+=l-h,r=n)}return r}var l=t.call(this,n,u),s=l[0];Si(s,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),a(s),o(s,-s._tree.prelim);var f=xi(s,_i),h=xi(s,bi),g=xi(s,wi),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2,m=g.depth||1;return Si(s,i?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(d-p)*r[0],n.y=n.depth/m*r[1],delete n._tree}),l}var t=da.layout.hierarchy().sort(null).value(null),e=vi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ti(n,t)},da.layout.pack=function(){function n(n,u){var a=e.call(this,n,u),o=a[0],c=i[0],l=i[1],s=null==t?Math.sqrt:\\\"function\\\"==typeof t?t:function(){return t};if(o.x=o.y=0,Si(o,function(n){n.r=+s(n.value)}),Si(o,zi),r){var f=r*(t?1:Math.max(2*o.r/c,2*o.r/l))/2;Si(o,function(n){n.r+=f}),Si(o,zi),Si(o,function(n){n.r-=f})}return Li(o,c/2,l/2,t?1:1/Math.max(2*o.r/c,2*o.r/l)),a}var t,e=da.layout.hierarchy().sort(Ni),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||\\\"function\\\"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ti(n,e)},da.layout.cluster=function(){function n(n,u){var a,o=t.call(this,n,u),c=o[0],l=0;Si(c,function(n){var t=n.children;t&&t.length?(n.x=Pi(t),n.y=Fi(t)):(n.x=a?l+=e(n,a):0,n.y=0,a=n)});var s=Oi(c),f=Yi(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Si(c,i?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),o}var t=da.layout.hierarchy().sort(null).value(null),e=vi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ti(n,t)},da.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i\u003Cu;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var a,o,c,l=f(e),s=[],h=u.slice(),p=1/0,d=\\\"slice\\\"===g?l.dx:\\\"dice\\\"===g?l.dy:\\\"slice-dice\\\"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(a=h[c-1]),s.area+=a.area,\\\"squarify\\\"!==g||(o=r(s,d))\u003C=p?(h.pop(),p=o):(s.area-=s.pop().area,i(s,d,l,!1),d=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(i(s,d,l,!0),s.length=s.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,a=f(t),o=r.slice(),c=[];for(n(o,a.dx*a.dy/t.value),c.area=0;u=o.pop();)c.push(u),c.area+=u.area,null!=u.z&&(i(c,u.z?a.dx:a.dy,a,!o.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,a=-1,o=n.length;++a\u003Co;)(e=n[a].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*p/r,r/(t*u*p)):1/0}function i(n,t,e,r){var i,u=-1,a=n.length,o=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++u\u003Ca;)i=n[u],i.x=o,i.y=l,i.dy=s,o+=i.dx=Math.min(e.x+e.dx-o,s?c(i.area/s):0);i.z=!0,i.dx+=e.x+e.dx-o,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++u\u003Ca;)i=n[u],i.x=o,i.y=l,i.dx=s,l+=i.dy=Math.min(e.y+e.dy-l,s?c(i.area/s):0);i.z=!1,i.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function u(r){var i=a||o(r),u=i[0];return u.x=0,u.y=0,u.dx=l[0],u.dy=l[1],a&&o.revalue(u),n([u],u.dx*u.dy/u.value),(a?e:t)(u),h&&(a=i),i}var a,o=da.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Ri,h=!1,g=\\\"squarify\\\",p=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(l=n,u):l},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Ri(t):Ui(t,\\\"number\\\"==typeof e?[e,e,e,e]:e)}function e(t){return Ui(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Ri:\\\"function\\\"==(r=typeof n)?t:\\\"number\\\"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(c=n?Math.round:Number,u):c!=Number},u.sticky=function(n){return arguments.length?(h=n,a=null,u):h},u.ratio=function(n){return arguments.length?(p=n,u):p},u.mode=function(n){return arguments.length?(g=n+\\\"\\\",u):g},ti(u,o)},da.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=da.random.normal.apply(da,arguments);return function(){return Math.exp(n())}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t/n}}},da.scale={};var _c={floor:gt,ceil:gt};da.scale.linear=function(){return Wi([0,1],[0,1],br,!1)},da.scale.log=function(){return eu(da.scale.linear().domain([0,1]),10,!0,[1,10])};var wc=da.format(\\\".0e\\\"),Sc={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};da.scale.pow=function(){return ru(da.scale.linear(),1,[0,1])},da.scale.sqrt=function(){return da.scale.pow().exponent(.5)},da.scale.ordinal=function(){return uu([],{t:\\\"range\\\",a:[[]]})},da.scale.category10=function(){return da.scale.ordinal().range(Ec)},da.scale.category20=function(){return da.scale.ordinal().range(kc)},da.scale.category20b=function(){return da.scale.ordinal().range(Ac)},da.scale.category20c=function(){return da.scale.ordinal().range(Nc)};var Ec=[\\\"#1f77b4\\\",\\\"#ff7f0e\\\",\\\"#2ca02c\\\",\\\"#d62728\\\",\\\"#9467bd\\\",\\\"#8c564b\\\",\\\"#e377c2\\\",\\\"#7f7f7f\\\",\\\"#bcbd22\\\",\\\"#17becf\\\"],kc=[\\\"#1f77b4\\\",\\\"#aec7e8\\\",\\\"#ff7f0e\\\",\\\"#ffbb78\\\",\\\"#2ca02c\\\",\\\"#98df8a\\\",\\\"#d62728\\\",\\\"#ff9896\\\",\\\"#9467bd\\\",\\\"#c5b0d5\\\",\\\"#8c564b\\\",\\\"#c49c94\\\",\\\"#e377c2\\\",\\\"#f7b6d2\\\",\\\"#7f7f7f\\\",\\\"#c7c7c7\\\",\\\"#bcbd22\\\",\\\"#dbdb8d\\\",\\\"#17becf\\\",\\\"#9edae5\\\"],Ac=[\\\"#393b79\\\",\\\"#5254a3\\\",\\\"#6b6ecf\\\",\\\"#9c9ede\\\",\\\"#637939\\\",\\\"#8ca252\\\",\\\"#b5cf6b\\\",\\\"#cedb9c\\\",\\\"#8c6d31\\\",\\\"#bd9e39\\\",\\\"#e7ba52\\\",\\\"#e7cb94\\\",\\\"#843c39\\\",\\\"#ad494a\\\",\\\"#d6616b\\\",\\\"#e7969c\\\",\\\"#7b4173\\\",\\\"#a55194\\\",\\\"#ce6dbd\\\",\\\"#de9ed6\\\"],Nc=[\\\"#3182bd\\\",\\\"#6baed6\\\",\\\"#9ecae1\\\",\\\"#c6dbef\\\",\\\"#e6550d\\\",\\\"#fd8d3c\\\",\\\"#fdae6b\\\",\\\"#fdd0a2\\\",\\\"#31a354\\\",\\\"#74c476\\\",\\\"#a1d99b\\\",\\\"#c7e9c0\\\",\\\"#756bb1\\\",\\\"#9e9ac8\\\",\\\"#bcbddc\\\",\\\"#dadaeb\\\",\\\"#636363\\\",\\\"#969696\\\",\\\"#bdbdbd\\\",\\\"#d9d9d9\\\"];da.scale.quantile=function(){return au([],[])},da.scale.quantize=function(){return ou(0,1,[0,1])},da.scale.threshold=function(){return cu([.5],[0,1])},da.scale.identity=function(){return lu([0,1])},da.svg.arc=function(){function n(){var n=t.apply(this,arguments),u=e.apply(this,arguments),a=r.apply(this,arguments)+qc,o=i.apply(this,arguments)+qc,c=(a>o&&(c=a,a=o,o=c),o-a),l=Wa>c?\\\"0\\\":\\\"1\\\",s=Math.cos(a),f=Math.sin(a),h=Math.cos(o),g=Math.sin(o);return c>=Tc?n?\\\"M0,\\\"+u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+-u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+u+\\\"M0,\\\"+n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 1,0 0,\\\"+-n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 1,0 0,\\\"+n+\\\"Z\\\":\\\"M0,\\\"+u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+-u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+u+\\\"Z\\\":n?\\\"M\\\"+u*s+\\\",\\\"+u*f+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 \\\"+l+\\\",1 \\\"+u*h+\\\",\\\"+u*g+\\\"L\\\"+n*h+\\\",\\\"+n*g+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 \\\"+l+\\\",0 \\\"+n*s+\\\",\\\"+n*f+\\\"Z\\\":\\\"M\\\"+u*s+\\\",\\\"+u*f+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 \\\"+l+\\\",1 \\\"+u*h+\\\",\\\"+u*g+\\\"L0,0\\\"+\\\"Z\\\"}var t=su,e=fu,r=hu,i=gu;return n.innerRadius=function(e){return arguments.length?(t=ht(e),n):t},n.outerRadius=function(t){return arguments.length?(e=ht(t),n):e},n.startAngle=function(t){return arguments.length?(r=ht(t),n):r},n.endAngle=function(t){return arguments.length?(i=ht(t),n):i},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,u=(r.apply(this,arguments)+i.apply(this,arguments))/2+qc;return[Math.cos(u)*n,Math.sin(u)*n]},n};var qc=-Wa/2,Tc=2*Wa-1e-6;da.svg.line.radial=function(){var n=Oe(pu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},Xe.reverse=Ze,Ze.reverse=Xe,da.svg.area=function(){return du(gt)},da.svg.area.radial=function(){var n=du(pu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},da.svg.chord=function(){function n(n,o){var c=t(this,u,n,o),l=t(this,a,n,o);return\\\"M\\\"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?i(c.r,c.p1,c.r,c.p0):i(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+i(l.r,l.p1,c.r,c.p0))+\\\"Z\\\"}function t(n,t,e,r){var i=t.call(n,e,r),u=o.call(n,i,r),a=c.call(n,i,r)+qc,s=l.call(n,i,r)+qc;return{r:u,a0:a,a1:s,p0:[u*Math.cos(a),u*Math.sin(a)],p1:[u*Math.cos(s),u*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 \\\"+ +(e>Wa)+\\\",1 \\\"+t}function i(n,t,e,r){return\\\"Q 0,0 \\\"+r}var u=qe,a=Te,o=mu,c=hu,l=gu;return n.radius=function(t){return arguments.length?(o=ht(t),n):o},n.source=function(t){return arguments.length?(u=ht(t),n):u},n.target=function(t){return arguments.length?(a=ht(t),n):a},n.startAngle=function(t){return arguments.length?(c=ht(t),n):c},n.endAngle=function(t){return arguments.length?(l=ht(t),n):l},n},da.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),a=e.call(this,n,i),o=(u.y+a.y)/2,c=[u,{x:u.x,y:o},{x:a.x,y:o},a];return c=c.map(r),\\\"M\\\"+c[0]+\\\"C\\\"+c[1]+\\\" \\\"+c[2]+\\\" \\\"+c[3]}var t=qe,e=Te,r=vu;return n.source=function(e){return arguments.length?(t=ht(e),n):t},n.target=function(t){return arguments.length?(e=ht(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},da.svg.diagonal.radial=function(){var n=da.svg.diagonal(),t=vu,e=n.projection;return n.projection=function(n){return arguments.length?e(yu(t=n)):t},n},da.svg.symbol=function(){function n(n,r){return(Cc.get(t.call(this,n,r))||bu)(e.call(this,n,r))}var t=xu,e=Mu;return n.type=function(e){return arguments.length?(t=ht(e),n):t},n.size=function(t){return arguments.length?(e=ht(t),n):e},n};var Cc=da.map({circle:bu,cross:function(n){var t=Math.sqrt(n/5)/2;return\\\"M\\\"+-3*t+\\\",\\\"+-t+\\\"H\\\"+-t+\\\"V\\\"+-3*t+\\\"H\\\"+t+\\\"V\\\"+-t+\\\"H\\\"+3*t+\\\"V\\\"+t+\\\"H\\\"+t+\\\"V\\\"+3*t+\\\"H\\\"+-t+\\\"V\\\"+t+\\\"H\\\"+-3*t+\\\"Z\\\"},diamond:function(n){var t=Math.sqrt(n/(2*Lc)),e=t*Lc;return\\\"M0,\\\"+-t+\\\"L\\\"+e+\\\",0\\\"+\\\" 0,\\\"+t+\\\" \\\"+-e+\\\",0\\\"+\\\"Z\\\"},square:function(n){var t=Math.sqrt(n)/2;return\\\"M\\\"+-t+\\\",\\\"+-t+\\\"L\\\"+t+\\\",\\\"+-t+\\\" \\\"+t+\\\",\\\"+t+\\\" \\\"+-t+\\\",\\\"+t+\\\"Z\\\"},\\\"triangle-down\\\":function(n){var t=Math.sqrt(n/jc),e=t*jc/2;return\\\"M0,\\\"+e+\\\"L\\\"+t+\\\",\\\"+-e+\\\" \\\"+-t+\\\",\\\"+-e+\\\"Z\\\"},\\\"triangle-up\\\":function(n){var t=Math.sqrt(n/jc),e=t*jc/2;return\\\"M0,\\\"+-e+\\\"L\\\"+t+\\\",\\\"+e+\\\" \\\"+-t+\\\",\\\"+e+\\\"Z\\\"}});da.svg.symbolTypes=Cc.keys();var zc,Dc,jc=Math.sqrt(3),Lc=Math.tan(30*Ka),Hc=[],Fc=0;Hc.call=Fa.call,Hc.empty=Fa.empty,Hc.node=Fa.node,Hc.size=Fa.size,da.transition=function(n){return arguments.length?zc?n.transition():n:Ya.transition()},da.transition.prototype=Hc,Hc.select=function(n){var t,e,r,i=this.id,u=[];n=v(n);for(var a=-1,o=this.length;++a\u003Co;){u.push(t=[]);for(var c=this[a],l=-1,s=c.length;++l\u003Cs;)(r=c[l])&&(e=n.call(r,r.__data__,l,a))?(\\\"__data__\\\"in r&&(e.__data__=r.__data__),Eu(e,l,i,r.__transition__[i]),t.push(e)):t.push(null)}return _u(u,i)},Hc.selectAll=function(n){var t,e,r,i,u,a=this.id,o=[];n=y(n);for(var c=-1,l=this.length;++c\u003Cl;)for(var s=this[c],f=-1,h=s.length;++f\u003Ch;)if(r=s[f]){u=r.__transition__[a],e=n.call(r,r.__data__,f,c),o.push(t=[]);for(var g=-1,p=e.length;++g\u003Cp;)(i=e[g])&&Eu(i,g,a,u),t.push(i)}return _u(o,a)},Hc.filter=function(n){var t,e,r,i=[];\\\"function\\\"!=typeof n&&(n=N(n));for(var u=0,a=this.length;a>u;u++){i.push(t=[]);for(var e=this[u],o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return _u(i,this.id,this.time).ease(this.ease())},Hc.tween=function(n,t){var e=this.id;return arguments.length\u003C2?this.node().__transition__[e].tween.get(n):T(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Hc.attr=function(n,t){function e(){this.removeAttribute(o)}function r(){this.removeAttributeNS(o.space,o.local)}function i(n){return null==n?e:(n+=\\\"\\\",function(){var t,e=this.getAttribute(o);return e!==n&&(t=a(e,n),function(n){this.setAttribute(o,t(n))})})}function u(n){return null==n?r:(n+=\\\"\\\",function(){var t,e=this.getAttributeNS(o.space,o.local);return e!==n&&(t=a(e,n),function(n){this.setAttributeNS(o.space,o.local,t(n))})})}if(arguments.length\u003C2){for(t in n)this.attr(t,n[t]);return this}var a=\\\"transform\\\"==n?Vr:br,o=da.ns.qualify(n);return wu(this,\\\"attr.\\\"+n,t,o.local?u:i)},Hc.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=da.ns.qualify(n);return this.tween(\\\"attr.\\\"+n,i.local?r:e)},Hc.style=function(n,t,e){function r(){this.style.removeProperty(n)}function i(t){return null==t?r:(t+=\\\"\\\",function(){var r,i=ya.getComputedStyle(this,null).getPropertyValue(n);return i!==t&&(r=br(i,t),function(t){this.style.setProperty(n,r(t),e)})})}var u=arguments.length;if(3>u){if(\\\"string\\\"!=typeof n){2>u&&(t=\\\"\\\");for(e in n)this.style(e,n[e],t);return this}e=\\\"\\\"}return wu(this,\\\"style.\\\"+n,t,i)},Hc.styleTween=function(n,t,e){function r(r,i){var u=t.call(this,r,i,ya.getComputedStyle(this,null).getPropertyValue(n));return u&&function(t){this.style.setProperty(n,u(t),e)}}return arguments.length\u003C3&&(e=\\\"\\\"),this.tween(\\\"style.\\\"+n,r)},Hc.text=function(n){return wu(this,\\\"text\\\",n,Su)},Hc.remove=function(){return this.each(\\\"end.transition\\\",function(){var n;!this.__transition__&&(n=this.parentNode)&&n.removeChild(this)})},Hc.ease=function(n){var t=this.id;return arguments.length\u003C1?this.node().__transition__[t].ease:(\\\"function\\\"!=typeof n&&(n=da.ease.apply(da,arguments)),T(this,function(e){e.__transition__[t].ease=n}))},Hc.delay=function(n){var t=this.id;return T(this,\\\"function\\\"==typeof n?function(e,r,i){e.__transition__[t].delay=0|n.call(e,e.__data__,r,i)}:(n|=0,function(e){e.__transition__[t].delay=n}))},Hc.duration=function(n){var t=this.id;return T(this,\\\"function\\\"==typeof n?function(e,r,i){e.__transition__[t].duration=Math.max(1,0|n.call(e,e.__data__,r,i))}:(n=Math.max(1,0|n),function(e){e.__transition__[t].duration=n}))},Hc.each=function(n,t){var e=this.id;if(arguments.length\u003C2){var r=Dc,i=zc;zc=e,T(this,function(t,r,i){Dc=t.__transition__[e],n.call(t,t.__data__,r,i)}),Dc=r,zc=i}else T(this,function(r){var i=r.__transition__[e];(i.event||(i.event=da.dispatch(\\\"start\\\",\\\"end\\\"))).on(n,t)});return this},Hc.transition=function(){for(var n,t,e,r,i=this.id,u=++Fc,a=[],o=0,c=this.length;c>o;o++){a.push(n=[]);for(var t=this[o],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[i]),r.delay+=r.duration,Eu(e,l,u,r)),n.push(e)}return _u(a,u)},da.svg.axis=function(){function n(n){n.each(function(){var n,f=da.select(this),h=null==l?e.ticks?e.ticks.apply(e,c):e.domain():l,g=null==t?e.tickFormat?e.tickFormat.apply(e,c):String:t,p=Nu(e,h,s),d=f.selectAll(\\\".tick.minor\\\").data(p,String),m=d.enter().insert(\\\"line\\\",\\\".tick\\\").attr(\\\"class\\\",\\\"tick minor\\\").style(\\\"opacity\\\",1e-6),v=da.transition(d.exit()).style(\\\"opacity\\\",1e-6).remove(),y=da.transition(d).style(\\\"opacity\\\",1),M=f.selectAll(\\\".tick.major\\\").data(h,String),x=M.enter().insert(\\\"g\\\",\\\".domain\\\").attr(\\\"class\\\",\\\"tick major\\\").style(\\\"opacity\\\",1e-6),b=da.transition(M.exit()).style(\\\"opacity\\\",1e-6).remove(),_=da.transition(M).style(\\\"opacity\\\",1),w=Vi(e),S=f.selectAll(\\\".domain\\\").data([0]),E=(S.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"domain\\\"),da.transition(S)),k=e.copy(),A=this.__chart__||k;\\nthis.__chart__=k,x.append(\\\"line\\\"),x.append(\\\"text\\\");var N=x.select(\\\"line\\\"),q=_.select(\\\"line\\\"),T=M.select(\\\"text\\\").text(g),C=x.select(\\\"text\\\"),z=_.select(\\\"text\\\");switch(r){case\\\"bottom\\\":n=ku,m.attr(\\\"y2\\\",u),y.attr(\\\"x2\\\",0).attr(\\\"y2\\\",u),N.attr(\\\"y2\\\",i),C.attr(\\\"y\\\",Math.max(i,0)+o),q.attr(\\\"x2\\\",0).attr(\\\"y2\\\",i),z.attr(\\\"x\\\",0).attr(\\\"y\\\",Math.max(i,0)+o),T.attr(\\\"dy\\\",\\\".71em\\\").style(\\\"text-anchor\\\",\\\"middle\\\"),E.attr(\\\"d\\\",\\\"M\\\"+w[0]+\\\",\\\"+a+\\\"V0H\\\"+w[1]+\\\"V\\\"+a);break;case\\\"top\\\":n=ku,m.attr(\\\"y2\\\",-u),y.attr(\\\"x2\\\",0).attr(\\\"y2\\\",-u),N.attr(\\\"y2\\\",-i),C.attr(\\\"y\\\",-(Math.max(i,0)+o)),q.attr(\\\"x2\\\",0).attr(\\\"y2\\\",-i),z.attr(\\\"x\\\",0).attr(\\\"y\\\",-(Math.max(i,0)+o)),T.attr(\\\"dy\\\",\\\"0em\\\").style(\\\"text-anchor\\\",\\\"middle\\\"),E.attr(\\\"d\\\",\\\"M\\\"+w[0]+\\\",\\\"+-a+\\\"V0H\\\"+w[1]+\\\"V\\\"+-a);break;case\\\"left\\\":n=Au,m.attr(\\\"x2\\\",-u),y.attr(\\\"x2\\\",-u).attr(\\\"y2\\\",0),N.attr(\\\"x2\\\",-i),C.attr(\\\"x\\\",-(Math.max(i,0)+o)),q.attr(\\\"x2\\\",-i).attr(\\\"y2\\\",0),z.attr(\\\"x\\\",-(Math.max(i,0)+o)).attr(\\\"y\\\",0),T.attr(\\\"dy\\\",\\\".32em\\\").style(\\\"text-anchor\\\",\\\"end\\\"),E.attr(\\\"d\\\",\\\"M\\\"+-a+\\\",\\\"+w[0]+\\\"H0V\\\"+w[1]+\\\"H\\\"+-a);break;case\\\"right\\\":n=Au,m.attr(\\\"x2\\\",u),y.attr(\\\"x2\\\",u).attr(\\\"y2\\\",0),N.attr(\\\"x2\\\",i),C.attr(\\\"x\\\",Math.max(i,0)+o),q.attr(\\\"x2\\\",i).attr(\\\"y2\\\",0),z.attr(\\\"x\\\",Math.max(i,0)+o).attr(\\\"y\\\",0),T.attr(\\\"dy\\\",\\\".32em\\\").style(\\\"text-anchor\\\",\\\"start\\\"),E.attr(\\\"d\\\",\\\"M\\\"+a+\\\",\\\"+w[0]+\\\"H0V\\\"+w[1]+\\\"H\\\"+a)}if(e.rangeBand){var D=k.rangeBand()/2,j=function(n){return k(n)+D};x.call(n,j),_.call(n,j)}else x.call(n,A),_.call(n,k),b.call(n,k),m.call(n,A),y.call(n,k),v.call(n,k)})}var t,e=da.scale.linear(),r=Pc,i=6,u=6,a=6,o=3,c=[10],l=null,s=0;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Oc?t+\\\"\\\":Pc,n):r},n.ticks=function(){return arguments.length?(c=arguments,n):c},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t,e){if(!arguments.length)return i;var r=arguments.length-1;return i=+t,u=r>1?+e:i,a=r>0?+arguments[r]:i,n},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(t){return arguments.length?(s=+t,n):s},n};var Pc=\\\"bottom\\\",Oc={top:1,right:1,bottom:1,left:1};da.svg.brush=function(){function n(u){u.each(function(){var u,a=da.select(this),s=a.selectAll(\\\".background\\\").data([0]),f=a.selectAll(\\\".extent\\\").data([0]),h=a.selectAll(\\\".resize\\\").data(l,String);a.style(\\\"pointer-events\\\",\\\"all\\\").on(\\\"mousedown.brush\\\",i).on(\\\"touchstart.brush\\\",i),s.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"background\\\").style(\\\"visibility\\\",\\\"hidden\\\").style(\\\"cursor\\\",\\\"crosshair\\\"),f.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"extent\\\").style(\\\"cursor\\\",\\\"move\\\"),h.enter().append(\\\"g\\\").attr(\\\"class\\\",function(n){return\\\"resize \\\"+n}).style(\\\"cursor\\\",function(n){return Yc[n]}).append(\\\"rect\\\").attr(\\\"x\\\",function(n){return/[ew]$/.test(n)?-3:null}).attr(\\\"y\\\",function(n){return/^[ns]/.test(n)?-3:null}).attr(\\\"width\\\",6).attr(\\\"height\\\",6).style(\\\"visibility\\\",\\\"hidden\\\"),h.style(\\\"display\\\",n.empty()?\\\"none\\\":null),h.exit().remove(),o&&(u=Vi(o),s.attr(\\\"x\\\",u[0]).attr(\\\"width\\\",u[1]-u[0]),e(a)),c&&(u=Vi(c),s.attr(\\\"y\\\",u[0]).attr(\\\"height\\\",u[1]-u[0]),r(a)),t(a)})}function t(n){n.selectAll(\\\".resize\\\").attr(\\\"transform\\\",function(n){return\\\"translate(\\\"+s[+/e$/.test(n)][0]+\\\",\\\"+s[+/^s/.test(n)][1]+\\\")\\\"})}function e(n){n.select(\\\".extent\\\").attr(\\\"x\\\",s[0][0]),n.selectAll(\\\".extent,.n>rect,.s>rect\\\").attr(\\\"width\\\",s[1][0]-s[0][0])}function r(n){n.select(\\\".extent\\\").attr(\\\"y\\\",s[0][1]),n.selectAll(\\\".extent,.e>rect,.w>rect\\\").attr(\\\"height\\\",s[1][1]-s[0][1])}function i(){function i(){var n=da.event.changedTouches;return n?da.touches(M,n)[0]:da.mouse(M)}function l(){32==da.event.keyCode&&(k||(v=null,N[0]-=s[1][0],N[1]-=s[1][1],k=2),g())}function h(){32==da.event.keyCode&&2==k&&(N[0]+=s[1][0],N[1]+=s[1][1],k=0,g())}function p(){var n=i(),u=!1;y&&(n[0]+=y[0],n[1]+=y[1]),k||(da.event.altKey?(v||(v=[(s[0][0]+s[1][0])/2,(s[0][1]+s[1][1])/2]),N[0]=s[+(n[0]\u003Cv[0])][0],N[1]=s[+(n[1]\u003Cv[1])][1]):v=null),S&&d(n,o,0)&&(e(_),u=!0),E&&d(n,c,1)&&(r(_),u=!0),u&&(t(_),b({type:\\\"brush\\\",mode:k?\\\"move\\\":\\\"resize\\\"}))}function d(n,t,e){var r,i,a=Vi(t),o=a[0],c=a[1],l=N[e],h=s[1][e]-s[0][e];return k&&(o-=l,c-=h+l),r=f[e]?Math.max(o,Math.min(c,n[e])):n[e],k?i=(r+=l)+h:(v&&(l=Math.max(o,Math.min(c,2*v[e]-r))),r>l?(i=r,r=l):i=l),s[0][e]!==r||s[1][e]!==i?(u=null,s[0][e]=r,s[1][e]=i,!0):void 0}function m(){p(),_.style(\\\"pointer-events\\\",\\\"all\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",n.empty()?\\\"none\\\":null),da.select(\\\"body\\\").style(\\\"cursor\\\",null),q.on(\\\"mousemove.brush\\\",null).on(\\\"mouseup.brush\\\",null).on(\\\"touchmove.brush\\\",null).on(\\\"touchend.brush\\\",null).on(\\\"keydown.brush\\\",null).on(\\\"keyup.brush\\\",null),A(),b({type:\\\"brushend\\\"})}var v,y,M=this,x=da.select(da.event.target),b=a.of(M,arguments),_=da.select(M),w=x.datum(),S=!/^(n|s)$/.test(w)&&o,E=!/^(e|w)$/.test(w)&&c,k=x.classed(\\\"extent\\\"),A=H(),N=i(),q=da.select(ya).on(\\\"keydown.brush\\\",l).on(\\\"keyup.brush\\\",h);if(da.event.changedTouches?q.on(\\\"touchmove.brush\\\",p).on(\\\"touchend.brush\\\",m):q.on(\\\"mousemove.brush\\\",p).on(\\\"mouseup.brush\\\",m),k)N[0]=s[0][0]-N[0],N[1]=s[0][1]-N[1];else if(w){var T=+/w$/.test(w),C=+/^n/.test(w);y=[s[1-T][0]-N[0],s[1-C][1]-N[1]],N[0]=s[T][0],N[1]=s[C][1]}else da.event.altKey&&(v=N.slice());_.style(\\\"pointer-events\\\",\\\"none\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",null),da.select(\\\"body\\\").style(\\\"cursor\\\",x.style(\\\"cursor\\\")),b({type:\\\"brushstart\\\"}),p()}var u,a=d(n,\\\"brushstart\\\",\\\"brush\\\",\\\"brushend\\\"),o=null,c=null,l=Rc[0],s=[[0,0],[0,0]],f=[!0,!0];return n.x=function(t){return arguments.length?(o=t,l=Rc[!o\u003C\u003C1|!c],n):o},n.y=function(t){return arguments.length?(c=t,l=Rc[!o\u003C\u003C1|!c],n):c},n.clamp=function(t){return arguments.length?(o&&c?f=[!!t[0],!!t[1]]:(o||c)&&(f[+!o]=!!t),n):o&&c?f:o||c?f[+!o]:null},n.extent=function(t){var e,r,i,a,l;return arguments.length?(u=[[0,0],[0,0]],o&&(e=t[0],r=t[1],c&&(e=e[0],r=r[0]),u[0][0]=e,u[1][0]=r,o.invert&&(e=o(e),r=o(r)),e>r&&(l=e,e=r,r=l),s[0][0]=0|e,s[1][0]=0|r),c&&(i=t[0],a=t[1],o&&(i=i[1],a=a[1]),u[0][1]=i,u[1][1]=a,c.invert&&(i=c(i),a=c(a)),i>a&&(l=i,i=a,a=l),s[0][1]=0|i,s[1][1]=0|a),n):(t=u||s,o&&(e=t[0][0],r=t[1][0],u||(e=s[0][0],r=s[1][0],o.invert&&(e=o.invert(e),r=o.invert(r)),e>r&&(l=e,e=r,r=l))),c&&(i=t[0][1],a=t[1][1],u||(i=s[0][1],a=s[1][1],c.invert&&(i=c.invert(i),a=c.invert(a)),i>a&&(l=i,i=a,a=l))),o&&c?[[e,i],[r,a]]:o?[e,r]:c&&[i,a])},n.clear=function(){return u=null,s[0][0]=s[0][1]=s[1][0]=s[1][1]=0,n},n.empty=function(){return o&&s[0][0]===s[1][0]||c&&s[0][1]===s[1][1]},da.rebind(n,a,\\\"on\\\")};var Yc={n:\\\"ns-resize\\\",e:\\\"ew-resize\\\",s:\\\"ns-resize\\\",w:\\\"ew-resize\\\",nw:\\\"nwse-resize\\\",ne:\\\"nesw-resize\\\",se:\\\"nwse-resize\\\",sw:\\\"nesw-resize\\\"},Rc=[[\\\"n\\\",\\\"e\\\",\\\"s\\\",\\\"w\\\",\\\"nw\\\",\\\"ne\\\",\\\"se\\\",\\\"sw\\\"],[\\\"e\\\",\\\"w\\\"],[\\\"n\\\",\\\"s\\\"],[]];da.time={};var Uc=Date,Ic=[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"];qu.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Vc.setUTCDate.apply(this._,arguments)},setDay:function(){Vc.setUTCDay.apply(this._,arguments)},setFullYear:function(){Vc.setUTCFullYear.apply(this._,arguments)},setHours:function(){Vc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Vc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Vc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Vc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Vc.setUTCSeconds.apply(this._,arguments)},setTime:function(){Vc.setTime.apply(this._,arguments)}};var Vc=Date.prototype,Xc=\\\"%a %b %e %X %Y\\\",Zc=\\\"%m/%d/%Y\\\",Bc=\\\"%H:%M:%S\\\",$c=[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],Wc=[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],Jc=[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],Gc=[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"];da.time.year=Tu(function(n){return n=da.time.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),da.time.years=da.time.year.range,da.time.years.utc=da.time.year.utc.range,da.time.day=Tu(function(n){var t=new Uc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),da.time.days=da.time.day.range,da.time.days.utc=da.time.day.utc.range,da.time.dayOfYear=function(n){var t=da.time.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},Ic.forEach(function(n,t){n=n.toLowerCase(),t=7-t;var e=da.time[n]=Tu(function(n){return(n=da.time.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=da.time.year(n).getDay();return Math.floor((da.time.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});da.time[n+\\\"s\\\"]=e.range,da.time[n+\\\"s\\\"].utc=e.utc.range,da.time[n+\\\"OfYear\\\"]=function(n){var e=da.time.year(n).getDay();return Math.floor((da.time.dayOfYear(n)+(e+t)%7)/7)}}),da.time.week=da.time.sunday,da.time.weeks=da.time.sunday.range,da.time.weeks.utc=da.time.sunday.utc.range,da.time.weekOfYear=da.time.sundayOfYear,da.time.format=function(n){function t(t){for(var r,i,u,a=[],o=-1,c=0;++o\u003Ce;)37===n.charCodeAt(o)&&(a.push(n.substring(c,o)),null!=(i=ol[r=n.charAt(++o)])&&(r=n.charAt(++o)),(u=cl[r])&&(r=u(t,null==i?\\\"e\\\"===r?\\\" \\\":\\\"0\\\":i)),a.push(r),c=o+1);return a.push(n.substring(c,o)),a.join(\\\"\\\")}var e=n.length;return t.parse=function(t){var e={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=zu(e,n,t,0);if(r!=t.length)return null;\\\"p\\\"in e&&(e.H=e.H%12+12*e.p);var i=new Uc;return\\\"j\\\"in e?i.setFullYear(e.y,0,e.j):\\\"w\\\"in e&&(\\\"W\\\"in e||\\\"U\\\"in e)?(i.setFullYear(e.y,0,1),i.setFullYear(e.y,0,\\\"W\\\"in e?(e.w+6)%7+7*e.W-(i.getDay()+5)%7:e.w+7*e.U-(i.getDay()+6)%7)):i.setFullYear(e.y,e.m,e.d),i.setHours(e.H,e.M,e.S,e.L),i},t.toString=function(){return n},t};var Kc=Du($c),Qc=ju($c),nl=Du(Wc),tl=ju(Wc),el=Du(Jc),rl=ju(Jc),il=Du(Gc),ul=ju(Gc),al=/^%/,ol={\\\"-\\\":\\\"\\\",_:\\\" \\\",0:\\\"0\\\"},cl={a:function(n){return Wc[n.getDay()]},A:function(n){return $c[n.getDay()]},b:function(n){return Gc[n.getMonth()]},B:function(n){return Jc[n.getMonth()]},c:da.time.format(Xc),d:function(n,t){return Lu(n.getDate(),t,2)},e:function(n,t){return Lu(n.getDate(),t,2)},H:function(n,t){return Lu(n.getHours(),t,2)},I:function(n,t){return Lu(n.getHours()%12||12,t,2)},j:function(n,t){return Lu(1+da.time.dayOfYear(n),t,3)},L:function(n,t){return Lu(n.getMilliseconds(),t,3)},m:function(n,t){return Lu(n.getMonth()+1,t,2)},M:function(n,t){return Lu(n.getMinutes(),t,2)},p:function(n){return n.getHours()>=12?\\\"PM\\\":\\\"AM\\\"},S:function(n,t){return Lu(n.getSeconds(),t,2)},U:function(n,t){return Lu(da.time.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Lu(da.time.mondayOfYear(n),t,2)},x:da.time.format(Zc),X:da.time.format(Bc),y:function(n,t){return Lu(n.getFullYear()%100,t,2)},Y:function(n,t){return Lu(n.getFullYear()%1e4,t,4)},Z:ra,\\\"%\\\":function(){return\\\"%\\\"}},ll={a:Hu,A:Fu,b:Ru,B:Uu,c:Iu,d:Ju,e:Ju,H:Ku,I:Ku,j:Gu,L:ta,m:Wu,M:Qu,p:ea,S:na,U:Ou,w:Pu,W:Yu,x:Vu,X:Xu,y:Bu,Y:Zu,\\\"%\\\":ia},sl=/^\\\\s*\\\\d+/,fl=da.map({am:0,pm:1});da.time.format.utc=function(n){function t(n){try{Uc=qu;var t=new Uc;return t._=n,e(t)}finally{Uc=Date}}var e=da.time.format(n);return t.parse=function(n){try{Uc=qu;var t=e.parse(n);return t&&t._}finally{Uc=Date}},t.toString=e.toString,t};var hl=da.time.format.utc(\\\"%Y-%m-%dT%H:%M:%S.%LZ\\\");da.time.format.iso=Date.prototype.toISOString&&+new Date(\\\"2000-01-01T00:00:00.000Z\\\")?ua:hl,ua.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},ua.toString=hl.toString,da.time.second=Tu(function(n){return new Uc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),da.time.seconds=da.time.second.range,da.time.seconds.utc=da.time.second.utc.range,da.time.minute=Tu(function(n){return new Uc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),da.time.minutes=da.time.minute.range,da.time.minutes.utc=da.time.minute.utc.range,da.time.hour=Tu(function(n){var t=n.getTimezoneOffset()/60;return new Uc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),da.time.hours=da.time.hour.range,da.time.hours.utc=da.time.hour.utc.range,da.time.month=Tu(function(n){return n=da.time.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),da.time.months=da.time.month.range,da.time.months.utc=da.time.month.utc.range;var gl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],pl=[[da.time.second,1],[da.time.second,5],[da.time.second,15],[da.time.second,30],[da.time.minute,1],[da.time.minute,5],[da.time.minute,15],[da.time.minute,30],[da.time.hour,1],[da.time.hour,3],[da.time.hour,6],[da.time.hour,12],[da.time.day,1],[da.time.day,2],[da.time.week,1],[da.time.month,1],[da.time.month,3],[da.time.year,1]],dl=[[da.time.format(\\\"%Y\\\"),Ut],[da.time.format(\\\"%B\\\"),function(n){return n.getMonth()}],[da.time.format(\\\"%b %d\\\"),function(n){return 1!=n.getDate()}],[da.time.format(\\\"%a %d\\\"),function(n){return n.getDay()&&1!=n.getDate()}],[da.time.format(\\\"%I %p\\\"),function(n){return n.getHours()}],[da.time.format(\\\"%I:%M\\\"),function(n){return n.getMinutes()}],[da.time.format(\\\":%S\\\"),function(n){return n.getSeconds()}],[da.time.format(\\\".%L\\\"),function(n){return n.getMilliseconds()}]],ml=da.scale.linear(),vl=ca(dl);pl.year=function(n,t){return ml.domain(n.map(sa)).ticks(t).map(la)},da.time.scale=function(){return aa(da.scale.linear(),pl,vl)};var yl=pl.map(function(n){return[n[0].utc,n[1]]}),Ml=[[da.time.format.utc(\\\"%Y\\\"),Ut],[da.time.format.utc(\\\"%B\\\"),function(n){return n.getUTCMonth()}],[da.time.format.utc(\\\"%b %d\\\"),function(n){return 1!=n.getUTCDate()}],[da.time.format.utc(\\\"%a %d\\\"),function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],[da.time.format.utc(\\\"%I %p\\\"),function(n){return n.getUTCHours()}],[da.time.format.utc(\\\"%I:%M\\\"),function(n){return n.getUTCMinutes()}],[da.time.format.utc(\\\":%S\\\"),function(n){return n.getUTCSeconds()}],[da.time.format.utc(\\\".%L\\\"),function(n){return n.getUTCMilliseconds()}]],xl=ca(Ml);return yl.year=function(n,t){return ml.domain(n.map(ha)).ticks(t).map(fa)},da.time.scale.utc=function(){return aa(da.scale.linear(),yl,xl)},da.text=pt(function(n){return n.responseText}),da.json=function(n,t){return dt(n,\\\"application/json\\\",ga,t)},da.html=function(n,t){return dt(n,\\\"text/html\\\",pa,t)},da.xml=pt(function(n){return n.responseXML}),da}();}\\nexports.d3 = d3;\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/d3/d3.js\",\"module-type\":\"library\"},\"$:/plugins/tiddlywiki/d3/d3.layout.cloud.js\":{\"text\":\"// Word cloud layout by Jason Davies, http://www.jasondavies.com/word-cloud/\\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\\n(function(exports) {\\n  function cloud() {\\n    var size = [256, 256],\\n        text = cloudText,\\n        font = cloudFont,\\n        fontSize = cloudFontSize,\\n        fontStyle = cloudFontNormal,\\n        fontWeight = cloudFontNormal,\\n        rotate = cloudRotate,\\n        padding = cloudPadding,\\n        spiral = archimedeanSpiral,\\n        words = [],\\n        timeInterval = Infinity,\\n        event = d3.dispatch(\\\"word\\\", \\\"end\\\"),\\n        timer = null,\\n        cloud = {};\\n\\n    cloud.start = function() {\\n      var board = zeroArray((size[0] >> 5) * size[1]),\\n          bounds = null,\\n          n = words.length,\\n          i = -1,\\n          tags = [],\\n          data = words.map(function(d, i) {\\n            d.text = text.call(this, d, i);\\n            d.font = font.call(this, d, i);\\n            d.style = fontStyle.call(this, d, i);\\n            d.weight = fontWeight.call(this, d, i);\\n            d.rotate = rotate.call(this, d, i);\\n            d.size = ~~fontSize.call(this, d, i);\\n            d.padding = padding.call(this, d, i);\\n            return d;\\n          }).sort(function(a, b) { return b.size - a.size; });\\n\\n      if (timer) clearInterval(timer);\\n      timer = setInterval(step, 0);\\n      step();\\n\\n      return cloud;\\n\\n      function step() {\\n        var start = +new Date,\\n            d;\\n        while (+new Date - start \u003C timeInterval && ++i \u003C n && timer) {\\n          d = data[i];\\n          d.x = (size[0] * (Math.random() + .5)) >> 1;\\n          d.y = (size[1] * (Math.random() + .5)) >> 1;\\n          cloudSprite(d, data, i);\\n          if (d.hasText && place(board, d, bounds)) {\\n            tags.push(d);\\n            event.word(d);\\n            if (bounds) cloudBounds(bounds, d);\\n            else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];\\n            // Temporary hack\\n            d.x -= size[0] >> 1;\\n            d.y -= size[1] >> 1;\\n          }\\n        }\\n        if (i >= n) {\\n          cloud.stop();\\n          event.end(tags, bounds);\\n        }\\n      }\\n    }\\n\\n    cloud.stop = function() {\\n      if (timer) {\\n        clearInterval(timer);\\n        timer = null;\\n      }\\n      return cloud;\\n    };\\n\\n    cloud.timeInterval = function(x) {\\n      if (!arguments.length) return timeInterval;\\n      timeInterval = x == null ? Infinity : x;\\n      return cloud;\\n    };\\n\\n    function place(board, tag, bounds) {\\n      var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}],\\n          startX = tag.x,\\n          startY = tag.y,\\n          maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\\n          s = spiral(size),\\n          dt = Math.random() \u003C .5 ? 1 : -1,\\n          t = -dt,\\n          dxdy,\\n          dx,\\n          dy;\\n\\n      while (dxdy = s(t += dt)) {\\n        dx = ~~dxdy[0];\\n        dy = ~~dxdy[1];\\n\\n        if (Math.min(dx, dy) > maxDelta) break;\\n\\n        tag.x = startX + dx;\\n        tag.y = startY + dy;\\n\\n        if (tag.x + tag.x0 \u003C 0 || tag.y + tag.y0 \u003C 0 ||\\n            tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\\n        // TODO only check for collisions within current bounds.\\n        if (!bounds || !cloudCollide(tag, board, size[0])) {\\n          if (!bounds || collideRects(tag, bounds)) {\\n            var sprite = tag.sprite,\\n                w = tag.width >> 5,\\n                sw = size[0] >> 5,\\n                lx = tag.x - (w \u003C\u003C 4),\\n                sx = lx & 0x7f,\\n                msx = 32 - sx,\\n                h = tag.y1 - tag.y0,\\n                x = (tag.y + tag.y0) * sw + (lx >> 5),\\n                last;\\n            for (var j = 0; j \u003C h; j++) {\\n              last = 0;\\n              for (var i = 0; i \u003C= w; i++) {\\n                board[x + i] |= (last \u003C\u003C msx) | (i \u003C w ? (last = sprite[j * w + i]) >>> sx : 0);\\n              }\\n              x += sw;\\n            }\\n            delete tag.sprite;\\n            return true;\\n          }\\n        }\\n      }\\n      return false;\\n    }\\n\\n    cloud.words = function(x) {\\n      if (!arguments.length) return words;\\n      words = x;\\n      return cloud;\\n    };\\n\\n    cloud.size = function(x) {\\n      if (!arguments.length) return size;\\n      size = [+x[0], +x[1]];\\n      return cloud;\\n    };\\n\\n    cloud.font = function(x) {\\n      if (!arguments.length) return font;\\n      font = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    cloud.fontStyle = function(x) {\\n      if (!arguments.length) return fontStyle;\\n      fontStyle = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    cloud.fontWeight = function(x) {\\n      if (!arguments.length) return fontWeight;\\n      fontWeight = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    cloud.rotate = function(x) {\\n      if (!arguments.length) return rotate;\\n      rotate = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    cloud.text = function(x) {\\n      if (!arguments.length) return text;\\n      text = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    cloud.spiral = function(x) {\\n      if (!arguments.length) return spiral;\\n      spiral = spirals[x + \\\"\\\"] || x;\\n      return cloud;\\n    };\\n\\n    cloud.fontSize = function(x) {\\n      if (!arguments.length) return fontSize;\\n      fontSize = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    cloud.padding = function(x) {\\n      if (!arguments.length) return padding;\\n      padding = d3.functor(x);\\n      return cloud;\\n    };\\n\\n    return d3.rebind(cloud, event, \\\"on\\\");\\n  }\\n\\n  function cloudText(d) {\\n    return d.text;\\n  }\\n\\n  function cloudFont() {\\n    return \\\"serif\\\";\\n  }\\n\\n  function cloudFontNormal() {\\n    return \\\"normal\\\";\\n  }\\n\\n  function cloudFontSize(d) {\\n    return Math.sqrt(d.value);\\n  }\\n\\n  function cloudRotate() {\\n    return (~~(Math.random() * 6) - 3) * 30;\\n  }\\n\\n  function cloudPadding() {\\n    return 1;\\n  }\\n\\n  // Fetches a monochrome sprite bitmap for the specified text.\\n  // Load in batches for speed.\\n  function cloudSprite(d, data, di) {\\n    if (d.sprite) return;\\n    c.clearRect(0, 0, (cw \u003C\u003C 5) / ratio, ch / ratio);\\n    var x = 0,\\n        y = 0,\\n        maxh = 0,\\n        n = data.length;\\n    --di;\\n    while (++di \u003C n) {\\n      d = data[di];\\n      c.save();\\n      c.font = d.style + \\\" \\\" + d.weight + \\\" \\\" + ~~((d.size + 1) / ratio) + \\\"px \\\" + d.font;\\n      var w = c.measureText(d.text + \\\"m\\\").width * ratio,\\n          h = d.size \u003C\u003C 1;\\n      if (d.rotate) {\\n        var sr = Math.sin(d.rotate * cloudRadians),\\n            cr = Math.cos(d.rotate * cloudRadians),\\n            wcr = w * cr,\\n            wsr = w * sr,\\n            hcr = h * cr,\\n            hsr = h * sr;\\n        w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 \u003C\u003C 5;\\n        h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\\n      } else {\\n        w = (w + 0x1f) >> 5 \u003C\u003C 5;\\n      }\\n      if (h > maxh) maxh = h;\\n      if (x + w >= (cw \u003C\u003C 5)) {\\n        x = 0;\\n        y += maxh;\\n        maxh = 0;\\n      }\\n      if (y + h >= ch) break;\\n      c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\\n      if (d.rotate) c.rotate(d.rotate * cloudRadians);\\n      c.fillText(d.text, 0, 0);\\n      if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);\\n      c.restore();\\n      d.width = w;\\n      d.height = h;\\n      d.xoff = x;\\n      d.yoff = y;\\n      d.x1 = w >> 1;\\n      d.y1 = h >> 1;\\n      d.x0 = -d.x1;\\n      d.y0 = -d.y1;\\n      d.hasText = true;\\n      x += w;\\n    }\\n    var pixels = c.getImageData(0, 0, (cw \u003C\u003C 5) / ratio, ch / ratio).data,\\n        sprite = [];\\n    while (--di >= 0) {\\n      d = data[di];\\n      if (!d.hasText) continue;\\n      var w = d.width,\\n          w32 = w >> 5,\\n          h = d.y1 - d.y0;\\n      // Zero the buffer\\n      for (var i = 0; i \u003C h * w32; i++) sprite[i] = 0;\\n      x = d.xoff;\\n      if (x == null) return;\\n      y = d.yoff;\\n      var seen = 0,\\n          seenRow = -1;\\n      for (var j = 0; j \u003C h; j++) {\\n        for (var i = 0; i \u003C w; i++) {\\n          var k = w32 * j + (i >> 5),\\n              m = pixels[((y + j) * (cw \u003C\u003C 5) + (x + i)) \u003C\u003C 2] ? 1 \u003C\u003C (31 - (i % 32)) : 0;\\n          sprite[k] |= m;\\n          seen |= m;\\n        }\\n        if (seen) seenRow = j;\\n        else {\\n          d.y0++;\\n          h--;\\n          j--;\\n          y++;\\n        }\\n      }\\n      d.y1 = d.y0 + seenRow;\\n      d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\\n    }\\n  }\\n\\n  // Use mask-based collision detection.\\n  function cloudCollide(tag, board, sw) {\\n    sw >>= 5;\\n    var sprite = tag.sprite,\\n        w = tag.width >> 5,\\n        lx = tag.x - (w \u003C\u003C 4),\\n        sx = lx & 0x7f,\\n        msx = 32 - sx,\\n        h = tag.y1 - tag.y0,\\n        x = (tag.y + tag.y0) * sw + (lx >> 5),\\n        last;\\n    for (var j = 0; j \u003C h; j++) {\\n      last = 0;\\n      for (var i = 0; i \u003C= w; i++) {\\n        if (((last \u003C\u003C msx) | (i \u003C w ? (last = sprite[j * w + i]) >>> sx : 0))\\n            & board[x + i]) return true;\\n      }\\n      x += sw;\\n    }\\n    return false;\\n  }\\n\\n  function cloudBounds(bounds, d) {\\n    var b0 = bounds[0],\\n        b1 = bounds[1];\\n    if (d.x + d.x0 \u003C b0.x) b0.x = d.x + d.x0;\\n    if (d.y + d.y0 \u003C b0.y) b0.y = d.y + d.y0;\\n    if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\\n    if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\\n  }\\n\\n  function collideRects(a, b) {\\n    return a.x + a.x1 > b[0].x && a.x + a.x0 \u003C b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 \u003C b[1].y;\\n  }\\n\\n  function archimedeanSpiral(size) {\\n    var e = size[0] / size[1];\\n    return function(t) {\\n      return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\\n    };\\n  }\\n\\n  function rectangularSpiral(size) {\\n    var dy = 4,\\n        dx = dy * size[0] / size[1],\\n        x = 0,\\n        y = 0;\\n    return function(t) {\\n      var sign = t \u003C 0 ? -1 : 1;\\n      // See triangular numbers: T_n = n * (n + 1) / 2.\\n      switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\\n        case 0:  x += dx; break;\\n        case 1:  y += dy; break;\\n        case 2:  x -= dx; break;\\n        default: y -= dy; break;\\n      }\\n      return [x, y];\\n    };\\n  }\\n\\n  // TODO reuse arrays?\\n  function zeroArray(n) {\\n    var a = [],\\n        i = -1;\\n    while (++i \u003C n) a[i] = 0;\\n    return a;\\n  }\\n\\n  var cloudRadians = Math.PI / 180,\\n      cw = 1 \u003C\u003C 11 >> 5,\\n      ch = 1 \u003C\u003C 11,\\n      canvas,\\n      ratio = 1;\\n\\n  if (typeof document !== \\\"undefined\\\") {\\n    canvas = document.createElement(\\\"canvas\\\");\\n    canvas.width = 1;\\n    canvas.height = 1;\\n    ratio = Math.sqrt(canvas.getContext(\\\"2d\\\").getImageData(0, 0, 1, 1).data.length >> 2);\\n    canvas.width = (cw \u003C\u003C 5) / ratio;\\n    canvas.height = ch / ratio;\\n  } else {\\n    // node-canvas support\\n    var Canvas = require(\\\"canvas\\\");\\n    canvas = new Canvas(cw \u003C\u003C 5, ch);\\n  }\\n\\n  var c = canvas.getContext(\\\"2d\\\"),\\n      spirals = {\\n        archimedean: archimedeanSpiral,\\n        rectangular: rectangularSpiral\\n      };\\n  c.fillStyle = c.strokeStyle = \\\"red\\\";\\n  c.textAlign = \\\"center\\\";\\n\\n  exports.cloud = cloud;\\n})(typeof exports === \\\"undefined\\\" ? d3.layout || (d3.layout = {}) : exports);\\n\",\"type\":\"application/javascript\",\"title\":\"$:/plugins/tiddlywiki/d3/d3.layout.cloud.js\",\"module-type\":\"library\"},\"$:/plugins/tiddlywiki/d3/readme\":{\"title\":\"$:/plugins/tiddlywiki/d3/readme\",\"text\":\"The D3 plugin is a proof-of-concept demo of integration with the D3.js data visualisation framework (http://d3js.org).\\n\\nIt is not currently in a state where it can be used for anything useful.\\n\\n[[Source code|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/plugins/tiddlywiki/d3]]\\n\"}}}"}
{"title":"TW5Sandbox","text":"This is a demo of TiddlyWiki5 incorporating a plugin for the [[D3.js]] visualisation library.\n\n! Word Cloud\n\n\u003C$d3cloud data=\"CloudData\" spiral={{$:/spiral}}/>\n\n\n//[[Raw data|CloudData]]//\n\n! Bar Chart\n\n\u003C$d3bar grouped={{$:/grouped}} data=\"GraphData\"/>\n\u003C$button set=\"$:/grouped\" setTo=\"yes\">grouped\u003C/$button> \u003C$button set=\"$:/grouped\" setTo=\"no\">stacked\u003C/$button>\n\n//[[Raw data|GraphData]]//"}
[[Home]]
/***
|Name        |EncryptDecryptBookmarkletPlugin|
|Description |Plugin adapted from https://qiita.com/useiichi/items/0786199ee61443df3af5.|
|Source      |https://github.com/wangyenshu/EncryptDecryptBookmarkletPlugin/blob/main/EncryptDecryptBookmarkletPlugin.js|
|Version     |1.0|
|Author      |Yanshu Wang with the help of AI|
|License     |MIT|
|~CoreVersion|2.x|
|Type        |plugin|
!!!!!Documentation
Use the {{{<<EncryptDecryptBookmarklet>>}}} macro to display a button that launches the encryption/decryption tool.
The tool will open in a new pop-up window, allowing you to encrypt and decrypt text using a passphrase.
<<EncryptDecryptBookmarklet>>
!!!!!Code
***/
//{{{
config.macros.EncryptDecryptBookmarklet = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Create a button element
        var button = document.createElement("button");
        button.innerText = "Encrypt/Decrypt Tool"; // Text displayed on the button
        button.title = "Click to open the AES encryption/decryption tool"; // Tooltip

        // Add some basic styling classes for consistency with TiddlyWiki buttons
        // Assuming 'tiddlyLink' and 'button' classes exist and provide styling.
        button.className = "tiddlyLink button";

        button.onclick = function() {
            var w = window.open('','Links','scrollbars,resizable,width=640,height=550');
            if (!w) { // Check if pop-up was blocked
                alert("Pop-up blocked! Please allow pop-ups for this site to use the AES tool.");
                return;
            }

            // Construct the HTML content for the new window.
            // All double quotes within the HTML string must be escaped as \"
            var htmlContent = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/core.js\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/sha1.js\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/hmac.js\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/enc-base64.js\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/cipher-core.js\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/aes.js\"></script><script src=\"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/pbkdf2.js\"></script><script type=\"text/javascript\">function encrypt(){var encypt_text=document.getElementById(\"encypt-text\").value;var pass=CryptoJS.enc.Utf8.parse(document.getElementById(\"encrypt-password\").value);var salt=CryptoJS.lib.WordArray.random(128/8);var key=CryptoJS.PBKDF2(pass,salt,{keySize:256/32,iterations:100});var iv=CryptoJS.lib.WordArray.random(128/8);var options={iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7};var encrypted=CryptoJS.AES.encrypt(encypt_text,key,options);document.getElementById(\"transitmessage\").value=salt.toString()+iv.toString()+encrypted.toString();}function decrypt(){document.getElementById(\"decrypted\").value=\"\";var transitmessage=document.getElementById(\"transitmessage\").value;var salt=CryptoJS.enc.Hex.parse(transitmessage.substr(0,32));var iv=CryptoJS.enc.Hex.parse(transitmessage.substr(32,32));var encrypted=transitmessage.substring(64);var pass=CryptoJS.enc.Utf8.parse(document.getElementById(\"decrypt-password\").value);var key=CryptoJS.PBKDF2(pass,salt,{keySize:256/32,iterations:100});var options={iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7};var decrypted=CryptoJS.AES.decrypt(encrypted,key,options);document.getElementById(\"decrypted\").value=decrypted.toString(CryptoJS.enc.Utf8);}</script></head><body><label for=\"encypt-text\">Text to encrypt:</label><br /><textarea id=\"encypt-text\" rows=\"8\" cols=\"85\">Hello</textarea><br />&nbsp;↓&nbsp;<label for=\"encrypt-password\">Encryption Password:</label><br />&nbsp;↓&nbsp;<input id=\"encrypt-password\" type=\"text\" size=\"80\" value=\"password\" /><br />&nbsp;↓&nbsp;<input id=\"encrypt\" type=\"button\" value=\"Encrypt\" onclick=\"encrypt()\" /><br /><label for=\"transitmessage\">Ciphertext:</label><br /><textarea id=\"transitmessage\" rows=\"4\" cols=\"85\"></textarea><br />&nbsp;↓&nbsp;<label for=\"decrypt-password\">Decryption Password:</label><br />&nbsp;↓&nbsp;<input id=\"decrypt-password\" type=\"text\" size=\"80\" value=\"password\" /><br />&nbsp;↓&nbsp;<input id=\"decrypt\" type=\"button\" value=\"Decrypt\" onclick=\"decrypt()\" /><br /><label for=\"decrypted\">Decrypted Plaintext:</label><br /><textarea id=\"decrypted\" rows=\"8\" cols=\"85\"></textarea></body></html>";

            w.document.write(htmlContent);
            w.document.close(); // Important to close the document stream after writing content
            return false; // Prevent default link action (though not a link here, good practice)
        };

        // Append the button to the place where the macro is called
        place.appendChild(button);
    }
};
//}}}
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features:
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen)
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features:
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs:
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features:
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{


//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8,
	date: new Date(2007,3,12),
	source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null;
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true;
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action.
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i];
			i++;
		}
	}

	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place,
				inTiddler: tiddler,
				whereClause: whereClause,
				sortClause: sortClause,
				sortAscending: sortAscending,
				actionName: actionName,
				actionParameter: actionParameter,
				scriptText: scriptText,
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;

	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional.
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}

		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null)
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null)
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null)
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}

		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);

	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}

	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);


	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam,
		whereClause : whereClauseParam,
		sortClause : sortClauseParam,
		sortAscending : sortAscendingParam,
		script : scriptText,
		actionName : actionNameParam,
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;

	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}

	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}

	// The legacy code, for TW < 2.2

	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);

	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();

	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};



// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result =
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1
			   : +1;
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result =
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1
			   : -1;
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared
	// we pre-calculate the sortValue for every item in the array and store it in a
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false.
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
//
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null]
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink,
			displayMessage, endSaveArea, hasClass, loadFile, saveFile,
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/

{"title":"GraphData","type":"application/json","text":"{\n\t\"layers\": 4,\n\t\"samples\": 58,\n\t\"data\": [[{\"x\":0,\"y\":1.5465653425978438,\"y0\":0},{\"x\":1,\"y\":1.685317173883538,\"y0\":0},{\"x\":2,\"y\":1.8574362488718479,\"y0\":0},{\"x\":3,\"y\":1.8955971722736493,\"y0\":0},{\"x\":4,\"y\":1.9097577836599329,\"y0\":0},{\"x\":5,\"y\":1.8465434425997016,\"y0\":0},{\"x\":6,\"y\":1.633439930626274,\"y0\":0},{\"x\":7,\"y\":1.52631967808687,\"y0\":0},{\"x\":8,\"y\":1.254071127423236,\"y0\":0},{\"x\":9,\"y\":1.0827254551382322,\"y0\":0},{\"x\":10,\"y\":0.8638985445997883,\"y0\":0},{\"x\":11,\"y\":0.6413689486056139,\"y0\":0},{\"x\":12,\"y\":0.5413942661821705,\"y0\":0},{\"x\":13,\"y\":0.36278061239443893,\"y0\":0},{\"x\":14,\"y\":0.3256964071352306,\"y0\":0},{\"x\":15,\"y\":0.2137255237212198,\"y0\":0},{\"x\":16,\"y\":0.19963582829410498,\"y0\":0},{\"x\":17,\"y\":0.16830706117875752,\"y0\":0},{\"x\":18,\"y\":0.17206850583228236,\"y0\":0},{\"x\":19,\"y\":0.10830681834972318,\"y0\":0},{\"x\":20,\"y\":0.11873772657810025,\"y0\":0},{\"x\":21,\"y\":0.11084964578647072,\"y0\":0},{\"x\":22,\"y\":0.1484696893575204,\"y0\":0},{\"x\":23,\"y\":0.1867012666922508,\"y0\":0},{\"x\":24,\"y\":0.12949785228379762,\"y0\":0},{\"x\":25,\"y\":0.13160216135876143,\"y0\":0},{\"x\":26,\"y\":0.17191603579071696,\"y0\":0},{\"x\":27,\"y\":0.13015751294359376,\"y0\":0},{\"x\":28,\"y\":0.14401777421011913,\"y0\":0},{\"x\":29,\"y\":0.10201715281901944,\"y0\":0},{\"x\":30,\"y\":0.13096141940224687,\"y0\":0},{\"x\":31,\"y\":0.13007539913630495,\"y0\":0},{\"x\":32,\"y\":0.1548329677287279,\"y0\":0},{\"x\":33,\"y\":0.12825426147451768,\"y0\":0},{\"x\":34,\"y\":0.11173963750950311,\"y0\":0},{\"x\":35,\"y\":0.10009802752875707,\"y0\":0},{\"x\":36,\"y\":0.15986871614703402,\"y0\":0},{\"x\":37,\"y\":0.13176775383781347,\"y0\":0},{\"x\":38,\"y\":0.11931081113873895,\"y0\":0},{\"x\":39,\"y\":0.16285687568597873,\"y0\":0},{\"x\":40,\"y\":0.17962864991277508,\"y0\":0},{\"x\":41,\"y\":0.12206525453366346,\"y0\":0},{\"x\":42,\"y\":0.18058574651367965,\"y0\":0},{\"x\":43,\"y\":0.17203539919573813,\"y0\":0},{\"x\":44,\"y\":0.14411348106805236,\"y0\":0},{\"x\":45,\"y\":0.11210963563062251,\"y0\":0},{\"x\":46,\"y\":0.1381196621572599,\"y0\":0},{\"x\":47,\"y\":0.13853569640778007,\"y0\":0},{\"x\":48,\"y\":0.1413255832623691,\"y0\":0},{\"x\":49,\"y\":0.1174182482529442,\"y0\":0},{\"x\":50,\"y\":0.10530492262916305,\"y0\":0},{\"x\":51,\"y\":0.10311489694306446,\"y0\":0},{\"x\":52,\"y\":0.11639756702594588,\"y0\":0},{\"x\":53,\"y\":0.1319517292574534,\"y0\":0},{\"x\":54,\"y\":0.11580932540132466,\"y0\":0},{\"x\":55,\"y\":0.14951149305133773,\"y0\":0},{\"x\":56,\"y\":0.13733844893200403,\"y0\":0},{\"x\":57,\"y\":0.15683227159202287,\"y0\":0}],[{\"x\":0,\"y\":0.4205513236112361,\"y0\":1.5465653425978438},{\"x\":1,\"y\":0.5468517829897288,\"y0\":1.685317173883538},{\"x\":2,\"y\":0.968925897059711,\"y0\":1.8574362488718479},{\"x\":3,\"y\":1.4906540525791687,\"y0\":1.8955971722736493},{\"x\":4,\"y\":2.0955950901132407,\"y0\":1.9097577836599329},{\"x\":5,\"y\":2.4548437717415097,\"y0\":1.8465434425997016},{\"x\":6,\"y\":2.3871398992501094,\"y0\":1.633439930626274},{\"x\":7,\"y\":1.8956592631335767,\"y0\":1.52631967808687},{\"x\":8,\"y\":1.3310277640299937,\"y0\":1.254071127423236},{\"x\":9,\"y\":0.740004500538676,\"y0\":1.0827254551382322},{\"x\":10,\"y\":0.41341056933113224,\"y0\":0.8638985445997883},{\"x\":11,\"y\":0.25508869446689425,\"y0\":0.6413689486056139},{\"x\":12,\"y\":0.21465672884279616,\"y0\":0.5413942661821705},{\"x\":13,\"y\":0.2030322655655626,\"y0\":0.36278061239443893},{\"x\":14,\"y\":0.17778946560320333,\"y0\":0.3256964071352306},{\"x\":15,\"y\":0.13993989381581068,\"y0\":0.2137255237212198},{\"x\":16,\"y\":0.1509842264651427,\"y0\":0.19963582829410498},{\"x\":17,\"y\":0.14400590082193815,\"y0\":0.16830706117875752},{\"x\":18,\"y\":0.30062332723788887,\"y0\":0.17206850583228236},{\"x\":19,\"y\":0.47865475204719965,\"y0\":0.10830681834972318},{\"x\":20,\"y\":0.911871360864478,\"y0\":0.11873772657810025},{\"x\":21,\"y\":1.5099221362867215,\"y0\":0.11084964578647072},{\"x\":22,\"y\":1.9414749203225334,\"y0\":0.1484696893575204},{\"x\":23,\"y\":1.9571455162890212,\"y0\":0.1867012666922508},{\"x\":24,\"y\":1.4064503011974243,\"y0\":0.12949785228379762},{\"x\":25,\"y\":0.8310477425188015,\"y0\":0.13160216135876143},{\"x\":26,\"y\":0.4000029514079704,\"y0\":0.17191603579071696},{\"x\":27,\"y\":0.27666872064180015,\"y0\":0.13015751294359376},{\"x\":28,\"y\":0.1732079458981994,\"y0\":0.14401777421011913},{\"x\":29,\"y\":0.16434562900185226,\"y0\":0.10201715281901944},{\"x\":30,\"y\":0.10902278389939715,\"y0\":0.13096141940224687},{\"x\":31,\"y\":0.12130552647880047,\"y0\":0.13007539913630495},{\"x\":32,\"y\":0.13189499389209813,\"y0\":0.1548329677287279},{\"x\":33,\"y\":0.16701788078384439,\"y0\":0.12825426147451768},{\"x\":34,\"y\":0.19748827143641204,\"y0\":0.11173963750950311},{\"x\":35,\"y\":0.10048470402153871,\"y0\":0.10009802752875707},{\"x\":36,\"y\":0.1589328406733382,\"y0\":0.15986871614703402},{\"x\":37,\"y\":0.1260306214335577,\"y0\":0.13176775383781347},{\"x\":38,\"y\":0.12310005807202623,\"y0\":0.11931081113873895},{\"x\":39,\"y\":0.19081063238544746,\"y0\":0.16285687568597873},{\"x\":40,\"y\":0.11915995362201988,\"y0\":0.17962864991277508},{\"x\":41,\"y\":0.16775608610181492,\"y0\":0.12206525453366346},{\"x\":42,\"y\":0.11689659197281145,\"y0\":0.18058574651367965},{\"x\":43,\"y\":0.10478702228876778,\"y0\":0.17203539919573813},{\"x\":44,\"y\":0.11845520244093624,\"y0\":0.14411348106805236},{\"x\":45,\"y\":0.12148839301915355,\"y0\":0.11210963563062251},{\"x\":46,\"y\":0.10516531708389541,\"y0\":0.1381196621572599},{\"x\":47,\"y\":0.1443174046222646,\"y0\":0.13853569640778007},{\"x\":48,\"y\":0.21339332873273398,\"y0\":0.1413255832623691},{\"x\":49,\"y\":0.2712006000742741,\"y0\":0.1174182482529442},{\"x\":50,\"y\":0.5050451567911616,\"y0\":0.10530492262916305},{\"x\":51,\"y\":0.909821514076055,\"y0\":0.10311489694306446},{\"x\":52,\"y\":1.5406349016176095,\"y0\":0.11639756702594588},{\"x\":53,\"y\":1.9406928968291974,\"y0\":0.1319517292574534},{\"x\":54,\"y\":2.1437324147686923,\"y0\":0.11580932540132466},{\"x\":55,\"y\":1.8465368739328496,\"y0\":0.14951149305133773},{\"x\":56,\"y\":1.4092532224974688,\"y0\":0.13733844893200403},{\"x\":57,\"y\":0.8817856427333232,\"y0\":0.15683227159202287}],[{\"x\":0,\"y\":0.1944409988255144,\"y0\":1.96711666620908},{\"x\":1,\"y\":0.15033225801417882,\"y0\":2.2321689568732666},{\"x\":2,\"y\":0.14925294980475312,\"y0\":2.826362145931559},{\"x\":3,\"y\":0.13370916755531753,\"y0\":3.386251224852818},{\"x\":4,\"y\":0.19872840374154924,\"y0\":4.005352873773173},{\"x\":5,\"y\":0.13950762000676847,\"y0\":4.3013872143412115},{\"x\":6,\"y\":0.16267251262861193,\"y0\":4.020579829876383},{\"x\":7,\"y\":0.1577907670976032,\"y0\":3.4219789412204467},{\"x\":8,\"y\":0.21860201765439113,\"y0\":2.58509889145323},{\"x\":9,\"y\":0.18971610615072376,\"y0\":1.822729955676908},{\"x\":10,\"y\":0.3651241384995914,\"y0\":1.2773091139309205},{\"x\":11,\"y\":0.40364878074449406,\"y0\":0.8964576430725082},{\"x\":12,\"y\":0.641325222983355,\"y0\":0.7560509950249666},{\"x\":13,\"y\":0.7970356614298015,\"y0\":0.5658128779600016},{\"x\":14,\"y\":1.035079540774146,\"y0\":0.5034858727384339},{\"x\":15,\"y\":1.2114900571612826,\"y0\":0.3536654175370305},{\"x\":16,\"y\":1.2955027464964213,\"y0\":0.3506200547592477},{\"x\":17,\"y\":1.2704279232237192,\"y0\":0.3123129620006957},{\"x\":18,\"y\":1.1110482804839328,\"y0\":0.47269183307017126},{\"x\":19,\"y\":0.95265250419215,\"y0\":0.5869615703969229},{\"x\":20,\"y\":0.7625642407866274,\"y0\":1.0306090874425782},{\"x\":21,\"y\":0.48432505597654985,\"y0\":1.6207717820731922},{\"x\":22,\"y\":0.3605975129100767,\"y0\":2.089944609680054},{\"x\":23,\"y\":0.25079581943021645,\"y0\":2.143846782981272},{\"x\":24,\"y\":0.17992789872009896,\"y0\":1.5359481534812218},{\"x\":25,\"y\":0.15831991003627732,\"y0\":0.962649903877563},{\"x\":26,\"y\":0.209545591944138,\"y0\":0.5719189871986874},{\"x\":27,\"y\":0.1815386065993288,\"y0\":0.40682623358539394},{\"x\":28,\"y\":0.22451288616655046,\"y0\":0.3172257201083185},{\"x\":29,\"y\":0.18631048531302957,\"y0\":0.2663627818208717},{\"x\":30,\"y\":0.2693049686300363,\"y0\":0.23998420330164402},{\"x\":31,\"y\":0.4390040968595268,\"y0\":0.2513809256151054},{\"x\":32,\"y\":0.5561378323665368,\"y0\":0.28672796162082603},{\"x\":33,\"y\":0.9278805101372621,\"y0\":0.29527214225836207},{\"x\":34,\"y\":1.3353385179667492,\"y0\":0.3092279089459151},{\"x\":35,\"y\":1.7554694271042415,\"y0\":0.20058273155029577},{\"x\":36,\"y\":2.308524602434114,\"y0\":0.31880155682037226},{\"x\":37,\"y\":2.7798378587096577,\"y0\":0.25779837527137117},{\"x\":38,\"y\":3.0871471730848987,\"y0\":0.24241086921076518},{\"x\":39,\"y\":3.19362118064261,\"y0\":0.3536675080714262},{\"x\":40,\"y\":3.0580826674114436,\"y0\":0.29878860353479497},{\"x\":41,\"y\":2.8290814192483107,\"y0\":0.2898213406354784},{\"x\":42,\"y\":2.403204319807294,\"y0\":0.2974823384864911},{\"x\":43,\"y\":1.979503686260371,\"y0\":0.2768224214845059},{\"x\":44,\"y\":1.5386751122848177,\"y0\":0.2625686835089886},{\"x\":45,\"y\":1.22746871167621,\"y0\":0.23359802864977608},{\"x\":46,\"y\":1.0047814505063442,\"y0\":0.24328497924115533},{\"x\":47,\"y\":0.920231760634797,\"y0\":0.2828531010300447},{\"x\":48,\"y\":1.194396098267215,\"y0\":0.3547189119951031},{\"x\":49,\"y\":1.4579447933613743,\"y0\":0.38861884832721827},{\"x\":50,\"y\":1.8332767350779728,\"y0\":0.6103500794203246},{\"x\":51,\"y\":1.785497637913814,\"y0\":1.0129364110191195},{\"x\":52,\"y\":1.3961662093621368,\"y0\":1.6570324686435554},{\"x\":53,\"y\":0.9233138020734465,\"y0\":2.072644626086651},{\"x\":54,\"y\":0.535039156141422,\"y0\":2.259541740170017},{\"x\":55,\"y\":0.2889374100548123,\"y0\":1.9960483669841873},{\"x\":56,\"y\":0.1537458202547387,\"y0\":1.5465916714294727},{\"x\":57,\"y\":0.1883149606515614,\"y0\":1.038617914325346}],[{\"x\":0,\"y\":0.11051783803850412,\"y0\":2.1615576650345942},{\"x\":1,\"y\":0.13068661955185235,\"y0\":2.382501214887445},{\"x\":2,\"y\":0.1578517352230847,\"y0\":2.975615095736312},{\"x\":3,\"y\":0.1728128878166899,\"y0\":3.5199603924081355},{\"x\":4,\"y\":0.10202869654167444,\"y0\":4.204081277514723},{\"x\":5,\"y\":0.17840681280940773,\"y0\":4.44089483434798},{\"x\":6,\"y\":0.17828655322082343,\"y0\":4.1832523425049954},{\"x\":7,\"y\":0.19687224281951787,\"y0\":3.5797697083180497},{\"x\":8,\"y\":0.15308661116287114,\"y0\":2.803700909107621},{\"x\":9,\"y\":0.16337432491127402,\"y0\":2.0124460618276316},{\"x\":10,\"y\":0.19935019137337806,\"y0\":1.6424332524305119},{\"x\":11,\"y\":0.12992399381473663,\"y0\":1.3001064238170024},{\"x\":12,\"y\":0.19960449892096221,\"y0\":1.3973762180083216},{\"x\":13,\"y\":0.10027564393822104,\"y0\":1.362848539389803},{\"x\":14,\"y\":0.12569230108056217,\"y0\":1.53856541351258},{\"x\":15,\"y\":0.17503334458451777,\"y0\":1.565155474698313},{\"x\":16,\"y\":0.19269541966194062,\"y0\":1.646122801255669},{\"x\":17,\"y\":0.1962713932455704,\"y0\":1.582740885224415},{\"x\":18,\"y\":0.19479403514149154,\"y0\":1.583740113554104},{\"x\":19,\"y\":0.18478477013321984,\"y0\":1.539614074589073},{\"x\":20,\"y\":0.3903502085015326,\"y0\":1.7931733282292055},{\"x\":21,\"y\":2.113535902304932,\"y0\":2.105096838049742},{\"x\":22,\"y\":4.817339276092961,\"y0\":2.4505421225901305},{\"x\":23,\"y\":2.7301424058386385,\"y0\":2.394642602411489},{\"x\":24,\"y\":0.5160762371843461,\"y0\":1.7158760522013208},{\"x\":25,\"y\":0.18540916174249022,\"y0\":1.1209698139138404},{\"x\":26,\"y\":0.5677074867030829,\"y0\":0.7814645791428254},{\"x\":27,\"y\":1.1464075745324163,\"y0\":0.5883648401847228},{\"x\":28,\"y\":1.2876248090555846,\"y0\":0.541738606274869},{\"x\":29,\"y\":0.6980320380328242,\"y0\":0.45267326713390127},{\"x\":30,\"y\":0.24283358972081664,\"y0\":0.5092891719316803},{\"x\":31,\"y\":0.11682030700960003,\"y0\":0.6903850224746322},{\"x\":32,\"y\":0.15527601995343537,\"y0\":0.8428657939873628},{\"x\":33,\"y\":0.12116465080341,\"y0\":1.2231526523956242},{\"x\":34,\"y\":0.11856791414918837,\"y0\":1.6445664269126643},{\"x\":35,\"y\":0.18425266326500114,\"y0\":1.9560521586545372},{\"x\":36,\"y\":0.1885328239909346,\"y0\":2.627326159254486},{\"x\":37,\"y\":0.22762141668860758,\"y0\":3.0376362339810288},{\"x\":38,\"y\":0.30843369961151645,\"y0\":3.329558042295664},{\"x\":39,\"y\":0.5150686859947133,\"y0\":3.547288688714036},{\"x\":40,\"y\":0.7904080489023975,\"y0\":3.3568712709462387},{\"x\":41,\"y\":0.9969372223042159,\"y0\":3.118902759883789},{\"x\":42,\"y\":1.1835681067174746,\"y0\":2.700686658293785},{\"x\":43,\"y\":1.1976013965051904,\"y0\":2.256326107744877},{\"x\":44,\"y\":1.0675440751484562,\"y0\":1.8012437957938063},{\"x\":45,\"y\":0.7788761831088342,\"y0\":1.461066740325986},{\"x\":46,\"y\":0.5260592994869968,\"y0\":1.2480664297474995},{\"x\":47,\"y\":0.32297373237592664,\"y0\":1.2030848616648417},{\"x\":48,\"y\":0.23281612172581895,\"y0\":1.5491150102623181},{\"x\":49,\"y\":0.15490821516916609,\"y0\":1.8465636416885927},{\"x\":50,\"y\":0.19289989359183243,\"y0\":2.4436268144982973},{\"x\":51,\"y\":0.19691381881928033,\"y0\":2.7984340489329336},{\"x\":52,\"y\":0.16966840994286328,\"y0\":3.053198678005692},{\"x\":53,\"y\":0.10215978941475964,\"y0\":2.9959584281600975},{\"x\":54,\"y\":0.1131423233217642,\"y0\":2.7945808963114387},{\"x\":55,\"y\":0.11913954267715618,\"y0\":2.2849857770389996},{\"x\":56,\"y\":0.12786382707962554,\"y0\":1.7003374916842113},{\"x\":57,\"y\":0.1917928157522389,\"y0\":1.2269328749769075}]]\n}\n\n\n"}
This site is a demo for all plugins I made.
!YSPlugin
<<forEachTiddler 
where 
'tiddler.tags.contains("YSPlugin")'
sortBy
'tiddler.title'
write 
'"|vertical-align:top;@@white-space: nowrap;{{large{[["
+tiddler.title
+"]]}}}@@<br>  "
+"|\n"'
>>
/***
|Name        |HorizontalSplitScreenPlugin|
|Description |Opens a new pop-up window with a horizontal split view, displaying the current page and another URL in a frameset.|
|Source      |https://github.com/wangyenshu/HorizontalSplitScreenPlugin/blob/main/HorizontalSplitScreenPlugin.js|
|Version     |0.1|
|Author      |Yanshu Wang, with the help of AI|
|License     |MIT|
|~CoreVersion|2.x|
|Type        |plugin|
!!!!!Documentation
Use the {{{<<HorizontalSplitScreen>>}}} macro to display a button that launches the horizontal split-screen browser.
It will open in a new pop-up window, prompting for a URL for the bottom pane.
<<HorizontalSplitScreen>>
!!!!!Code
***/
//{{{
config.macros.HorizontalSplitScreen = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Create a button element
        var button = document.createElement("button");
        button.innerText = "Open Horizontal Split Screen"; // Text displayed on the button
        button.title = "Click to open a horizontal split screen view on the current page"; // Tooltip

        // Add basic styling classes for consistency with TiddlyWiki buttons
        button.className = "tiddlyLink button";

        button.onclick = function() {
            var href = location.href;
            // Prompt for the URL for the bottom frame.
            var website = prompt('Please enter the URL for the bottom pane:', '') || href;

            // Remove any existing split screen containers or close buttons before creating new ones
            var existingContainer = document.getElementById("horizontalSplitScreenContainer");
            if (existingContainer) {
                document.body.removeChild(existingContainer);
            }
            var existingCloseButton = document.getElementById("horizontalSplitScreenCloseButton");
            if (existingCloseButton) {
                document.body.removeChild(existingCloseButton);
            }

            // Create the main container for the split view
            var splitContainer = document.createElement("div");
            splitContainer.setAttribute("id", "horizontalSplitScreenContainer");
            splitContainer.style.position = "fixed";
            splitContainer.style.left = "0";
            splitContainer.style.top = "0";
            splitContainer.style.width = "100vw";
            splitContainer.style.height = "100vh";
            splitContainer.style.zIndex = "99999"; // High z-index to overlay content
            splitContainer.style.display = "flex"; // Use flexbox for layout
            splitContainer.style.flexDirection = "column"; // Arrange items vertically (top-bottom)
            splitContainer.style.border = "none";
            splitContainer.style.margin = "0";
            splitContainer.style.padding = "0";
            splitContainer.style.backgroundColor = "white"; // Ensure background is solid if iframes don't load fully

            // Create the top iframe for the current page
            var topIframe = document.createElement("iframe");
            topIframe.style.width = "100%";
            topIframe.style.height = "50%"; // Top half
            topIframe.style.border = "none";
            topIframe.style.margin = "0";
            topIframe.style.padding = "0";
            topIframe.src = href; // Load current page into top iframe

            // Create the bottom iframe for the specified website
            var bottomIframe = document.createElement("iframe");
            bottomIframe.style.width = "100%";
            bottomIframe.style.height = "50%"; // Bottom half
            bottomIframe.style.border = "none";
            bottomIframe.style.margin = "0";
            bottomIframe.style.padding = "0";
            bottomIframe.src = website; // Load user-specified website into bottom iframe

            // Append iframes to the container
            splitContainer.appendChild(topIframe);
            splitContainer.appendChild(bottomIframe);

            // Append the container to the document body
            document.body.appendChild(splitContainer);

            // Create a close button for the split view
            var closeButton = document.createElement("button");
            closeButton.innerText = "Close Split View";
            closeButton.style.position = "fixed";
            closeButton.style.top = "10px";
            closeButton.style.right = "10px";
            closeButton.style.zIndex = "100000"; // Higher than iframe container
            closeButton.style.padding = "5px 10px";
            closeButton.style.borderRadius = "5px";
            closeButton.style.backgroundColor = "#ff4d4d"; // Red color
            closeButton.style.color = "white";
            closeButton.style.border = "none";
            closeButton.style.cursor = "pointer";
            closeButton.setAttribute("id", "horizontalSplitScreenCloseButton");

            closeButton.onclick = function() {
                var containerToRemove = document.getElementById("horizontalSplitScreenContainer");
                if (containerToRemove) {
                    document.body.removeChild(containerToRemove);
                }
                var buttonToRemove = document.getElementById("horizontalSplitScreenCloseButton");
                if (buttonToRemove) {
                    document.body.removeChild(buttonToRemove);
                }
            };
            document.body.appendChild(closeButton);

            return false; // Prevent default button action
        };

        // Append the main plugin button to the place where the macro is called
        place.appendChild(button);
    }
};
//}}}
/***
|Name|JSONEditorPlugin|
|Description|A GUI editor for JSON content in TiddlyWiki tiddlers. Companion plugin for innerTW5Plugin.|
|Version|0.1|
|Source|https://github.com/wangyenshu/JSONEditorPlugin/blob/main/JSONEditorPlugin.js|
|Author|YanshuWang, with the help of AI|
|License|MIT|
|~CoreVersion|2.x|
!Installation:
Add {{{jsonEdit}}} to [[ToolbarCommands]].
***/
//{{{
// Ensure config.extensions.JSONEditor is defined for proper namespacing
if (!config.extensions.JSONEditor) {
    config.extensions.JSONEditor = {};
}

(function() { // Start of a closure for local aliases and variables

    var JSONEditor = config.extensions.JSONEditor; // Alias for our plugin's namespace

    /*
    ** Helper Functions (Namespaced within JSONEditor)
    */

    // JSONEditor.tryParseJSON: Safely parses a JSON string. Returns null if invalid or not an object/array.
    JSONEditor.tryParseJSON = function(jsonString) {
        if (!jsonString) {
            return null; // Handle empty or null strings directly
        }
        try {
            var o = JSON.parse(jsonString);
            // Ensure it's an object or array, not just a primitive like "null" or "123"
            if (typeof o === "object" && o !== null) {
                return o;
            }
        } catch (e) {
            // Parsing failed, return null
        }
        return null;
    };

    // JSONEditor.addPropertyField: Adds a new key-value input pair to the editor GUI
    // This function is also used for existing properties now.
    JSONEditor.addPropertyField = function(wrapper, key, value, isNewProperty) {
        key = key || "newProperty";
        value = value || "";
        isNewProperty = isNewProperty === true; // Ensure boolean

        var fieldContainer = createTiddlyElement(wrapper, "div", null, "jsonEditorField");

        // Key Input
        var keyLabel = createTiddlyElement(fieldContainer, "label", null, "jsonEditorLabel jsonEditorKeyLabel");
        keyLabel.textContent = "Key:";
        var keyInput = createTiddlyElement(keyLabel, "input", null, "jsonEditorKeyInput");
        keyInput.type = "text";
        keyInput.value = key;
        if (!isNewProperty) {
            keyInput.setAttribute("readonly", "readonly"); // Make existing keys non-editable to simplify
            keyInput.className += " jsonEditorKeyInputReadonly";
        }
        keyInput.setAttribute("data-json-key-field", "true"); // Mark as key input

        // Value Input
        var valueInput;
        // Determine input type based on value, if not new property
        if (!isNewProperty) {
            if (typeof value === 'string' && (value.length > 50 || value.indexOf('\n') !== -1)) {
                valueInput = createTiddlyElement(fieldContainer, "textarea", null, "jsonEditorInput jsonEditorTextarea");
                valueInput.value = value;
                valueInput.style.height = "60px"; // Default height for existing long textareas
            } else if (typeof value === 'boolean') {
                valueInput = createTiddlyElement(fieldContainer, "input", null, "jsonEditorInput jsonEditorCheckbox");
                valueInput.type = "checkbox";
                valueInput.checked = value;
            } else if (typeof value === 'number') {
                valueInput = createTiddlyElement(fieldContainer, "input", null, "jsonEditorInput jsonEditorNumber");
                valueInput.type = "number";
                valueInput.value = value;
            } else if (value === null) {
                valueInput = createTiddlyElement(fieldContainer, "input", null, "jsonEditorInput jsonEditorNull");
                valueInput.type = "text";
                valueInput.value = "null";
            } else if (typeof value === 'object') {
                valueInput = createTiddlyElement(fieldContainer, "textarea", null, "jsonEditorInput jsonEditorObject");
                valueInput.value = JSON.stringify(value, null, 2); // Still pretty-print for in-editor display
                valueInput.style.height = "100px";
            } else {
                valueInput = createTiddlyElement(fieldContainer, "input", null, "jsonEditorInput jsonEditorText");
                valueInput.type = "text";
                valueInput.value = String(value);
            }
        } else {
            // For new properties, default to a textarea with smaller initial height
            valueInput = createTiddlyElement(fieldContainer, "textarea", null, "jsonEditorInput jsonEditorTextarea");
            valueInput.value = value;
            valueInput.style.height = "30px";
        }

        valueInput.setAttribute("data-json-value-field", "true"); // Mark as value input

        // Delete button
        var deleteButton = createTiddlyButton(fieldContainer, "X", "Remove this property", function() {
            wrapper.removeChild(fieldContainer);
        }, "jsonEditorDeleteButton");

        fieldContainer.appendChild(keyLabel); // Append key label (which contains key input)
        fieldContainer.appendChild(valueInput); // Then value input
        fieldContainer.appendChild(deleteButton); // Add delete button at the end
    };


    /*
    ** JSON Editor Macro (config.macros.jsonEdit)
    */
    config.macros.jsonEdit = {
        handler: function(place, macroName, params, wikifier, paramString, tiddler) {
            var jsonString = tiddler.text || ""; // Get tiddler's main text content, default to empty string
            var data = JSONEditor.tryParseJSON(jsonString); // Use namespaced helper

            if (!data) {
                // If invalid or empty JSON, display a simple textarea for manual editing
                var msg = createTiddlyElement(place, "p");
                msg.className = "jsonEditorErrorMessage";
                msg.innerHTML = "<strong>Error:</strong> This tiddler's 'text' content does not contain valid JSON (must be an object or array). Displaying as plain text.<br>Please enter valid JSON to use the GUI editor.";

                var textArea = createTiddlyElement(place, "textarea", null, "jsonEditorFallbackTextArea");
                textArea.value = jsonString; // Show whatever content was there (even if 'undefined' from source)
                textArea.style.width = "100%";
                textArea.style.height = config.options.txtEasyEditorHeight || "500px"; // Reuse EasyEdit height option
                textArea.setAttribute("edit", "text"); // Mark for saving: specifically target the 'text' property
                return;
            }

            // --- Valid JSON detected, render GUI editor ---
            var wrapper = createTiddlyElement(place, "div", null, "jsonEditorWrapper");
            wrapper.setAttribute("jsonEdit", "text"); // Custom attribute to identify this editor for gathering data, always 'text'

            // Add button for adding new properties
            var addButtonContainer = createTiddlyElement(wrapper, "div", null, "jsonEditorAddButtonContainer");
            var addBtn = createTiddlyButton(addButtonContainer, "Add Property", "Add a new key-value pair", function() {
                JSONEditor.addPropertyField(wrapper, "", "", true); // Add new empty field, mark as new
            }, "jsonEditorAddButton");

            // Render existing properties
            for (var key in data) {
                if (data.hasOwnProperty(key)) {
                    JSONEditor.addPropertyField(wrapper, key, data[key], false); // Pass key, value, and false for isNewProperty
                }
            }
        },

        // gather: Collects data from the GUI and converts back to JSON
        gather: function(element) {
            var jsonEditAttr = element.getAttribute("jsonEdit");
            if (jsonEditAttr) {
                var newData = {};
                var isValid = true; // Flag for overall validity

                // Iterate over all field containers to gather both existing and new properties
                var fieldContainers = element.querySelectorAll(".jsonEditorField");
                fieldContainers.forEach(function(container) {
                    var keyInput = container.querySelector(".jsonEditorKeyInput");
                    var valueInput = container.querySelector(".jsonEditorInput[data-json-value-field='true']");

                    if (keyInput && valueInput) {
                        var key = keyInput.value.trim();
                        var value = JSONEditor._parseInputValue(valueInput, key); // Use namespaced helper
                        if (value === undefined) isValid = false; // Flag if parsing failed

                        if (key) { // Only add if key is not empty
                            if (newData.hasOwnProperty(key)) {
                                displayMessage("Warning: Duplicate key '" + key + "' found. Only the first instance will be saved.");
                            } else {
                                newData[key] = value;
                            }
                        }
                    }
                });

                if (!isValid) {
                    displayMessage("Some values were not valid. Please check the JSON editor.");
                }

                return JSON.stringify(newData); // Compact JSON output
            } else {
                // If it's the fallback textarea (for invalid initial JSON)
                var textArea = element.querySelector(".jsonEditorFallbackTextArea");
                if (textArea) {
                    return textArea.value; // Return the content of the raw textarea
                }
            }
            return null;
        }
    };

    /*
    ** Internal Helper for Parsing Input Values (within JSONEditor namespace)
    */
    JSONEditor._parseInputValue = function(inputElement, keyName) {
        var value;
        if (inputElement.classList.contains("jsonEditorCheckbox")) {
            value = inputElement.checked;
        } else if (inputElement.classList.contains("jsonEditorNumber")) {
            value = parseFloat(inputElement.value);
            if (isNaN(value) && inputElement.value !== "") {
                displayMessage("Warning: Value for '" + keyName + "' is not a valid number. Saving as string.");
                value = inputElement.value; // Fallback to string
            }
        } else if (inputElement.classList.contains("jsonEditorNull")) {
            value = (inputElement.value.toLowerCase() === "null") ? null : inputElement.value;
        } else if (inputElement.classList.contains("jsonEditorObject")) {
            value = JSONEditor.tryParseJSON(inputElement.value); // Use namespaced helper
            if (value === null && inputElement.value !== "") {
                displayMessage("Warning: Value for '" + keyName + "' is not valid JSON. Saving as plain string.");
                value = inputElement.value; // Fallback to string
            }
        } else {
            value = inputElement.value; // For plain text inputs (includes new property values)
        }
        return value;
    };


    /*
    ** Hijacking Story.prototype.gatherSaveFields
    */

    // 1. Backup the original function in the same namespace
    Story.prototype.gatherSaveFields_JSONEditor = Story.prototype.gatherSaveFields;

    // 2. Overwrite the original
    Story.prototype.gatherSaveFields = function(e, fields) {
        // First, invoke the original gatherSaveFields
        Story.prototype.gatherSaveFields_JSONEditor.apply(this, arguments);

        // Then, add our custom gathering logic if our editor is present
        // The 'f' attribute should always be 'text' for this specific plugin.
        if (e && e.getAttribute) {
            var f = e.getAttribute("jsonEdit");
            if (f === "text") { // Explicitly check for 'text' field
                var newVal = config.macros.jsonEdit.gather(e);
                if (newVal !== null) { // Only update if gather returned a non-null value
                    fields[f] = newVal;
                }
            }
        }
    };

    /*
    ** JSON Editor Command (config.commands.jsonEdit)
    */
    config.commands.jsonEdit = {
        text: "edit JSON",
        tooltip: "Edit this tiddler's content as JSON in a GUI",
        readOnlyText: "view JSON",
        readOnlyTooltip: "View the JSON source of this tiddler",
        handler: function(event, src, title) {
            clearMessage();
            // Pass 'text' as the parameter to the template, indicating we want to edit the 'text' field.
            story.displayTiddler(null, title, "JsonEditTemplate", false, null, "text"); // Note: template name still 'JsonEditTemplate'
            return false;
        }
    };

})(window.jQuery); // End of closure, using window.jQuery if available, otherwise just ()

/*
** Shadow Tiddlers and Stylesheets
*/

// Modify the ViewTemplate to add a "edit JSON" button next to the "edit" button
// This is outside the closure as it modifies a global config object directly.
config.shadowTiddlers.ViewTemplate = config.shadowTiddlers.ViewTemplate.replace(/\+editTiddler/, "+editTiddler jsonEdit");

// Create the JsonEditTemplate by modifying the default EditTemplate
// This tells TiddlyWiki to use our 'jsonEdit' macro instead of the default 'edit' macro
// for the 'text' field when the JsonEditTemplate is active.
// Keep the template name as 'JsonEditTemplate' for compatibility with existing references
config.shadowTiddlers.JsonEditTemplate = config.shadowTiddlers.EditTemplate.replace(/macro='edit text'/g, "macro='jsonEdit text'");

// Optional: Stylesheet for the JSON editor GUI
config.shadowTiddlers.JsonEditorStyleSheet = "/*{{{*/\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorWrapper { margin: 1em 0; padding: 10px; border: 1px solid #ddd; background-color: #f9f9f9; box-shadow: 1px 1px 3px rgba(0,0,0,0.1); }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorField { margin-bottom: 8px; display: flex; align-items: flex-start; gap: 5px; }\n"; /* Added gap for spacing */
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorKeyLabel { flex-shrink: 0; display: flex; align-items: center; gap: 5px; }\n"; /* For key input */
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorKeyInput { flex-grow: 1; padding: 6px 8px; border: 1px solid #bbb; border-radius: 4px; font-family: monospace; font-size: 0.9em; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorKeyInputReadonly { background-color: #eee; cursor: not-allowed; }\n"; /* Style for readonly keys */
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorLabel { font-weight: bold; margin-right: 10px; min-width: 120px; color: #333; padding-top: 5px; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorInput { flex-grow: 1; padding: 6px 8px; border: 1px solid #bbb; border-radius: 4px; font-family: monospace; font-size: 0.9em; box-shadow: inset 0 1px 2px rgba(0,0,0,0.05); }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorInput:focus, .jsonEditorKeyInput:focus { border-color: #5cb3fd; outline: none; box-shadow: 0 0 5px rgba(82,168,236,0.5); }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorTextarea { resize: vertical; min-height: 60px; **width: 100px;** }\n"; /* CRITICAL CHANGE */
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorCheckbox { margin-left: 0; margin-top: 8px; transform: scale(1.2); }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorFallbackTextArea { /* Styles for the raw text fallback area */ }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorErrorMessage { color: #D8000C; background-color: #FFBABA; border: 1px solid #D8000C; padding: 8px; margin-bottom: 10px; border-radius: 4px; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorAddButtonContainer { margin-bottom: 10px; text-align: right; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorAddButton { background-color: #4CAF50; color: white; padding: 8px 15px; border: none; border-radius: 4px; cursor: pointer; font-size: 0.9em; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorAddButton:hover { background-color: #45a049; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorDeleteButton { background-color: #f44336; color: white; padding: 5px 10px; border: none; border-radius: 4px; cursor: pointer; font-size: 0.8em; margin-left: 5px; line-height: 1; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += ".jsonEditorDeleteButton:hover { background-color: #da190b; }\n";
config.shadowTiddlers.JsonEditorStyleSheet += "/*}}}*/";

store.addNotification("JsonEditorStyleSheet", refreshStyles);

//}}}
/***
|Name        |LLMPlugin|
|Description |Displays an interface for llm.js to run a language model.|
|Source      |https://github.com/wangyenshu/LLMPlugin/blob/main/LLMPlugin.js|
|Version     |0.1|
|Author      |Yanshu Wang|
|License     |MIT|
|~CoreVersion|2.x|
|Type        |plugin|
!!!!!Documentation
Download llm.js release from https://github.com/rahuldshetty/llm.js/releases. Keep the folder structure. Set the path to llm.js in [[LLMPluginConfig]].
Use the {{{llmjs}}} macro (accepts optional parameters "prompt", "model", and "modelType"):
{{{
<<llmjs
  prompt:"def fibonacci(n):"
  model:"https://huggingface.co/RichardErkhov/bigcode_-_tiny_starcoder_py-gguf/resolve/main/tiny_starcoder_py.Q8_0.gguf"
  modelType:"GGUF_CPU"
>>
}}}
<<llmjs
  prompt:"def fibonacci(n):"
  model:"https://huggingface.co/RichardErkhov/bigcode_-_tiny_starcoder_py-gguf/resolve/main/tiny_starcoder_py.Q8_0.gguf"
  modelType:"GGUF_CPU"
>>
!!!!!Code
***/
//{{{
config.macros.llmjs = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters
        var p = paramString.parseParams()[0] || {};
        var initialPrompt = p.prompt ? p.prompt[0] : "def fibonacci(n):";
        var modelUrl = p.model ? p.model[0] : "https://huggingface.co/RichardErkhov/bigcode_-_tiny_starcoder_py-gguf/resolve/main/tiny_starcoder_py.Q8_0.gguf";
        var modelType = p.modelType ? p.modelType[0] : "GGUF_CPU";

        // Create a container for the LLM.js interface
        var container = document.createElement("div");
        container.innerHTML = `
            <style>
			  .llmInteraction {
				box-sizing: border-box;
				border: 1px solid black;
				width: 500px;
				border-radius: 10px;
				padding: 10px;

				font-family: monospace;
			  }
			</style>
            <h3>Enter Prompt for LLM:</h3>
            <textarea id="llmPromptInput" rows="4" class="llmInteraction" style="background-color:#f4f4f4;">${initialPrompt}</textarea>
            <div><button id="runLLMButton">Run Model</button></div>
            <div>
              <h3>Output:</h3>
              <pre id="llmOutput" class="llmInteraction" style="white-space: pre-wrap; background-color:#EBEEF1; height:150px; overflow-y:auto;"></pre>
            </div>
        `;
        place.appendChild(container);
        
        // Load llm.js from the configured path
        var llmjsPath = config.options.txtllmjsPath;
        if (!llmjsPath) {
            console.error("The path to llm.js is not set in config.options.txtllmjsPath.");
            return;
        }
        var scriptElement = document.createElement("script");
        scriptElement.src = llmjsPath;
        scriptElement.type = "module";
        scriptElement.onload = function() {
            // Within the module, import LLM and expose it globally
            // (We use an inline module script to do this.)
            var moduleCode = `
                import { LLM } from "${llmjsPath}";
                window.LLM = LLM;
            `;
            var inlineScript = document.createElement("script");
            inlineScript.type = "module";
            inlineScript.textContent = moduleCode;
            document.head.appendChild(inlineScript);
            
            // Delay setup to allow the inline module to execute and define window.LLM
            setTimeout(function(){
                if (typeof window.LLM === 'undefined') {
                    console.error("Failed to load LLM from the specified path:", llmjsPath);
                    return;
                }
                
                // State variable to track model load status
                let model_loaded = false;
                
                // Get references to UI elements
                const outputElem = document.getElementById("llmOutput");
                const promptInput = document.getElementById("llmPromptInput");
                const runButton = document.getElementById("runLLMButton");
                
                // Callback functions
                const on_loaded = () => { 
                    model_loaded = true; 
                    console.log("LLM model loaded");
                };
                const write_result = (text) => { 
                    outputElem.innerText += text + "\n"; 
                };
                const run_complete = () => { 
                    console.log("Model run complete");
                };
                
                // Configure the LLM instance using parameters from the macro
                const app = new window.LLM(
                    modelType,
                    modelUrl,
                    on_loaded,
                    write_result,
                    run_complete
                );
                
                // Download and load the model using a web worker
                app.load_worker();
                
                // Function to run the model using the current prompt
                async function runModel() {
                    if (!model_loaded) {
                        outputElem.innerText += "Model not loaded yet. Please wait...\n";
                        return;
                    }
                    // Clear previous output
                    outputElem.innerText = "";
                    // Run the model with the prompt from the input
                    const promptText = promptInput.value;
                    await app.run({ prompt: promptText, top_k: 1 });
                }
                
                // Attach the event listener to the run button
                runButton.addEventListener("click", runModel);
                
                // Optionally, trigger a run automatically once the model loads
                const checkInterval = setInterval(() => {
                    if(model_loaded) {
                        runModel();
                        clearInterval(checkInterval);
                    } else {
                        console.log("Waiting for model to load...");
                    }
                }, 5000);
            }, 500); // Adjust delay as needed
        };
        scriptElement.onerror = function() {
            console.error("Error loading llm.js from the specified path:", llmjsPath);
        };
        document.body.appendChild(scriptElement);
    }
};
//}}}
config.options.txtllmjsPath = "./js/llm.js/llm.js";
[[Home]]
/***
|Name|ModelViewerPlugin|
|Source|https://github.com/wangyenshu/ModelViewerPlugin/blob/main/ModelViewerPlugin.js|
|Version|0.1|
|Author|Yanshu Wang|
|License|MIT|
|~CoreVersion|2.x|
|Type|plugin|
|Description|Displays a 3D model using the model‑viewer web component|
!!!!!Documentation
{{{
<<modelviewer src:"https://example.com/model.glb" alt:"3D Model" ar:"true" environmentImage:"https://example.com/env.hdr" poster:"https://example.com/poster.webp" shadowIntensity:"1" cameraControls:"true" touchAction:"pan-y" size:"200%,200%">>
}}}
Model downloaded from https://sketchfab.com/3d-models/low-poly-truck-car-drifter-f3750246b6564607afbefc61cb1683b1.
<<modelviewer src:"./assets/models/low-poly_truck_car_drifter.glb" alt:"3D Model Demo" ar:"true" shadowIntensity:"1" cameraControls:"true" touchAction:"pan-y" size:"200%,200%">>
!!!!!Credit
https://modelviewer.dev/
!!!!!Code
***/
//{{{
if(!version.extensions.ModelViewerPlugin) {
    version.extensions.ModelViewerPlugin = {major: 1, minor: 0, revision: 4, date: new Date()};
}

config.macros.modelviewer = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Ensure the model-viewer JS is loaded
        if(!document.getElementById("model-viewer-script")) {
            var script = document.createElement("script");
            script.type = "module";
            script.src = "https://ajax.googleapis.com/ajax/libs/model-viewer/4.0.0/model-viewer.min.js";
            script.id = "model-viewer-script";
            document.getElementsByTagName("head")[0].appendChild(script);
        }
        // Parse parameters using TiddlyWiki Classic's parseParams method.
        var p = paramString.parseParams("name", null, true)[0] || {};
        
        // Build attribute string for <model-viewer>
        var attr = "";
        if(p.src) { attr += ' src="' + p.src + '"'; }
        if(p.alt) { attr += ' alt="' + p.alt + '"'; }
        if(p.poster) { attr += ' poster="' + p.poster + '"'; }
        if(p.ar && p.ar.toString().toLowerCase() === "true") { attr += " ar"; }
        if(p.environmentImage) { attr += ' environment-image="' + p.environmentImage + '"'; }
        if(p.shadowIntensity) { attr += ' shadow-intensity="' + p.shadowIntensity + '"'; }
        if(p.cameraControls && p.cameraControls.toString().toLowerCase() === "true") { attr += " camera-controls"; }
        if(p.touchAction) { attr += ' touch-action="' + p.touchAction + '"'; }
        
        // Create a container with resize functionality
        var div = createTiddlyElement(place, "div");
        div.style.resize = "both";
        div.style.overflow = "auto";
        div.style.minWidth = "200px";
        div.style.minHeight = "200px";
        
        // If a size parameter is provided, apply it.
        if(p.size) {
            var dims = String(p.size).split(",");
            if(dims.length === 2) {
                div.style.width = dims[0].trim();
                div.style.height = dims[1].trim();
            }
        }
        
        // Insert the <model-viewer> element into the container
        div.innerHTML = "<model-viewer" + attr + "></model-viewer>";
    }
};
//}}}
/***
|Name|NewTW5TiddlerMacro|
|Description|Generates a tiddler named 'New TW5Tiddler' with a default TW5-like JSON structure and current timestamps. Companion Plugin for InnerTW5Plugin.|
|Version|0.1|
|Source|https://github.com/wangyenshu/NewTW5TiddlerMacro/blob/main/NewTW5TiddlerMacro.js|
|Author|Yanshu Wang, with the help of AI|
|License|MIT|
|~CoreVersion|2.x|
!Documentation
This plugin depends on [[JSONEditorPlugin]].
!Usage
{{{<<NewTW5Tiddler>>}}}
!Demo
<<NewTW5Tiddler>>
***/
//{{{
config.macros.NewTW5Tiddler = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Create a button to trigger the new tiddler creation
        var button = createTiddlyButton(place, "New TW5Tiddler", "Create a new tiddler named 'New TW5Tiddler' with JSON content", this.onClick);
    },

    onClick: function(e) {
        // Generate current timestamp in TiddlyWiki's format (YYYYMMDDHHMMSSmmm)
        var now = new Date();
        var year = now.getFullYear().toString();
        var month = (now.getMonth() + 1).toString();
        if (month.length == 1) month = "0" + month;
        var day = now.getDate().toString();
        if (day.length == 1) day = "0" + day;
        var hours = now.getHours().toString();
        if (hours.length == 1) hours = "0" + hours;
        var minutes = now.getMinutes().toString();
        if (minutes.length == 1) minutes = "0" + minutes;
        var seconds = now.getSeconds().toString();
        if (seconds.length == 1) seconds = "0" + seconds;
        var milliseconds = now.getMilliseconds().toString();
        while (milliseconds.length < 3) milliseconds = "0" + milliseconds; // Ensure 3 digits for milliseconds

        var timestamp = year + month + day + hours + minutes + seconds + milliseconds;

        // Define the content for the new tiddler
        var newTiddlerContent = {
            "created": timestamp,
            "text": "",
            "tags": "",
            "title": "New Tiddler", // This is the 'title' property *within* the JSON content
            "modified": timestamp
        };

        // Convert the object to a compact JSON string
        var jsonString = JSON.stringify(newTiddlerContent);

        // *** CRITICAL CHANGE: Set the tiddler's actual title to "New TW5Tiddler" ***
        var newTiddlerTitle = "New TW5Tiddler";

        // Create the new Tiddler object
        var newTiddler = new Tiddler();
        newTiddler.title = newTiddlerTitle;
        newTiddler.text = jsonString; // Set the JSON string as the tiddler's main text content
        newTiddler.created = now; // Set TiddlyWiki's internal created timestamp
        newTiddler.modified = now; // Set TiddlyWiki's internal modified timestamp
        newTiddler.tags = ["JSON"]; // Optionally add a tag to identify JSON tiddlers

        // Add the new tiddler to the store and display it
        store.addTiddler(newTiddler);
        // Display the newly created tiddler. Use "JsonEditTemplate" if your JSON editor plugin is active.
        story.displayTiddler(null, newTiddlerTitle, "JsonEditTemplate", true);
        return false; // Prevent default button action
    }
};
//}}}
def fibonacci_sequence(n):
    """
    Generates a Fibonacci sequence up to n terms.

    Args:
        n: The number of terms in the sequence.

    Returns:
        A list containing the Fibonacci sequence.
    """
    if n <= 0:
        return []
    elif n == 1:
        return [0]
    else:
        list_fib = [0, 1]
        while len(list_fib) < n:
            next_fib = list_fib[-1] + list_fib[-2]
            list_fib.append(next_fib)
        return list_fib
# Example usage:
num_terms = 10
fib_sequence = fibonacci_sequence(num_terms)
print(f"Fibonacci sequence up to {num_terms} terms: {fib_sequence}")

num_terms = 5
fib_sequence = fibonacci_sequence(num_terms)
print(f"Fibonacci sequence up to {num_terms} terms: {fib_sequence}")
/***
|Name        |RSSReaderFeedrPlugin|
|Description |Read and render RSS feeds using feedr.|
|Source      |https://github.com/wangyenshu/RSSReaderFeedrPlugin/blob/main/RSSReaderFeedrPlugin.js|
|Version     |0.1|
|Author      |Yanshu Wang|
|License     |MIT|
|~CoreVersion|2.x|
|Type        |plugin|
!!!!!Documentation
The first parameter is the feed url, the second parameter is the template for displaying.
By default, it uses the server https://www.feedrapp.info. For selfhosting, see https://feedrapp.info/hosting.
{{{
<<rssReader "http://feeds.feedburner.com/premiumpixels" "<li><a href='{url}'>[{author}@{date}] {title}</a><br/>{teaserImage}{shortBodyPlain}</li>">>
}}}
<<rssReader "http://feeds.feedburner.com/premiumpixels" "<li><a href='{url}'>[{author}@{date}] {title}</a><br/>{teaserImage}{shortBodyPlain}</li>">>
!!!!!Credit
https://github.com/sdepold/feedrapp
!!!!!Code
***/
//{{{
config.macros.rssReader = {
    dateFormat: "MMM DD, YYYY",
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Get the feed URL (first parameter) or default.
        var feedURL = params[0] || "http://feeds.feedburner.com/premiumpixels";
        // Get the entry template (second parameter) or default.
        var entryTemplate = params[1] || "<li><a href='{url}'>[{author}@{date}] {title}</a><br/>{teaserImage}{shortBodyPlain}</li>";
        
        // Create a container for the RSS feed.
        var container = document.createElement("div");
        container.id = "rssReaderContainer_" + new Date().getTime();
        container.style.margin = "10px";
        container.style.padding = "10px";
        container.style.border = "1px solid #ccc";
        place.appendChild(container);
        
        // Utility: Load a script dynamically.
        function loadScript(src, id, callback) {
            if (!document.getElementById(id)) {
                var script = document.createElement("script");
                script.id = id;
                script.src = src;
                script.onload = callback;
                document.head.appendChild(script);
            } else {
                callback();
            }
        }
        
        // Load jQuery 1.6.4, then Moment.js 2.8.4, then jquery.rss plugin.
        loadScript("https://code.jquery.com/jquery-1.6.4.min.js", "jquery_1.6.4", function() {
            loadScript("https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js", "moment_2.8.4", function() {
                loadScript("https://cdnjs.cloudflare.com/ajax/libs/jquery-rss/4.3.0/jquery.rss.min.js", "jquery_rss", function() {
                    // Give jquery.rss a short delay to ensure it has attached.
                    setTimeout(function() {
                        $(container).rss(feedURL, {
                            entryTemplate: entryTemplate,
                            ssl: true,
                            limit: 10,
                            dateFormat: config.macros.rssReader.dateFormat
                        });
                    }, 100);
                });
            });
        });
    }
};
//}}}
/***
|Name|RunScriptPlugin|
|Source|https://github.com/wangyenshu/RunScriptPlugin/blob/main/RunScriptPlugin.js|
|Author|Yanshu Wang|
|Version|0.1|
|Type|plugin|
|Description|A TiddlyWiki Classic plugin to run multiple programming language.|
|License|MIT|

!Usage
{{{
<<BrythonScript script:print('Hello world!')>>
<<BrythonScript tid:TiddlerName>>
<<PyodideScript script:print('Hello world!')>>
<<PyodideScript tid:TiddlerName>>
<<runcppscript script:#include <iostream>using namespace std;int main() {    cout << "Hello, World!" << endl;    return 0;}>>
<<runcppscript tid:TiddlerName>>
<<runwebrscript script:fit <- lm(mpg ~ am, data=mtcars); summary(fit)>>
<<runwebrscript tid:TiddlerName>>
}}}
Edit pathlib in [[RunScriptPluginConfig]].

!Demo
<<BrythonScript tid:Brython_Example_HelloBrython>>
<<PyodideScript tid:Pyodide_Example_Fibonacci>>
<<runcppscript>>
<<runwebrscript>>
!Todo
Add input method.
Implement a similar plugin for 
- basic https://github.com/google/wwwbasic
- php https://phpjs.hertzen.com/
- tex https://manuels.github.io/texlive.js/
-       p5  p5.js
-       C#
-	SQL	SQL.js	https://sql.js.org/
-	Go	GopherJS	https://github.com/gopherjs/gopherjs
-	Delphi/Object Pascal
-	Visual Basic	
-	Fortran	
-	Scratch	
-	Rust
-	Ruby	Opal	https://opalrb.com/
-	Lua
-	Perl	
-	Haskell
-	OCaml	BuckleScript	https://bucklescript.github.io/
-	Scala	Scala.js	https://www.scala-js.org/
-	Kotlin	Kotlin/JS	https://kotlinlang.org/docs/reference/js-overview.html
-	Swift	SwiftWasm	https://swiftwasm.org/
-	Racket
-	Scheme	BiwaScheme	https://github.com/biwascheme/biwascheme
-	Tcl
-	Erlang
-	Elixir	Nerves	https://nerves-project.org/
-	Clojure	ClojureScript	https://clojurescript.org/
-	F#	Fable	https://fable.io/
-	D	
-	VHDL
-	Verilog	EDA Playground	https://www.edaplayground.com/
-	COBOL
-	ActionScript
-	Ada
-	ALGOL
-	LISP
-	Bash	ShellJS	https://github.com/shelljs/shelljs
-	BCPL
-	Crystal	
-	Forth	
!Credit
https://brython.info
https://pyodide.org
https://docs.r-wasm.org/webr/latest/
https://github.com/felixhao28/JSCPP
***/
//{{{
config.macros.BrythonScript = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "script:" and "tid:".
        var paramsObj = paramString.parseParams("script tid", null, true)[0] || {};
        var defaultScript = "";
        if (paramsObj.tid && paramsObj.tid.length) {
            // Load Python code from the specified tiddler.
            defaultScript = store.getTiddlerText(paramsObj.tid[0]) || "";
        } else if (paramsObj.script && paramsObj.script.length) {
            defaultScript = paramsObj.script.join(" ");
        } else {
            defaultScript = "Write your Python code here...";
        }
        
        // Create the container for the Brython Script.
        var container = document.createElement("div");
        container.innerHTML = `
            <div id="brythonScriptContainer">
                <textarea id="brythonCodeInput" class="brythonCodeArea" rows="10" cols="60" placeholder="Write your Python code here...">${defaultScript}</textarea>
                <div><button id="executeBrythonCode">Run Code</button></div>
            </div>
        `;
        place.appendChild(container);
        
        // Dynamically load Brython scripts.
        var brythonScript = document.createElement("script");
        brythonScript.src = config.options.txtBrythonjsPath;
        brythonScript.onload = function() {
            var brythonStdlibScript = document.createElement("script");
            brythonStdlibScript.src = config.options.txtBrythonStdLibjsPath;
            brythonStdlibScript.onload = function() {
                // Initialize Brython after the standard library is loaded.
                brython({debug: 1});
            };
            document.body.appendChild(brythonStdlibScript);
        };
        document.body.appendChild(brythonScript);
        
        // Once Brython is loaded, set up the event listener on the button.
        brythonScript.onload = function() {
            document.getElementById("executeBrythonCode").addEventListener("click", function() {
                var pythonCode = document.getElementById("brythonCodeInput").value;
                try {
                    if (typeof __BRYTHON__ !== 'undefined') {
                        __BRYTHON__.runPythonSource(pythonCode);
                    } else {
                        alert("Brython is not ready yet.");
                    }
                } catch (e) {
                    alert("Execution error: " + e.message);
                }
            });
        };
    }
};

config.macros.PyodideScript = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "script:" and "tid:"
        var p = paramString.parseParams("script tid", null, true)[0] || {};
        var defaultScript = "";

        if (p.tid && p.tid.length) {
            // Load Python code from the specified tiddler
            defaultScript = store.getTiddlerText(p.tid[0]) || "";
        } else if (p.script && p.script.length) {
            defaultScript = p.script.join(" ");
        }

        // Create the UI container
        const container = document.createElement("div");
        container.innerHTML = `
            <div id="pyodideContainer">
                <!-- Input Window Box for Python code -->
                <div style="margin-bottom: 10px;">
                    <label for="pythonInput" style="font-weight: bold;">Enter Python Code:</label><br>
                    <textarea id="pythonInput" class="pythonTextarea" rows="10" cols="60" placeholder="Write your Python code here...">${defaultScript}</textarea>
                </div>
                <!-- Button to Run Code -->
                <div>
                    <button id="runCode">Run Code</button>
                </div>
                <!-- Output Window Box -->
                <div id="logOutput" style="white-space: pre-wrap; font-family: monospace; padding: 10px; background-color: #EBEEF1; margin-top: 10px; width: 470px; height: 150px; overflow-y: auto; border: 1px solid black;"></div>
            </div>
        `;
        place.appendChild(container);

        // Dynamically load Pyodide script
        const pyodideScript = document.createElement("script");
        pyodideScript.src = config.options.txtPyodidejsPath;
        pyodideScript.onload = async function() {
            // Initialize Pyodide when the script has loaded.
            let pyodide = await loadPyodide();

            // Get reference to the log output div
            const logOutputDiv = document.getElementById("logOutput");
            let outputLines = [];
            const maxLines = 10;

            // Override Python's built-in input function to prompt the user
            const originalInput = pyodide.pyimport("builtins").input;
            pyodide.pyimport("builtins").input = function(prompt) {
                const userInput = window.prompt(prompt);
                if (userInput === null) {
                    throw new Error("User cancelled the prompt.");
                }
                return userInput;
            };

            // Override the print function in Python to capture output
            const originalPrint = pyodide.pyimport("builtins").print;
            pyodide.pyimport("builtins").print = function(...args) {
                const output = args.join(" ") + "\n";
                if (outputLines.length >= maxLines) {
                    outputLines.shift();
                }
                outputLines.push(output);
                logOutputDiv.textContent = outputLines.join('');
            };

            // Evaluate Python code when the "Run Code" button is clicked
            document.getElementById("runCode").addEventListener("click", async function() {
                const pythonInput = document.getElementById("pythonInput").value.trim();
                if (!pythonInput) {
                    alert("Please enter Python code before running.");
                    return;
                }
                logOutputDiv.textContent = ""; // Clear previous output
                try {
                    await pyodide.runPythonAsync(pythonInput);
                } catch (e) {
                    logOutputDiv.textContent = "Error: " + e.message;
                }
            });
        };
        document.body.appendChild(pyodideScript);
    }
};

config.macros.runcppscript = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "script:" and "tid:".
        var p = paramString.parseParams("script tid", null, true)[0] || {};
        var scriptContent;
        if (p.tid && p.tid.length) {
            // Load C++ source from the specified tiddler.
            scriptContent = store.getTiddlerText(p.tid[0]) || "";
        } else if (p.script && p.script.length) {
            // Use the provided script parameter.
            scriptContent = p.script.join(" ");
        } else {
            // Default C++ source code.
            scriptContent = "#include <iostream> using namespace std; int main() { cout << \"Hello, World!\" << endl; return 0; }";
        }
        
        // Create the container for the C++ Script.
        const container = document.createElement("div");
        container.innerHTML = `
            <h3>Enter your C++ code:</h3>
            <textarea id="cppCodeInput" class="cppCodeArea" rows="10" cols="60" placeholder="Write your C++ code here...">${scriptContent}</textarea>
            <div><button id="executeCppCode">Run Code</button></div>
            <div>
                <h3>Output:</h3>
                <pre id="cppOutput" class="cppOutputArea" style="white-space: pre-wrap; font-family: monospace; padding: 10px; background-color: #EBEEF1; margin-top: 10px; width: 470px; height: 35px; overflow-y: auto; border: 1px solid black;"></pre>
            </div>
        `;
        place.appendChild(container);

        // Dynamically load the JSCPP library.
        const jsCppScript = document.createElement("script");
        jsCppScript.src = config.options.txtJSCPPjsPath;
        jsCppScript.onload = function() {
            if (typeof JSCPP !== 'undefined') {
                console.log("JSCPP library loaded successfully!");
            } else {
                alert("Failed to load JSCPP library.");
            }
        };
        document.body.appendChild(jsCppScript);

        // Set up the button to run the C++ code when clicked.
        document.getElementById("executeCppCode").addEventListener("click", function() {
            const cppCode = document.getElementById("cppCodeInput").value;  // Get the C++ code from the textarea.
            const outputBox = document.getElementById("cppOutput");  // Get the output box.

            // Custom configuration for JSCPP.
            const configObj = {
                maxTimeout: 5000,
                debug: false,
                unsigned_overflow: 'warn',
                stdio: {
                    write: function(s) {
                        outputBox.textContent += s;
                    }
                }
            };

            try {
                if (typeof JSCPP !== 'undefined') {
                    // Compile and execute the C++ code.
                    JSCPP.run(cppCode, "", configObj, function(result) {
                        outputBox.textContent = result;
                    });
                } else {
                    alert("JSCPP library is not ready yet.");
                }
            } catch (e) {
                outputBox.textContent = "Execution error: " + e.message;
            }
        });
    }
};

config.macros.runwebrscript = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "script:" and "tid:".
        var p = paramString.parseParams("script tid", null, true)[0] || {};
        var scriptContent = "";
        if(p.tid && p.tid.length) {
            // Load R code from the specified tiddler.
            scriptContent = store.getTiddlerText(p.tid[0]) || "";
        } else if(p.script && p.script.length) {
            scriptContent = p.script.join(" ");
        } else {
            scriptContent = "fit <- lm(mpg ~ am, data=mtcars); summary(fit)";
        }
        
        // Create container for the webR interface.
        var container = document.createElement("div");
        container.innerHTML = `
            <h3>Enter your R code:</h3>
            <textarea id="rCodeInput" rows="10" cols="60" placeholder="Write your R code here..." style="background-color:#f4f4f4;">${scriptContent}</textarea>
            <div><button id="runRButton" disabled>Loading webR...</button></div>
            <div>
                <h3>Output:</h3>
                <pre id="rOutput" style="white-space: pre-wrap; font-family: monospace; padding:10px; background-color:#EBEEF1; border:1px solid black; width:470px; height:150px; overflow-y:auto;"></pre>
            </div>
            <canvas id="rCanvas" width="1008" height="1008" style="display:none; margin:auto; width:700px;"></canvas>
        `;
        place.appendChild(container);
        
        // Dynamically load webR from its CDN (or local path if configured)
        var webrPath = config.options.txtwebrjsPath || "https://webr.r-wasm.org/latest/webr.mjs";
        var scriptEl = document.createElement("script");
        scriptEl.type = "module";
        scriptEl.innerHTML = `
            import { WebR } from "${webrPath}";
            // Initialize webR and expose it globally.
            const webR = new WebR();
            await webR.init();
            // Set the device to use the canvas for graphics.
            await webR.evalRVoid('options(device=webr::canvas)');
            // Create a shelter to capture output.
            const shelter = await new webR.Shelter();
            // Enable the Run button.
            document.getElementById("runRButton").disabled = false;
            document.getElementById("runRButton").innerText = "Run Code";
            
            // Function to run R code.
            async function runRCode() {
                document.getElementById("rCanvas").style.display = "none";
                const code = document.getElementById("rCodeInput").value;
                const result = await shelter.captureR(code, {
                    withAutoprint: true,
                    captureStreams: true,
                    captureConditions: false
                });
                try {
                    const out = result.output.filter(evt => evt.type === 'stdout' || evt.type === 'stderr')
                                              .map(evt => evt.data)
                                              .join('\\n');
                    document.getElementById("rOutput").innerText = out;
                } finally {
                    shelter.purge();
                }
            }
            document.getElementById("runRButton").addEventListener("click", runRCode);
            
            // Async loop to handle canvas events (optional)
            (async () => {
                for (;;) {
                    const output = await webR.read();
                    if (output.type === 'canvas') {
                        const canvas = document.getElementById('rCanvas');
                        if (output.data.event === 'canvasNewPage') {
                            canvas.style.display = 'block';
                            canvas.getContext('2d').clearRect(0, 0, 1008, 1008);
                        }
                        if (output.data.event === 'canvasImage') {
                            canvas.getContext('2d').drawImage(output.data.image, 0, 0);
                        }
                    }
                }
            })();
        `;
        document.body.appendChild(scriptEl);
    }
};
//}}}

//{{{
config.options.txtBrythonjsPath="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js";
config.options.txtBrythonStdLibjsPath="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js";
config.options.txtPyodidejsPath="https://cdn.jsdelivr.net/pyodide/v0.26.4/full/pyodide.js";
config.options.txtwebrjsPath="https://webr.r-wasm.org/latest/webr.mjs";
config.options.txtJSCPPjsPath="https://cdn.jsdelivr.net/gh/felixhao28/JSCPP@gh-pages/dist/JSCPP.es5.min.js";
//}}}
//{{{
var originalShowBackstage = showBackstage;
showBackstage = true; 
//}}}
YS_Extension
/***
|Name|SwiftLatexPlugin|
|Source|https://github.com/wangyenshu/SwiftLatexPlugin/blob/main/SwiftLatexPlugin.js|
|Author|Yanshu Wang|
|Version|0.1|
|Type|plugin|
|Description|A TiddlyWiki Classic plugin to compile latex using swiftlatex.|
|License|MIT|

!Usage
Put the js and wasm files downloaded from https://github.com/SwiftLaTeX/SwiftLaTeX/releases in the root folder.
{{{
<<PdfTeX script:\documentclass{article}\begin{document}\section{Hello, World!}\end{document}>>
<<PdfTeX tid:Document>>
<<XeTeX script:\documentclass{article}\begin{document}\section{Hello, XeTeX!}\end{document}>>
<<XeTeX tid:Document>>
}}}
Notice that due to restrictions of ace editor, you can only use use one of these two macros. For example, once you have used PdfTex macro, running another macro will still use PdfTex Engine.
!Demo
<<PdfTeX>>
!Todo
- Support multiple ace editor and using PdfTeX and XeTeX in the same page.
- Support custom image path and bibtex path
- Support input of multiple lines

!Credit
https://www.swiftlatex.com/
***/
//{{{
config.macros.PdfTeX = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "script" and "tid"
        var p = paramString.parseParams("script tid", null, true)[0] || {};
        var scriptContent;
        if (p.tid && p.tid.length) {
            // Load LaTeX source from the specified tiddler.
            scriptContent = store.getTiddlerText(p.tid[0]) || "";
        } else if (p.script && p.script.length) {
            scriptContent = p.script.join(" ");
        } else {
            scriptContent = "\\documentclass{article}\n\\begin{document}\n\\section{Hello, World!}\nHello, PdfTeX!\n\\end{document}";
        }
            
        // Create the UI container with unique IDs.
        var container = document.createElement("div");
        container.innerHTML = ""
          + "<div id='pdftex_container' style='margin:10px; padding:10px; border:1px solid #ccc;'>"
          + "  <h3>PdfTeX Editor</h3>"
          + "  <div id='pdftex_editor' style='width:100%; height:400px; background-color:#272822;'>" + scriptContent + "</div>"
          + "  <br><button id='pdftex_compilebtn' disabled>Initializing</button>"
          + "  <br><h4>Engine Log:</h4>"
          + "  <pre id='pdftex_log' style='white-space: pre-wrap; font-family: monospace; padding:10px; background-color:#EBEEF1; border:1px solid #ccc; width:80%; height:150px; overflow-y:auto;'></pre>"
          + "  <br><div id='pdftex_pdfbox'></div>"
          + "</div>";
        place.appendChild(container);
            
        // Load Ace Editor from CDN if not already loaded.
        if (!document.getElementById("ace_script")) {
            var aceScript = document.createElement("script");
            aceScript.id = "ace_script";
            aceScript.src = "https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.14/ace.js";
            document.head.appendChild(aceScript);
        }
            
        // Load PdfTeXEngine.js if not already loaded.
        if (!document.getElementById("pdflatex_script")) {
            var pdfScript = document.createElement("script");
            pdfScript.id = "pdflatex_script";
            pdfScript.src = "PdfTeXEngine.js"; // Adjust path as needed.
            document.body.appendChild(pdfScript);
        }
            
        // Utility: wait until a condition is met.
        function waitFor(conditionFunc, callback, interval) {
            interval = interval || 100;
            if (conditionFunc()) {
                callback();
            } else {
                setTimeout(function(){ waitFor(conditionFunc, callback, interval); }, interval);
            }
        }
            
        // Wait for both Ace and PdfTeXEngine to be loaded.
        waitFor(function(){ 
            return (typeof ace !== "undefined") && 
                   (typeof PdfTeXEngine !== "undefined"); 
        }, initEngine);
            
        function initEngine(){
            // Initialize Ace Editor on the "pdftex_editor" element.
            var editor = ace.edit("pdftex_editor");
            editor.setTheme("ace/theme/monokai");
            editor.session.setMode("ace/mode/latex");
            editor.session.setUseWrapMode(true);
            editor.setFontSize(18);
                
            var pdftexCompileBtn = document.getElementById("pdftex_compilebtn");
            var pdftexLog = document.getElementById("pdftex_log");
            var pdftexPdfBox = document.getElementById("pdftex_pdfbox");
                
            // Create an instance of PdfTeXEngine.
            var engine = new PdfTeXEngine();
                
            async function init() {
                await engine.loadEngine();
                pdftexCompileBtn.innerHTML = "Compile";
                pdftexCompileBtn.disabled = false;
            }
            
            async function compile() {
                if(!engine.isReady()){
                    console.log("Engine not ready yet");
                    return;
                }
                pdftexCompileBtn.disabled = true;
                pdftexCompileBtn.innerHTML = "Compiling...";

                /*    
                try {
                    // Optionally, fetch an image asset.
                    let downloadReq = await fetch("assets/troll.jpg");
                    let imageBlob = await downloadReq.arrayBuffer();
                    engine.writeMemFSFile("troll.jpg", new Uint8Array(imageBlob));
                } catch(e) {
                    console.warn("Could not load image: ", e);
                }
                */
                    
                engine.writeMemFSFile("main.tex", editor.getValue());
                engine.setEngineMainFile("main.tex");
                    
                let r = await engine.compileLaTeX();
                pdftexLog.innerHTML = r.log;
                pdftexCompileBtn.innerHTML = "Compile";
                pdftexCompileBtn.disabled = false;
                if (r.status === 0) {
                    const pdfblob = new Blob([r.pdf], { type: "application/pdf" });
                    const objectURL = URL.createObjectURL(pdfblob);
                    pdftexPdfBox.innerHTML = `<embed src="${objectURL}" width="100%" height="400px" type="application/pdf">`;
                    setTimeout(function(){ URL.revokeObjectURL(objectURL); }, 30000);
                }
            }
            
            pdftexCompileBtn.addEventListener("click", compile);
            init();
        }
    }
};

config.macros.XeTeX = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "script:" and "tid:".
        // If "tid:" is provided, load content from that tiddler.
        var p = paramString.parseParams("script tid", null, true)[0] || {};
        var scriptContent;
        if(p.tid && p.tid.length) {
            scriptContent = store.getTiddlerText(p.tid[0]) || "";
        } else if(p.script && p.script.length) {
            scriptContent = p.script.join(" ");
        } else {
            scriptContent = "%% Sample XeTeX document\n\\documentclass{article}\n\\begin{document}\nHello, XeTeX!\n\\end{document}";
        }
            
        // Create the UI container with unique IDs.
        var container = document.createElement("div");
        container.innerHTML = ""
          + "<div id='xetex_container' style='margin:10px; padding:10px; border:1px solid #ccc;'>"
          + "  <h3>XeTeX Editor</h3>"
          + "  <div id='xetex_editor' style='width:100%; height:400px; background-color:#272822; color:#F8F8F2;'>"
          + scriptContent + "</div>"
          + "  <br><button id='xetex_compilebtn' disabled>Initializing</button>"
          + "  <br><h4>Engine Log:</h4>"
          + "  <pre id='xetex_console' style='white-space: pre-wrap; font-family: monospace; padding:10px; background-color:#EBEEF1; border:1px solid #ccc; width:80%; height:150px; overflow-y:auto;'></pre>"
          + "  <br><div id='xetex_pdfbox'></div>"
          + "</div>";
        place.appendChild(container);
            
        // Load Ace Editor from CDN if not already loaded.
        if (!document.getElementById("ace_script")) {
            var aceScript = document.createElement("script");
            aceScript.id = "ace_script";
            aceScript.src = "https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.14/ace.js";
            document.head.appendChild(aceScript);
        }
            
        // Load XeTeXEngine.js if not already loaded.
        if (!document.getElementById("xetex_engine_script")) {
            var xetexScript = document.createElement("script");
            xetexScript.id = "xetex_engine_script";
            xetexScript.src = "XeTeXEngine.js"; // Adjust path as needed.
            document.body.appendChild(xetexScript);
        }
        // Load DvipdfmxEngine.js if not already loaded.
        if (!document.getElementById("dvipdfmx_script")) {
            var dvipdfmxScript = document.createElement("script");
            dvipdfmxScript.id = "dvipdfmx_script";
            dvipdfmxScript.src = "DvipdfmxEngine.js"; // Adjust path as needed.
            document.body.appendChild(dvipdfmxScript);
        }
            
        // Utility: wait until a condition is met.
        function waitFor(conditionFunc, callback, interval) {
            interval = interval || 100;
            if (conditionFunc()) {
                callback();
            } else {
                setTimeout(function(){ waitFor(conditionFunc, callback, interval); }, interval);
            }
        }
            
        // Wait for Ace and both XeTeX engines to be loaded.
        waitFor(function(){ 
            return (typeof ace !== "undefined") && 
                   (typeof XeTeXEngine !== "undefined") && 
                   (typeof DvipdfmxEngine !== "undefined"); 
        }, initEngine);
            
        function initEngine(){
            // Initialize Ace Editor on the "xetex_editor" element.
            var editor = ace.edit("xetex_editor");
            editor.setTheme("ace/theme/monokai");
            editor.session.setMode("ace/mode/latex");
            editor.session.setUseWrapMode(true);
            editor.setFontSize(18);
                
            var xetexCompileBtn = document.getElementById("xetex_compilebtn");
            var xetexConsole = document.getElementById("xetex_console");
            var xetexPdfBox = document.getElementById("xetex_pdfbox");
                
            // Create engine instances.
            var xetexEn = new XeTeXEngine();
            var dvipdfmxEn = new DvipdfmxEngine();
                
            async function init() {
                await xetexEn.loadEngine();
                await dvipdfmxEn.loadEngine();
                xetexCompileBtn.innerHTML = "Compile";
                xetexCompileBtn.disabled = false;
            }
            
            async function compile() {
                if (!xetexEn.isReady() || !dvipdfmxEn.isReady()) {
                    console.log("Engine not ready yet");
                    return;
                }
                xetexCompileBtn.disabled = true;
                xetexCompileBtn.innerHTML = "Compiling...";
                    
                let imageDownloadReq, imageBlob, bibDownloadReq, bibBlob;
                /*
                try {
                    imageDownloadReq = await fetch('assets/troll.jpg');
                    imageBlob = await imageDownloadReq.arrayBuffer();
                    bibDownloadReq = await fetch('assets/sample-base.bib');
                    bibBlob = await bibDownloadReq.arrayBuffer();
                    xetexEn.writeMemFSFile("troll.jpg", new Uint8Array(imageBlob));
                    xetexEn.writeMemFSFile("sample-base.bib", new Uint8Array(bibBlob));
                } catch(e) {
                    console.warn("Asset download failed: ", e);
                }
                */    
                xetexEn.writeMemFSFile("main.tex", editor.getValue());
                xetexEn.setEngineMainFile("main.tex");
                    
                let r = await xetexEn.compileLaTeX();
                xetexConsole.innerHTML = r.log;
                xetexCompileBtn.innerHTML = "Compile";
                xetexCompileBtn.disabled = false;
                    
                if (r.status === 0) {
                    dvipdfmxEn.writeMemFSFile("main.xdv", r.pdf);
                    dvipdfmxEn.setEngineMainFile("main.xdv");
                    // Re-upload image if needed.
                    // dvipdfmxEn.writeMemFSFile("troll.jpg", new Uint8Array(imageBlob));
                    let r1 = await dvipdfmxEn.compilePDF();
                    const pdfblob = new Blob([r1.pdf], { type: "application/pdf" });
                    const objectURL = URL.createObjectURL(pdfblob);
                    xetexPdfBox.innerHTML = `<embed src="${objectURL}" width="100%" height="400px" type="application/pdf">`;
                    setTimeout(function(){ URL.revokeObjectURL(objectURL); }, 30000);
                }
            }
            
            xetexCompileBtn.addEventListener("click", compile);
            init();
        }
    }
};
//}}}

	
<!doctype html>
<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->
<!-- saved from url=(0021)https://tiddlywiki.com -->
<html lang="en-GB">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<!--~~ Raw markup for the top of the head section ~~-->

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<meta name="application-name" content="TiddlyWiki" />
<meta name="generator" content="TiddlyWiki" />
<meta name="tiddlywiki-version" content="5.3.7" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="mobile-web-app-capable" content="yes"/>
<meta name="format-detection" content="telephone=no" />
<meta name="copyright" content="TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)

Copyright (c) 2004-2007, Jeremy Ruston
Copyright (c) 2007-2025, UnaMesa Association
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." />
<link id="faviconLink" rel="shortcut icon" href="favicon.ico">
<title>My TiddlyWiki — a non-linear personal web notebook</title>
<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->

<!--~~ Raw markup ~~-->



</head>
<body class="tc-body">
<!--~~ Raw markup for the top of the body section ~~-->

<!--~~ Static styles ~~-->
<div id="styleArea">
<style data-tiddler-title="$:/boot/boot.css" data-tiddler-type="text/css" type="text/css">/*
Basic styles used before we boot up the parsing engine
*/

/*
Error message and password prompt
*/

.tc-error-form {
	font-family: sans-serif;
	color: #fff;
	z-index: 20000;
	position: fixed;
	background-color: rgb(255, 75, 75);
	border: 8px solid rgb(255, 0, 0);
	border-radius: 8px;
	width: 50%;
	margin-left: 25%;
	margin-top: 4em;
	padding: 0 2em 1em 2em;
}

.tc-error-form h1 {
	text-align: center;
}

.tc-error-prompt {
	text-align: center;
	color: #000;
}

.tc-error-message {
	overflow: auto;
	max-height: 40em;
	padding-right: 1em;
	margin: 1em 0;
	white-space: pre-line;
}

.tc-password-wrapper {
    font-family: sans-serif;
	z-index: 20000;
	position: fixed;
	text-align: center;
	width: 200px;
	top: 4em;
	left: 50%;
	margin-left: -144px; /* - width/2 - paddingHorz/2 - border */
	padding: 16px 16px 16px 16px;
	border-radius: 8px;
}

.tc-password-wrapper {
	color: #000;
	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
	background-color: rgb(197, 235, 183);
	border: 8px solid rgb(164, 197, 152);
}

.tc-password-wrapper form {
	text-align: left;
}

.tc-password-wrapper h1 {
	font-size: 16px;
	line-height: 20px;
	padding-bottom: 16px;
}

.tc-password-wrapper input {
	width: 100%;
}
</style>
</div>
<!--~~ Static content for Google and browsers without JavaScript ~~-->
<noscript>
<div id="splashArea">


<p>This <a class="tc-tiddlylink-external" href="https://tiddlywiki.com" rel="noopener noreferrer" target="_blank">TiddlyWiki</a> contains the following tiddlers:</p><p><ul>

<li>$:/.tb/modules/startup/hide-sidebar.js</li>

<li>$:/config/HideSidebarOnStartup</li>

<li>$:/config/SaveWikiButton/Template</li>

<li>$:/core/save/all-external-js</li>

<li>$:/core/save/offline-external-js</li>

<li>$:/core/save/offline-external-js/coreURL</li>

<li>$:/DefaultTiddlers</li>

<li>$:/Import</li>

<li>$:/isEncrypted</li>

<li>$:/state/http-requests</li>

<li>$:/state/tab/sidebar--595412856</li>

<li>$:/status/RequireReloadDueToPluginChange</li>

<li>$:/StoryList</li>

<li>$:/themes/tiddlywiki/snowwhite</li>

<li>$:/themes/tiddlywiki/vanilla</li>

</ul>
</p>



<style>
.tc-remove-when-wiki-loaded {display: none;}
</style>

</div>
</noscript>
<!--~~ Ordinary tiddlers ~~-->
<script class="tiddlywiki-tiddler-store" type="application/json">[
{"text":"/*\\\ntitle: $:/.tb/modules/startup/hide-sidebar.js\ntype: application/javascript\nmodule-type: startup\ncreated: 20151010151732122\ncreator: Tobias Beer\nmodified: 20151010151750739\n\nHides the sidebar on startup when the config tiddler [[$:/config/hide-sidebar-on-startup]] contains \"yes\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"hide-sidebar-on-startup\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\tvar conf = $tw.wiki.getTiddler(\"$:/config/HideSidebarOnStartup\"),\n\t\tvalue = (conf ? conf.getFieldString(\"text\") : \"\").toLowerCase(),\n\t\tstate = value == \"yes\" ? \"no\" : \"yes\";\n\t$tw.wiki.setText(\"$:/state/sidebar\", \"text\", undefined, state);\n};\n\n})();","bag":"default","revision":"0","type":"application/javascript","title":"$:/.tb/modules/startup/hide-sidebar.js","module-type":"startup","modified":"20151010151750739","creator":"Tobias Beer","created":"20151010151732122"},
{"created":"20151007165524815","text":"yes","bag":"default","revision":"0","type":"text/vnd.tiddlywiki","title":"$:/config/HideSidebarOnStartup","tags":"","modified":"20250720031810373","creator":"Tobias Beer"},
{"title":"$:/config/SaveWikiButton/Template","text":"$:/core/save/offline-external-js"},
{"created":"20250720025956603","text":"\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n\\define defaultCoreURL() %24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\n\u003C$let coreURL={{{ [{$:/core/save/offline-external-js/coreURL}else\u003CdefaultCoreURL>] }}}>\n\t{{$:/core/templates/tiddlywiki5-external-js.html}}\n\u003C/$let>\n","tags":"","title":"$:/core/save/all-external-js","modified":"20250720030004656"},
{"created":"20250720030006199","text":"\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n\\define defaultCoreURL() tiddlywikicore-$(version)$.js\n\u003C$let coreURL={{{ [{$:/core/save/offline-external-js/coreURL}else\u003CdefaultCoreURL>] }}}>\n\t{{$:/core/templates/tiddlywiki5-external-js.html}}\n\u003C/$let>\n","tags":"","title":"$:/core/save/offline-external-js","modified":"20250720030015176"},
{"created":"20250720030024153","text":"https://cdn.jsdelivr.net/gh/wangyenshu/YS_Extension@main/tiddlywikicore-5.3.7.js","tags":"","title":"$:/core/save/offline-external-js/coreURL","modified":"20250720031227290"},
{"created":"20250720024232227","title":"$:/DefaultTiddlers","text":"TW5Sandbox\n","modified":"20250720024304382"},
{"title":"$:/Import","text":"The following tiddlers were imported:\n\n# [[$:/config/HideSidebarOnStartup]]","status":"complete"},
{"title":"$:/isEncrypted","text":"no"},
{"title":"$:/state/http-requests","text":"0"},
{"created":"20250720031205575","title":"$:/state/tab/sidebar--595412856","text":"$:/core/ui/SideBar/Open","modified":"20250720031207592"},
{"title":"$:/status/RequireReloadDueToPluginChange","text":"no"},
{"title":"$:/StoryList","created":"20250720031804743","text":"","list":"$:/Import $:/config/HideSidebarOnStartup TW5Sandbox","modified":"20250720031804743"},
{"title":"$:/themes/tiddlywiki/snowwhite","name":"Snow White","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Emphasises individual tiddlers","dependents":"$:/themes/tiddlywiki/vanilla","plugin-priority":"0","version":"5.3.7","type":"application/json","text":"{\"tiddlers\":{\"$:/themes/tiddlywiki/snowwhite/base\":{\"title\":\"$:/themes/tiddlywiki/snowwhite/base\",\"tags\":\"[[$:/tags/Stylesheet]]\",\"text\":\"\\\\define sidebarbreakpoint-minus-one()\\n\u003C$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-sidebar-header {\\n\\ttext-shadow: 0 1px 0 \u003C\u003Ccolour sidebar-foreground-shadow>>;\\n}\\n\\n.tc-tiddler-info {\\n\\t\u003C\u003Cbox-shadow \\\"inset 1px 2px 3px rgba(0,0,0,0.1)\\\">>\\n}\\n\\n@media screen {\\n\\t.tc-tiddler-frame {\\n\\t\\t\u003C\u003Cbox-shadow \\\"1px 1px 5px rgba(0, 0, 0, 0.3)\\\">>\\n\\t}\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\t\u003C\u003Cbox-shadow none>>\\n\\t}\\n}\\n\\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\\n\\t\u003C\u003Ctransition \\\"fill 150ms ease-in-out\\\">>\\n}\\n\\n.tc-tiddler-controls button.tc-selected,\\n.tc-page-controls button.tc-selected {\\n\\t\u003C\u003Cfilter \\\"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\\\">>\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame select.tc-edit-texteditor {\\n\\t\u003C\u003Cbox-shadow \\\"inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-edit-tags {\\n\\t\u003C\u003Cbox-shadow \\\"inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\\n\\t\u003C\u003Cbox-shadow \\\"none\\\">>\\n\\tborder: none;\\n\\toutline: none;\\n}\\n\\ntextarea.tc-edit-texteditor {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\ncanvas.tc-edit-bitmapeditor  {\\n\\t\u003C\u003Cbox-shadow \\\"2px 2px 5px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-drop-down {\\n\\tborder-radius: 4px;\\n\\t\u003C\u003Cbox-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-block-dropdown {\\n\\tborder-radius: 4px;\\n\\t\u003C\u003Cbox-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-modal {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n}\\n\\n.tc-modal-footer {\\n\\tborder-radius: 0 0 6px 6px;\\n\\t\u003C\u003Cbox-shadow \\\"inset 0 1px 0 #fff\\\">>;\\n}\\n\\n\\n.tc-alert {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\"0 3px 7px rgba(0,0,0,0.6)\\\">>\\n}\\n\\n.tc-notification {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n\\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\\n}\\n\\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\\n\\tborder-top: none;\\n\\theight: 1px;\\n\\t\u003C\u003Cbackground-linear-gradient \\\"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\\\">>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\t\u003C\u003Cbackground-linear-gradient \\\"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\\\">>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\t\u003C\u003Cbackground-linear-gradient \\\"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\\\">>\\n}\\n\\n.tc-message-box img {\\n\\t\u003C\u003Cbox-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\\n.tc-plugin-info {\\n\\t\u003C\u003Cbox-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\"}}}"},
{"title":"$:/themes/tiddlywiki/vanilla","name":"Vanilla","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Basic theme","plugin-priority":"0","version":"5.3.7","dependents":"","type":"application/json","text":"{\"tiddlers\":{\"$:/themes/tiddlywiki/vanilla/themetweaks\":{\"title\":\"$:/themes/tiddlywiki/vanilla/themetweaks\",\"tags\":\"$:/tags/ControlPanel/Appearance\",\"caption\":\"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\"text\":\"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\n\\\\define replacement-text()\\n[img[$(imageTitle)$]]\\n\\\\end\\n\\n\\\\define backgroundimage-dropdown()\\n\u003Cdiv class=\\\"tc-drop-down-wrapper\\\">\\n\u003C$set name=\\\"state\\\" value=\u003C\u003Cqualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">>>\\n\u003C$button popup=\u003C\u003Cstate>> class=\\\"tc-btn-invisible tc-btn-dropdown\\\">{{$:/core/images/down-arrow}}\u003C/$button>\\n\u003C$reveal state=\u003C\u003Cstate>> type=\\\"popup\\\" position=\\\"belowleft\\\" text=\\\"\\\" default=\\\"\\\" class=\\\"tc-popup-keep\\\">\\n\u003Cdiv class=\\\"tc-drop-down\\\" style=\\\"text-align:center;\\\">\\n\u003C$macrocall $name=\\\"image-picker\\\" actions=\\\"\\\"\\\"\\n\\n\u003C$action-setfield\\n\\t$tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\"\\n\\t$value=\u003C\u003CimageTitle>>\\n/>\\n\\n\u003C$action-deletetiddler $tiddler=\u003C\u003Cstate>>/>\\n\\n\\\"\\\"\\\"/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define backgroundimageattachment-dropdown()\\n\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\" default=\\\"scroll\\\">\\n\u003Coption value=\\\"scroll\\\">\u003C\u003Clingo Settings/BackgroundImageAttachment/Scroll>>\u003C/option>\\n\u003Coption value=\\\"fixed\\\">\u003C\u003Clingo Settings/BackgroundImageAttachment/Fixed>>\u003C/option>\\n\u003C/$select>\\n\\\\end\\n\\n\\\\define backgroundimagesize-dropdown()\\n\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\" default=\\\"scroll\\\">\\n\u003Coption value=\\\"auto\\\">\u003C\u003Clingo Settings/BackgroundImageSize/Auto>>\u003C/option>\\n\u003Coption value=\\\"cover\\\">\u003C\u003Clingo Settings/BackgroundImageSize/Cover>>\u003C/option>\\n\u003Coption value=\\\"contain\\\">\u003C\u003Clingo Settings/BackgroundImageSize/Contain>>\u003C/option>\\n\u003C/$select>\\n\\\\end\\n\\n\u003C\u003Clingo ThemeTweaks/Hint>>\\n\\n! \u003C\u003Clingo Options>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\">\u003C\u003Clingo Options/SidebarLayout>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\">\u003Coption value=\\\"fixed-fluid\\\">\u003C\u003Clingo Options/SidebarLayout/Fixed-Fluid>>\u003C/option>\u003Coption value=\\\"fluid-fixed\\\">\u003C\u003Clingo Options/SidebarLayout/Fluid-Fixed>>\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\">\u003C\u003Clingo Options/StickyTitles>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Options/StickyTitles/Hint>>// |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003C\u003Clingo Options/CodeWrapping>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003Coption value=\\\"pre\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"pre-wrap\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n\\n! \u003C\u003Clingo Settings>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\">\u003C\u003Clingo Settings/FontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\">\u003C\u003Clingo Settings/CodeFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\">\u003C\u003Clingo Settings/EditorFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\">\u003C\u003Clingo Settings/BackgroundImage>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\u003C\u003Cbackgroundimage-dropdown>> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\">\u003C\u003Clingo Settings/BackgroundImageAttachment>>\u003C/$link> |\u003C\u003Cbackgroundimageattachment-dropdown>> | |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\">\u003C\u003Clingo Settings/BackgroundImageSize>>\u003C/$link> |\u003C\u003Cbackgroundimagesize-dropdown>> | |\\n\\n! \u003C\u003Clingo Metrics>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\">\u003C\u003Clingo Metrics/FontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\">\u003C\u003Clingo Metrics/LineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\">\u003C\u003Clingo Metrics/BodyFontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\">\u003C\u003Clingo Metrics/BodyLineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\">\u003C\u003Clingo Metrics/StoryLeft>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryLeft/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storytop\\\">\u003C\u003Clingo Metrics/StoryTop>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryTop/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storytop\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyright\\\">\u003C\u003Clingo Metrics/StoryRight>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryRight/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyright\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\">\u003C\u003Clingo Metrics/StoryWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\">\u003C\u003Clingo Metrics/TiddlerWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/TiddlerWidth/Hint>>//\u003Cbr> |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\">\u003C\u003Clingo Metrics/SidebarBreakpoint>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarBreakpoint/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\">\u003C\u003Clingo Metrics/SidebarWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n\"},\"$:/themes/tiddlywiki/vanilla/base\":{\"title\":\"$:/themes/tiddlywiki/vanilla/base\",\"tags\":\"[[$:/tags/Stylesheet]]\",\"list-before\":\"\",\"code-body\":\"yes\",\"text\":\"\\\\define custom-background-datauri()\\n\u003C$set name=\\\"background\\\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\\n\u003C$list filter=\\\"[\u003Cbackground>is[image]]\\\">\\n`background: url(`\\n\u003C$list filter=\\\"[\u003Cbackground>!has[_canonical_uri]]\\\">\\n`\\\"`\u003C$macrocall $name=\\\"datauri\\\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\\\"`\\n\u003C/$list>\\n\u003C$list filter=\\\"[\u003Cbackground>has[_canonical_uri]]\\\">\\n`\\\"`\u003C$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\\\"_canonical_uri\\\"/>`\\\"`\\n\u003C/$list>\\n`) center center;`\\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\\n\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define sidebarbreakpoint()\\n\u003C$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\\n\\\\end\\n\\n\\\\define sidebarbreakpoint-minus-one()\\n\u003C$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\\n\\\\end\\n\\n\\\\define if-fluid-fixed(text,hiddenSidebarText)\\n\u003C$reveal state=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\" type=\\\"match\\\" text=\\\"fluid-fixed\\\">\\n$text$\\n\u003C$reveal state=\\\"$:/state/sidebar\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"yes\\\">\\n$hiddenSidebarText$\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define if-editor-height-fixed(then,else)\\n\u003C$reveal state=\\\"$:/config/TextEditor/EditorHeight/Mode\\\" type=\\\"match\\\" text=\\\"fixed\\\">\\n$then$\\n\u003C/$reveal>\\n\u003C$reveal state=\\\"$:/config/TextEditor/EditorHeight/Mode\\\" type=\\\"match\\\" text=\\\"auto\\\">\\n$else$\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define set-type-selector-min-width()\\n\u003C$set name=\\\"typeLength\\\" value={{{ [all[shadows+tiddlers]prefix[$:/language/Docs/Types/]get[name]length[]maxall[]] }}}>\\n\\n\\t.tc-type-selector-dropdown-wrapper {\\n\\t\\tmin-width: calc(\u003C\u003CtypeLength>>ch + 4em);\\n\\t}\\n\\n\\t.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {\\n\\t\\tmin-width: \u003C\u003CtypeLength>>ch;\\n\\t}\\n\\n\u003C/$set>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n/*\\n** Start with the normalize CSS reset, and then belay some of its effects\\n*/\\n\\n{{$:/themes/tiddlywiki/vanilla/reset}}\\n\\ninput[type=\\\"search\\\"] {\\n\\toutline-offset: initial;\\n}\\n\\nbutton:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {\\n\\toutline: 2px solid \u003C\u003Ccolour primary>>;\\n\\toutline-offset: -2px;\\n\\tborder-radius: 0.25em;\\n}\\n\\nbutton:-moz-focusring, input:-moz-focusring, textarea:-moz-focusring, select:-moz-focusring {\\n\\toutline: 2px solid \u003C\u003Ccolour primary>>;\\n\\toutline-offset: -2px;\\n\\tborder-radius: 0.25em;\\n}\\n\\n/*\\n** Button default styles. Makes them look consistent for all browsers\\n*/\\nhtml button {\\n\\tline-height: 1.2;\\n\\tcolor: \u003C\u003Ccolour button-foreground>>;\\n\\tfill: \u003C\u003Ccolour button-foreground>>;\\n\\tbackground: \u003C\u003Ccolour button-background>>;\\n\\tborder-color: \u003C\u003Ccolour button-border>>;\\n\\tcursor: pointer;\\n}\\n\\nbutton:disabled {\\n\\tcursor: default;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\nbutton:disabled svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n/*\\n** Basic element styles\\n*/\\n\\nhtml, body {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\\n\\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\\n\\t-webkit-font-smoothing: antialiased;\\n\\t-moz-osx-font-smoothing: grayscale;\\n}\\n\\nhtml:-webkit-full-screen {\\n\\tbackground-color: \u003C\u003Ccolour page-background>>;\\n}\\n\\nbody.tc-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\\n\\tword-wrap: break-word;\\n\\t\u003C\u003Ccustom-background-datauri>>\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour page-background>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n\u003C\u003Cif-background-attachment \\\"\\\"\\\"\\n\\nbody.tc-body {\\n\\tbackground-color: transparent;\\n}\\n\\n\\\"\\\"\\\">>\\n\\n/**\\n * Correct the font size and margin on `h1` elements within `section` and\\n * `article` contexts in Chrome, Firefox, and Safari.\\n */\\n\\nh1 {\\n\\tfont-size: 2em;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n\\tline-height: 1.2;\\n\\tfont-weight: normal;\\n}\\n\\npre {\\n\\tdisplay: block;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\tword-break: normal;\\n\\tword-wrap: break-word;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tbackground-color: \u003C\u003Ccolour pre-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour pre-border>>;\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\ncode {\\n\\tcolor: \u003C\u003Ccolour code-foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour code-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour code-border>>;\\n\\twhite-space: pre-wrap;\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\nblockquote {\\n\\tborder-left: 5px solid \u003C\u003Ccolour blockquote-bar>>;\\n\\tmargin-left: 25px;\\n\\tpadding-left: 10px;\\n\\tquotes: \\\"\\\\201C\\\"\\\"\\\\201D\\\"\\\"\\\\2018\\\"\\\"\\\\2019\\\";\\n}\\n\\nblockquote > div {\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n}\\n\\nblockquote.tc-big-quote {\\n\\tfont-family: Georgia, serif;\\n\\tposition: relative;\\n\\tbackground: \u003C\u003Ccolour pre-background>>;\\n\\tborder-left: none;\\n\\tmargin-left: 50px;\\n\\tmargin-right: 50px;\\n\\tpadding: 10px;\\n\\tborder-radius: 8px;\\n}\\n\\nblockquote.tc-big-quote cite:before {\\n\\tcontent: \\\"\\\\2014 \\\\2009\\\";\\n}\\n\\nblockquote.tc-big-quote:before {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: \u003C\u003Ccolour blockquote-bar>>;\\n\\tcontent: open-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n\\tleft: -50px;\\n\\ttop: 42px;\\n}\\n\\nblockquote.tc-big-quote:after {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: \u003C\u003Ccolour blockquote-bar>>;\\n\\tcontent: close-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n\\tright: -80px;\\n\\tbottom: -20px;\\n}\\n\\ndl dt {\\n\\tfont-weight: bold;\\n\\tmargin-top: 6px;\\n}\\n\\ntextarea,\\ninput[type=text],\\ninput[type=search],\\ninput[type=number],\\ninput[type=password],\\ninput[type=email],\\ninput[type=tel],\\ninput[type=url],\\ninput[type=\\\"\\\"],\\ninput:not([type]) {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\ninput[type=\\\"checkbox\\\"] {\\n\\tvertical-align: middle;\\n}\\n\\ninput[type=\\\"search\\\"]::-webkit-search-decoration,\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button,\\ninput[type=\\\"search\\\"]::-webkit-search-results-button,\\ninput[type=\\\"search\\\"]::-webkit-search-results-decoration {\\n\\t-webkit-appearance:none;\\n}\\n\\n.tc-muted {\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\nsvg.tc-image-button {\\n\\tpadding: 0px 1px 1px 0px;\\n}\\n\\n.tc-icon-wrapper > svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\nkbd {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px 5px;\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tvertical-align: middle;\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n\\tborder: solid 1px \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-bottom-color: \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: inset 0 -1px 0 \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n::selection {\\n\\tbackground-color: Highlight;\\n\\tcolor: HighlightText;\\n\\tbackground-color: \u003C\u003Ccolour selection-background>>;\\n\\tcolor: \u003C\u003Ccolour selection-foreground>>;\\n}\\n\\n.tc-inline-style {\\n\\tbackground: \u003C\u003Ccolour highlight-background>>;\\n\\tcolor: \u003C\u003Ccolour highlight-foreground>>;\\n}\\n\\n/* Markdown uses mark element to highlight */\\n\\nmark {\\n\\tbackground: \u003C\u003Ccolour highlight-background>>;\\n\\tcolor: \u003C\u003Ccolour highlight-foreground>>;\\n}\\n\\nform.tc-form-inline {\\n\\tdisplay: inline;\\n}\\n\\n/*\\nMarkdown likes putting code elements inside pre elements\\n*/\\npre > code {\\n\\tdisplay: block;\\n\\tpadding: 0.5em;\\n\\tborder: none;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tbackground-color: inherit;\\n\\tcolor: inherit;\\n\\toverflow-x: auto;\\n}\\n\\n/*\\nTable defaults\\n*/\\n\\ntable {\\n\\tborder: 1px solid \u003C\u003Ccolour table-border>>;\\n\\twidth: auto;\\n\\tmax-width: 100%;\\n\\tcaption-side: bottom;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\t/* next 2 elements needed, since normalize 8.0.1 */\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th, table td {\\n\\tpadding: 0 7px 0 7px;\\n\\tborder-top: 1px solid \u003C\u003Ccolour table-border>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour table-border>>;\\n}\\n\\ntable thead tr td, table th {\\n\\tbackground-color: \u003C\u003Ccolour table-header-background>>;\\n\\tfont-weight: bold;\\n}\\n\\ntable tfoot tr td {\\n\\tbackground-color: \u003C\u003Ccolour table-footer-background>>;\\n}\\n\\n/*\\nTable utility classes\\n*/\\n\\n/* Remove borders from table as used in eg: GettingStarted*/\\n.tc-table-no-border,\\n.tc-table-no-border th,\\n.tc-table-no-border td {\\n\\tborder: initial;\\n}\\n\\n/* First column in table width will fit to text.*/\\n/* This rule makes most sense with tc-first-link-nowrap*/\\n.tc-first-col-min-width td:nth-child(1) {\\n\\twidth: 1%;\\n}\\n\\n/*\\n** Utility classes work well with tables but also for other containers\\n*/\\n\\n/* First link A element will not wrap */\\n.tc-first-link-nowrap:first-of-type a {\\n\\twhite-space: nowrap;\\n}\\n\\n/* Move the table to the center of the container */\\n.tc-center {\\n\\tmargin-left: auto;\\n\\tmargin-right: auto;\\n}\\n\\n.tc-max-width {\\n\\twidth: 100%;\\n}\\n\\n.tc-max-width-80 {\\n\\tmax-width: 80%;\\n}\\n\\n/* Allow input and textarea to look like the ControlPanel inputs */\\n.tc-edit-max-width input,\\n.tc-edit-max-width textarea {\\n\\twidth: 100%;\\n\\tpadding: 3px;\\n}\\n\\n/*\\nCSV parser plugin\\n*/\\n\\n.tc-csv-table {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-csv-table th,\\n.tc-csv-table td {\\n\\twhite-space: pre-line;\\n}\\n\\n/*\\nTiddler frame in story river\\n*/\\n\\n.tc-tiddler-frame img,\\n.tc-tiddler-frame svg,\\n.tc-tiddler-frame canvas,\\n.tc-tiddler-frame embed,\\n.tc-tiddler-frame iframe {\\n\\tmax-width: 100%;\\n}\\n\\n.tc-tiddler-body > embed,\\n.tc-tiddler-body > iframe {\\n\\twidth: 100%;\\n\\theight: 600px;\\n}\\n\\n:root {\\n\\tcolor-scheme: {{{ [{$:/palette}get[color-scheme]] ~light }}};\\n}\\n\\n/*\\n** Links\\n*/\\n\\nbutton.tc-tiddlylink,\\na.tc-tiddlylink {\\n\\ttext-decoration: none;\\n\\tfont-weight: 500;\\n\\tcolor: \u003C\u003Ccolour tiddler-link-foreground>>;\\n\\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\\n\\t-webkit-touch-callout: none; /* Prevents long presses from bringing up a link preview */\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink {\\n\\tcolor: \u003C\u003Ccolour sidebar-tiddler-link-foreground>>;\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour sidebar-tiddler-link-foreground-hover>>;\\n}\\n\\nbutton.tc-tiddlylink:hover,\\na.tc-tiddlylink:hover {\\n\\ttext-decoration: underline;\\n}\\n\\na.tc-tiddlylink-resolves {\\n}\\n\\na.tc-tiddlylink-shadow {\\n\\tfont-weight: bold;\\n}\\n\\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\\n\\tfont-weight: normal;\\n}\\n\\na.tc-tiddlylink-missing {\\n\\tfont-style: italic;\\n}\\n\\na.tc-tiddlylink-external {\\n\\ttext-decoration: underline;\\n\\tcolor: \u003C\u003Ccolour external-link-foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour external-link-background>>;\\n}\\n\\na.tc-tiddlylink-external:visited {\\n\\tcolor: \u003C\u003Ccolour external-link-foreground-visited>>;\\n\\tbackground-color: \u003C\u003Ccolour external-link-background-visited>>;\\n}\\n\\na.tc-tiddlylink-external:hover {\\n\\tcolor: \u003C\u003Ccolour external-link-foreground-hover>>;\\n\\tbackground-color: \u003C\u003Ccolour external-link-background-hover>>;\\n}\\n\\n.tc-drop-down a.tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-background>>;\\n}\\n\\n/*\\n** Drag and drop styles\\n*/\\n\\n.tc-tiddler-dragger {\\n\\tposition: relative;\\n\\tz-index: -10000;\\n}\\n\\n.tc-tiddler-dragger-inner {\\n\\tposition: absolute;\\n\\ttop: -1000px;\\n\\tleft: -1000px;\\n\\tdisplay: inline-block;\\n\\tpadding: 8px 20px;\\n\\tfont-size: 16.9px;\\n\\tfont-weight: bold;\\n\\tline-height: 20px;\\n\\tcolor: \u003C\u003Ccolour dragger-foreground>>;\\n\\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n\\tbackground-color: \u003C\u003Ccolour dragger-background>>;\\n\\tborder-radius: 20px;\\n}\\n\\n.tc-tiddler-dragger-cover {\\n\\tposition: absolute;\\n\\tbackground-color: \u003C\u003Ccolour page-background>>;\\n}\\n\\n.tc-page-container > .tc-dropzone {\\n\\tmin-height: 100vh;\\n}\\n\\n.tc-dropzone {\\n\\tposition: relative;\\n}\\n\\n.tc-dropzone.tc-dragover:before {\\n\\tz-index: 10000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: \u003C\u003Ccolour dropzone-background>>;\\n\\ttext-align: center;\\n\\tcontent: \\\"\u003C\u003Clingo DropMessage>>\\\";\\n}\\n\\n.tc-droppable > .tc-droppable-placeholder {\\n\\tdisplay: none;\\n}\\n\\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\\n\\tdisplay: block;\\n\\tborder: 2px dashed \u003C\u003Ccolour dropzone-background>>;\\n}\\n\\n.tc-draggable {\\n\\tcursor: move;\\n}\\n\\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\\n.tc-links-draggable-list .tc-droppable-placeholder {\\n\\tline-height: 2em;\\n\\theight: 2em;\\n}\\n\\n.tc-sidebar-tab-open-item {\\n\\tposition: relative;\\n}\\n\\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\\n\\tfont-size: 0.7em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n/*\\n** Plugin reload warning\\n*/\\n\\n.tc-plugin-reload-warning {\\n\\tz-index: 1000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: \u003C\u003Ccolour alert-background>>;\\n\\ttext-align: center;\\n}\\n\\n/*\\n** Buttons\\n*/\\n\\nbutton svg, button img, label svg, label img {\\n\\tvertical-align: middle;\\n}\\n\\n.tc-btn-invisible {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\tcursor: pointer;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\nbutton:disabled.tc-btn-invisible  {\\n\\tcursor: default;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-btn-boxed {\\n\\tfont-size: 0.6em;\\n\\tpadding: 0.2em;\\n\\tmargin: 1px;\\n\\tbackground: none;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-controls-foreground>>;\\n\\tborder-radius: 0.25em;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed svg {\\n\\tfont-size: 1.6666em;\\n}\\n\\n.tc-btn-boxed:hover {\\n\\tbackground: \u003C\u003Ccolour muted-foreground>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed:hover svg {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-btn-rounded {\\n\\tfont-size: 0.5em;\\n\\tline-height: 2;\\n\\tpadding: 0em 0.3em 0.2em 0.4em;\\n\\tmargin: 1px;\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour muted-foreground>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 2em;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded svg {\\n\\tfont-size: 1.6666em;\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-btn-rounded:hover {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded:hover svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-btn-icon svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n\\n.tc-btn-text {\\n\\tmargin-left: 7px;\\n}\\n\\n/* used for documentation \\\"fake\\\" buttons */\\n.tc-btn-standard {\\n\\tline-height: 1.8;\\n\\tcolor: #667;\\n\\tbackground-color: #e0e0e0;\\n\\tborder: 1px solid #888;\\n\\tpadding: 2px 1px 2px 1px;\\n\\tmargin: 1px 4px 1px 4px;\\n}\\n\\n.tc-btn-big-green {\\n\\tdisplay: inline-block;\\n\\tpadding: 8px;\\n\\tmargin: 4px 8px 4px 8px;\\n\\tbackground: \u003C\u003Ccolour download-background>>;\\n\\tcolor: \u003C\u003Ccolour download-foreground>>;\\n\\tfill: \u003C\u003Ccolour download-foreground>>;\\n\\tborder: none;\\n\\tborder-radius: 2px;\\n\\tfont-size: 1.2em;\\n\\tline-height: 1.4em;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-btn-big-green svg,\\n.tc-btn-big-green img {\\n\\theight: 2em;\\n\\twidth: 2em;\\n\\tvertical-align: middle;\\n\\tfill: \u003C\u003Ccolour download-foreground>>;\\n}\\n\\n.tc-primary-btn {\\n\\tbackground: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-sidebar-lists input {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-sidebar-lists button {\\n\\tcolor: \u003C\u003Ccolour sidebar-button-foreground>>;\\n\\tfill: \u003C\u003Ccolour sidebar-button-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini {\\n\\tcolor: \u003C\u003Ccolour sidebar-muted-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini:hover {\\n\\tcolor: \u003C\u003Ccolour sidebar-muted-foreground-hover>>;\\n}\\n\\n.tc-sidebar-lists button small {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\nbutton svg.tc-image-button, button .tc-image-button img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n}\\n\\n.tc-unfold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 100%;\\n\\twidth: calc(100% + 2px);\\n\\tmargin-left: -43px;\\n\\ttext-align: center;\\n\\tborder-top: 2px solid \u003C\u003Ccolour tiddler-info-background>>;\\n\\tmargin-top: 4px;\\n}\\n\\n.tc-unfold-banner:hover {\\n\\tbackground: \u003C\u003Ccolour tiddler-info-background>>;\\n\\tborder-top: 2px solid \u003C\u003Ccolour tiddler-info-border>>;\\n}\\n\\n.tc-unfold-banner svg, .tc-fold-banner svg {\\n\\theight: 0.75em;\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n}\\n\\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-hover>>;\\n}\\n\\n.tc-fold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 23px;\\n\\ttext-align: center;\\n\\tmargin-left: -35px;\\n\\ttop: 6px;\\n\\tbottom: 6px;\\n}\\n\\n.tc-fold-banner:hover {\\n\\tbackground: \u003C\u003Ccolour tiddler-info-background>>;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-unfold-banner {\\n\\t\\tposition: static;\\n\\t\\twidth: calc(100% + 59px);\\n\\t}\\n\\n\\t.tc-fold-banner {\\n\\t\\twidth: 16px;\\n\\t\\tmargin-left: -16px;\\n\\t\\tfont-size: 0.75em;\\n\\t}\\n\\n}\\n\\n/*\\n** Tags and missing tiddlers\\n*/\\n\\n.tc-tag-list-item {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-tags-wrapper {\\n\\tmargin: 4px 0 14px 0;\\n}\\n\\n.tc-tags-wrapper .tc-tag-list-item {\\n\\tmargin-right: 7px;\\n}\\n\\n.tc-missing-tiddler-label {\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n\\tdisplay: inline-block;\\n\\tfont-size: 11.844px;\\n\\tline-height: 14px;\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n}\\n\\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n}\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n\\tdisplay: inline-block;\\n\\tpadding: 0.16em 0.7em;\\n\\tfont-size: 0.9em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.2em;\\n\\tcolor: \u003C\u003Ccolour tag-foreground>>;\\n\\twhite-space: break-spaces;\\n\\tvertical-align: baseline;\\n\\tbackground-color: \u003C\u003Ccolour tag-background>>;\\n\\tborder-radius: 1em;\\n}\\n\\n.tc-sidebar-scrollable .tc-tag-label {\\n\\ttext-shadow: none;\\n}\\n\\n.tc-untagged-separator {\\n\\tborder: 0;\\n\\theight: 1px;\\n\\tbackground: \u003C\u003Ccolour tab-divider>>;\\n}\\n\\nbutton.tc-untagged-label {\\n\\tbackground-color: \u003C\u003Ccolour untagged-background>>;\\n}\\n\\n.tc-tag-label svg, .tc-tag-label img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tmargin-right: 3px;\\n\\tmargin-bottom: 1px;\\n\\tvertical-align: bottom;\\n}\\n\\n.tc-edit-tags button.tc-remove-tag-button svg {\\n\\tfont-size: 0.7em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-tag-manager-table .tc-tag-label {\\n}\\n\\n.tc-tag-manager-tag {\\n\\twidth: 100%;\\n}\\n\\nbutton.tc-btn-invisible.tc-remove-tag-button {\\n\\toutline: none;\\n}\\n\\n.tc-tag-button-selected,\\n.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n\\tcolor: \u003C\u003Ccolour tiddler-background>>;\\n}\\n\\n/*\\n** Page layout\\n*/\\n\\n.tc-topbar {\\n\\tposition: fixed;\\n\\tz-index: 1200;\\n}\\n\\n.tc-topbar-left {\\n\\tleft: 29px;\\n\\ttop: 5px;\\n}\\n\\n.tc-topbar-right {\\n\\ttop: 5px;\\n\\tright: 29px;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-topbar-right {\\n\\t\\tright: 10px;\\n\\t}\\n\\n}\\n\\n.tc-topbar button {\\n\\tpadding: 8px;\\n}\\n\\n.tc-topbar svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-topbar button:hover svg {\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {\\n\\t\\ttransform: rotate(-90deg);\\n\\t}\\n\\n}\\n\\n.tc-sidebar-header {\\n\\tcolor: \u003C\u003Ccolour sidebar-foreground>>;\\n\\tfill: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\\n\\tfont-weight: normal;\\n}\\n\\n.tc-sidebar-header .tc-sidebar-lists p,\\n.tc-sidebar-tools-item {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-sidebar-header .tc-missing-tiddler-label {\\n\\tcolor: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-advanced-search input {\\n\\twidth: 60%;\\n}\\n\\n.tc-search a svg {\\n\\twidth: 1.2em;\\n\\theight: 1.2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-page-controls {\\n\\tmargin-top: 14px;\\n\\tmargin-bottom: 14px;\\n\\tfont-size: 1.5em;\\n}\\n\\n.tc-page-controls .tc-drop-down {\\n\\tfont-size: 1rem;\\n}\\n\\n.tc-page-controls button {\\n\\tmargin-right: 0.5em;\\n}\\n\\n.tc-page-controls a.tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-page-controls img {\\n\\twidth: 1em;\\n}\\n\\n.tc-page-controls svg {\\n\\tfill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\\n\\tfill: \u003C\u003Ccolour sidebar-controls-foreground-hover>>;\\n}\\n\\n.tc-sidebar-lists .tc-menu-list-item {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-menu-list-count {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-menu-list-subitem {\\n\\tpadding-left: 7px;\\n}\\n\\n.tc-story-river {\\n\\tposition: relative;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-sidebar-header {\\n\\t\\tpadding: 14px;\\n\\t\\tmin-height: 32px;\\n\\t\\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\ttransition:  min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;\\n\\t}\\n\\n\\t\u003C\u003Cif-no-sidebar \\\"\\\"\\\"\\n\\n\\t\\t.tc-sidebar-header {\\n\\t\\t\\tmin-height: 0;\\n\\t\\t\\tpadding-top: 0;\\n\\t\\t\\tpadding-bottom: 0;\\n\\t\\t}\\n\\n\\t\\\"\\\"\\\">>\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-message-box {\\n\\t\\tmargin: 21px -21px 21px -21px;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tposition: fixed;\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\toverflow-y: auto;\\n\\t\\toverflow-x: auto;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tmargin: 0 0 0 -42px;\\n\\t\\tpadding: 71px 0 28px 42px;\\n\\t}\\n\\n\\thtml[dir=\\\"rtl\\\"] .tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\\n\\t\\tpadding: 42px 42px 42px 42px;\\n\\t}\\n\\n\u003C\u003Cif-no-sidebar \\\"\\n\\n\\t.tc-story-river {\\n\\t\\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\\n\\t}\\n\\n\\\">>\\n\\n\\t.tc-story-river.tc-static-story-river {\\n\\t\\tmargin-right: 0;\\n\\t\\tpadding-right: 42px;\\n\\t}\\n\\n}\\n\\n@media print {\\n\\n\\tbody.tc-body {\\n\\t\\tbackground-color: transparent;\\n\\t}\\n\\n\\t.tc-sidebar-header, .tc-topbar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 0;\\n\\t}\\n\\n\\t.tc-story-river .tc-tiddler-frame {\\n\\t\\tmargin: 0;\\n\\t\\tborder: none;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n/*\\n** Tiddler styles\\n*/\\n\\n.tc-tiddler-frame {\\n\\tposition: relative;\\n\\tmargin-bottom: 28px;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-border>>;\\n}\\n\\n{{$:/themes/tiddlywiki/vanilla/sticky}}\\n\\n.tc-tiddler-info {\\n\\toverflow: hidden;\\n\\tpadding: 14px 42px 14px 42px;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-info-background>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tiddler-info-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tiddler-info-border>>;\\n}\\n\\n.tc-tiddler-info p {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-info-tab-background>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tiddler-info-tab-background>>;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-tiddler-info {\\n\\t\\tpadding: 14px 14px 14px 14px;\\n\\t}\\n\\n}\\n\\n.tc-view-field-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-view-field-name {\\n\\twidth: 1%; /* Makes this column be as narrow as possible */\\n\\twhite-space: nowrap;\\n\\tvertical-align: top;\\n\\ttext-align: right;\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-view-field-value {\\n\\tword-break: break-all;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 14px 14px 14px 14px;\\n\\t\\tmargin-bottom: .5em;\\n\\t}\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -14px 0 -14px;\\n\\t}\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 28px 42px 42px 42px;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\\n\\t\\tborder-radius: 2px;\\n\\t}\\n\\n\u003C\u003Cif-no-sidebar \\\"\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\\">>\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -42px 0 -42px;\\n\\t}\\n}\\n\\n.tc-site-title,\\n.tc-titlebar {\\n\\tfont-weight: normal;\\n\\tfont-size: 2.35em;\\n\\tline-height: 1.35em;\\n\\tcolor: \u003C\u003Ccolour tiddler-title-foreground>>;\\n\\tmargin: 0;\\n}\\n\\n.tc-site-title {\\n\\tcolor: \u003C\u003Ccolour site-title-foreground>>;\\n}\\n\\n.tc-tiddler-title-icon {\\n\\tvertical-align: middle;\\n\\tmargin-right: .1em;\\n}\\n\\n.tc-tiddler-title-icon svg {\\n\\twidth: 0.9em;\\n\\theight: 0.9em;\\n}\\n\\n.tc-system-title-prefix {\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-tiddler-lazy-loading {\\n\\theight: 4px;\\n\\twidth: 100%;\\n\\tbackground: no-repeat linear-gradient(\u003C\u003Ccolour background>> 0 0),no-repeat linear-gradient(\u003C\u003Ccolour background>> 0 0),\u003C\u003Ccolour primary>>;\\n\\tbackground-size: 60% 100%;\\n\\tanimation: animation-loading-progress 3s infinite;\\n}\\n\\n@keyframes animation-loading-progress {\\n\\t0%   {background-position:-150% 0,-150% 0}\\n\\t66%  {background-position: 250% 0,-150% 0}\\n\\t100% {background-position: 250% 0, 250% 0}\\n}\\n\\n.tc-titlebar h2 {\\n\\tfont-size: 1em;\\n\\tdisplay: inline;\\n}\\n\\n.tc-titlebar img {\\n\\theight: 1em;\\n}\\n\\n.tc-subtitle {\\n\\tfont-size: 0.9em;\\n\\tcolor: \u003C\u003Ccolour tiddler-subtitle-foreground>>;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-subtitle .tc-tiddlylink {\\n\\tmargin-right: .3em;\\n}\\n\\n.tc-tiddler-missing .tc-title {\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-controls {\\n\\tfloat: right;\\n\\tpadding: 3px; /* make space for outline */\\n}\\n\\n.tc-tiddler-controls .tc-drop-down {\\n\\tfont-size: 0.6em;\\n}\\n\\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\\n\\tfont-size: 1em;\\n}\\n\\n.tc-tiddler-controls > span > button,\\n.tc-tiddler-controls > span > span > button,\\n.tc-tiddler-controls > span > span > span > button {\\n\\tvertical-align: baseline;\\n\\tmargin-left:5px;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\\n.tc-search button svg, .tc-search a svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\\n\\theight: 0.75em;\\n}\\n\\n.tc-search button svg, .tc-search a svg {\\n\\theight: 1.2em;\\n\\twidth: 1.2em;\\n\\tmargin: 0 0.25em;\\n}\\n\\n.tc-tiddler-controls button.tc-selected svg,\\n.tc-page-controls button.tc-selected svg  {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n}\\n\\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\\n.tc-search button:hover svg, .tc-search a:hover svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-hover>>;\\n}\\n\\n@media print {\\n\\t.tc-tiddler-controls {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.tc-tiddler-help { /* Help prompts within tiddler template */\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tiddler-help a.tc-tiddlylink {\\n\\tcolor: \u003C\u003Ccolour very-muted-foreground>>;\\n}\\n\\n.tc-tiddler-frame .tc-edit-texteditor {\\n\\twidth: 100%;\\n\\tmargin: 4px 0 4px 0;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor,\\n.tc-tiddler-frame select.tc-edit-texteditor {\\n\\tpadding: 3px 3px 3px 3px;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tline-height: 1.3em;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n\\t-webkit-appearance: none;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame select.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-editor-background>>;\\n}\\n\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-background>>;\\n}\\n\\n.tc-tiddler-frame .tc-edit-fields input.tc-edit-fieldeditor,\\n.tc-tiddler-frame .tc-edit-fields select.tc-edit-fieldeditor,\\n.tc-tiddler-frame .tc-edit-fields textarea.tc-edit-fieldeditor {\\n\\tmargin: 0;\\n\\tpadding: 2px 3px;\\n}\\n\\n.tc-tiddler-frame .tc-binary-warning {\\n\\twidth: 100%;\\n\\theight: 5em;\\n\\ttext-align: center;\\n\\tpadding: 3em 3em 6em 3em;\\n\\tbackground: \u003C\u003Ccolour alert-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour alert-border>>;\\n}\\n\\ncanvas.tc-edit-bitmapeditor  {\\n\\tborder: 6px solid \u003C\u003Ccolour tiddler-editor-border-image>>;\\n\\tcursor: crosshair;\\n\\t-moz-user-select: none;\\n\\t-webkit-user-select: none;\\n\\t-ms-user-select: none;\\n\\tmargin-top: 6px;\\n\\tmargin-bottom: 6px;\\n}\\n\\n.tc-edit-bitmapeditor-width {\\n\\tdisplay: block;\\n}\\n\\n.tc-edit-bitmapeditor-height {\\n\\tdisplay: block;\\n}\\n\\n.tc-single-tiddler-window .tc-tiddler-body,\\n.tc-tiddler-frame .tc-tiddler-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\\n}\\n\\n.tc-titlebar, .tc-tiddler-edit-title {\\n\\toverflow: hidden; /* https://github.com/TiddlyWiki/TiddlyWiki5/issues/282 */\\n}\\n\\n/*\\n* Tiddler in a new window.\\n* Also see: .tc-single-tiddler-window .tc-tiddler-body, above\\n*/\\n\\nhtml body.tc-body.tc-single-tiddler-window {\\n\\tmargin: 1em;\\n\\tbackground: \u003C\u003Ccolour tiddler-background>>;\\n}\\n\\n.tc-single-tiddler-window img,\\n.tc-single-tiddler-window svg,\\n.tc-single-tiddler-window canvas,\\n.tc-single-tiddler-window embed,\\n.tc-single-tiddler-window iframe {\\n\\tmax-width: 100%;\\n}\\n\\n/*\\n** Editor\\n*/\\n\\n.tc-editor-toolbar {\\n\\tmargin-top: 8px;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview .tc-editor-toolbar,\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden .tc-editor-toolbar {\\n\\tgrid-area: toolbar;\\n}\\n\\n.tc-editor-toolbar button {\\n\\tvertical-align: middle;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n\\tcolor: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n\\tmargin: 2px 0 2px 4px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\\n\\tmargin-left: 1px;\\n\\twidth: 1em;\\n\\tborder-radius: 8px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\\n\\tmargin-left: 11px;\\n}\\n\\n.tc-editor-toolbar button.tc-selected {\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-editor-toolbar button svg {\\n\\twidth: 1.6em;\\n\\theight: 1.2em;\\n}\\n\\n.tc-editor-toolbar .tc-drop-down button.tc-btn-mini {\\n\\tpadding: 2px 4px;\\n}\\n\\n.tc-editor-toolbar button:hover {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\\n\\twhite-space: normal;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px;\\n\\twidth: auto;\\n}\\n\\n.tc-editor-toolbar .tc-search-results {\\n\\tpadding: 0;\\n}\\n\\n.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down > p {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\\n.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down a.tc-tiddlylink {\\n\\tfont-weight: normal;\\n}\\n\\n/*\\n** Adjustments for fluid-fixed mode\\n*/\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\u003C\u003Cif-fluid-fixed text:\\\"\\\"\\\"\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 0;\\n\\t\\tposition: relative;\\n\\t\\twidth: auto;\\n\\t\\tleft: 0;\\n\\t\\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\tbody.tc-body .tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 42px);\\n\\t}\\n\\n\\\"\\\"\\\" hiddenSidebarText:\\\"\\\"\\\"\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 3em;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\tbody.tc-body .tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n\\\"\\\"\\\">>\\n\\n}\\n\\n/*\\n** Toolbar buttons\\n*/\\n\\n.tc-page-controls svg.tc-image-new-button {\\n\\tfill: \u003C\u003Ccolour toolbar-new-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-options-button {\\n\\tfill: \u003C\u003Ccolour toolbar-options-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-save-button {\\n\\tfill: \u003C\u003Ccolour toolbar-save-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-info-button {\\n\\tfill: \u003C\u003Ccolour toolbar-info-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-edit-button {\\n\\tfill: \u003C\u003Ccolour toolbar-edit-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-close-button {\\n\\tfill: \u003C\u003Ccolour toolbar-close-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-delete-button {\\n\\tfill: \u003C\u003Ccolour toolbar-delete-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-cancel-button {\\n\\tfill: \u003C\u003Ccolour toolbar-cancel-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-done-button {\\n\\tfill: \u003C\u003Ccolour toolbar-done-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-layout-button {\\n\\tfill: \u003C\u003Ccolour toolbar-options-button>>;\\n}\\n\\n/*\\n** Tiddler edit mode\\n*/\\n\\n.tc-tiddler-edit-frame em.tc-edit {\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n\\tfont-style: normal;\\n}\\n\\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\\n\\tfont-style: normal;\\n}\\n\\n.tc-type-selector .tc-edit-typeeditor {\\n\\twidth: auto;\\n}\\n\\n.tc-type-selector-dropdown-wrapper {\\n\\tdisplay: inline-block;\\n}\\n\\n\u003C\u003Cset-type-selector-min-width>>\\n\\n.tc-edit-tags {\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tpadding: 4px 8px 4px 8px;\\n}\\n\\n.tc-edit-add-tag {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-add-tag .tc-add-tag-name input {\\n\\twidth: 50%;\\n}\\n\\n.tc-edit-add-tag .tc-keyboard {\\n\\tdisplay:inline;\\n}\\n\\n.tc-edit-tags .tc-tag-label {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-tags-list {\\n\\tmargin: 14px 0 14px 0;\\n}\\n\\n.tc-remove-tag-button {\\n\\tpadding-left: 4px;\\n}\\n\\n.tc-tiddler-editor {\\n\\tdisplay: grid;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview {\\n\\tgrid-template-areas:\\n\\t\\t\\\"toolbar toolbar\\\"\\n\\t\\t\\\"editor preview\\\";\\n\\tgrid-template-columns: repeat(2, minmax(0px, 1fr));\\n\\tgrid-template-rows: auto 1fr;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden {\\n\\tgrid-template-areas:\\n\\t\\t\\\"toolbar\\\"\\n\\t\\t\\\"editor\\\";\\n\\tgrid-template-columns: 1fr;\\n\\tgrid-template-rows: auto 1fr;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview .tc-tiddler-preview-preview {\\n\\tgrid-area: preview;\\n\\toverflow-wrap: anywhere;\\n\\tword-break: normal;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tmargin: 4px 0 3px 3px;\\n\\tpadding: 3px 3px 3px 3px;\\n}\\n\\n\u003C\u003Cif-editor-height-fixed then:\\\"\\\"\\\"\\n\\n.tc-tiddler-preview-preview {\\n\\toverflow-y: scroll;\\n\\theight: {{$:/config/TextEditor/EditorHeight/Height}};\\n}\\n\\n\\\"\\\"\\\">>\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview .tc-edit-texteditor,\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden .tc-edit-texteditor {\\n\\tgrid-area: editor;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview canvas.tc-edit-bitmapeditor,\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden canvas.tc-edit-bitmapeditor {\\n\\tgrid-area: editor;\\n\\tmax-width: 100%;\\n}\\n\\n.tc-edit-fields {\\n\\twidth: 100%;\\n}\\n\\n.tc-edit-fields.tc-edit-fields-small {\\n\\tmargin-top: 0;\\n\\tmargin-bottom: 0;\\n}\\n\\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\\n\\tborder: none;\\n\\tpadding: 4px;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-editor-fields-odd>>;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-editor-fields-even>>;\\n}\\n\\n.tc-edit-field-name {\\n\\ttext-align: right;\\n}\\n\\n.tc-edit-field-value input {\\n\\twidth: 100%;\\n}\\n\\n.tc-edit-field-remove {\\n}\\n\\n.tc-edit-field-remove svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\\n\\twidth: auto;\\n}\\n\\n.tc-edit-field-add-name-wrapper {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-field-add-value {\\n\\tdisplay: inline-block;\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-edit-field-add-value {\\n\\t\\twidth: 35%;\\n\\t}\\n\\n}\\n\\n.tc-edit-field-add-button {\\n\\tdisplay: inline-block;\\n\\twidth: 10%;\\n}\\n\\n\\n/*\\n** Tiddler editor dropzone\\n*/\\n\\n.tc-dropzone-editor {\\n\\tposition:relative;\\n}\\n\\n.tc-dropzone-editor.tc-dragover .tc-editor-toolbar::after{\\n\\tz-index: 10000;\\n\\ttop:0;\\n\\tleft:0;\\n\\tright:0;\\n\\theight: 100%;\\n\\tbackground: \u003C\u003Ccolour dropzone-background>>;\\n\\tcontent: \\\"\u003C\u003Clingo DropMessage>>\\\";\\n\\tpointer-events: none;\\n\\tposition: absolute;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tbackground-color: \u003C\u003Ccolor background>>;\\n\\tborder: 4px dashed \u003C\u003Ccolor modal-border>>;\\n\\tfont-weight: bold;\\n\\tfont-size: 150%;\\n\\topacity: 0.8;\\n\\tcolor: \u003C\u003Ccolor foreground>>;\\n}\\n\\n.tc-editor-importpopup {\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\n.tc-editor-import {\\n\\tposition: absolute;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tbackground: \u003C\u003Ccolor pre-background>>;\\n\\tbox-shadow: 2px 2px 10px \u003C\u003Ccolour foreground>>;\\n\\tpadding: 10px;\\n\\twidth: 96%;\\n\\tborder: 1px solid \u003C\u003Ccolor tiddler-controls-foreground>>;\\n\\ttext-align:center;\\n}\\n\\n.tc-editor-import img {\\n\\tmax-height: 500px;\\n}\\n\\n/*\\n** Storyview Classes\\n*/\\n\\n.tc-viewswitcher .tc-image-button {\\n\\tmargin-right: .3em;\\n}\\n\\n.tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\twidth: 100%;\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n}\\n\\n/*\\n** Dropdowns\\n*/\\n\\n.tc-btn-dropdown {\\n\\ttext-align: left;\\n}\\n\\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-drop-down-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-drop-down {\\n\\tmin-width: 380px;\\n\\tborder: 1px solid \u003C\u003Ccolour dropdown-border>>;\\n\\tbackground-color: \u003C\u003Ccolour dropdown-background>>;\\n\\tpadding: 7px 0 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\ttext-shadow: none;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-drop-down {\\n\\tmargin-left: 14px;\\n}\\n\\n.tc-drop-down button svg, .tc-drop-down a svg  {\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-drop-down button:disabled svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-drop-down button.tc-btn-invisible:hover svg {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-drop-down .tc-drop-down-info {\\n\\tpadding-left: 14px;\\n}\\n\\n.tc-drop-down p {\\n\\tpadding: 0 14px 0 14px;\\n}\\n\\n.tc-drop-down svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-drop-down img {\\n\\twidth: 1em;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n\\tdisplay: block;\\n\\tpadding: 0 14px 0 14px;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n\\tmargin-bottom: 0px;\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-drop-down .tc-prompt {\\n\\tpadding: 0 14px;\\n}\\n\\n.tc-drop-down .tc-chooser {\\n\\tborder: none;\\n}\\n\\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\\n\\tfont-size: 0.4em;\\n\\tpadding-left: 1.2em;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper {\\n\\twidth: 100%;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper button {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-background>>;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button {\\n\\tbackground-color: \u003C\u003Ccolour dropdown-tab-background>>;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour dropdown-tab-background-selected>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour dropdown-tab-background-selected>>;\\n}\\n\\n.tc-drop-down-bullet {\\n\\tdisplay: inline-block;\\n\\twidth: 0.5em;\\n}\\n\\n.tc-drop-down .tc-tab-contents a {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-block-dropdown-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-block-dropdown {\\n\\tposition: absolute;\\n\\tmin-width: 220px;\\n\\tborder: 1px solid \u003C\u003Ccolour dropdown-border>>;\\n\\tbackground-color: \u003C\u003Ccolour dropdown-background>>;\\n\\tpadding: 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\tz-index: 1000;\\n\\ttext-shadow: none;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down {\\n\\tmargin-left: -12px;\\n}\\n\\n.tc-block-dropdown a {\\n\\tdisplay: block;\\n\\tpadding: 4px 14px 4px 14px;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down a {\\n\\tdisplay: block;\\n\\tpadding: 0px 10px 0px 10px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item-plain,\\n.tc-block-dropdown .tc-dropdown-item-plain {\\n\\tpadding: 4px 14px 4px 7px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item,\\n.tc-block-dropdown .tc-dropdown-item {\\n\\tpadding: 4px 14px 4px 7px;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-block-dropdown a.tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-background>>;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-search-results {\\n\\tpadding: 0 7px 0 7px;\\n}\\n\\n.tc-image-chooser, .tc-colour-chooser {\\n\\twhite-space: normal;\\n}\\n\\n.tc-image-chooser a,\\n.tc-colour-chooser a {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\ttext-align: center;\\n\\tposition: relative;\\n}\\n\\n.tc-image-chooser a {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding: 2px;\\n\\tmargin: 2px;\\n\\twidth: 4em;\\n\\theight: 4em;\\n}\\n\\n.tc-colour-chooser a {\\n\\tpadding: 3px;\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-image-chooser a:hover,\\n.tc-colour-chooser a:hover {\\n\\tbackground: \u003C\u003Ccolour primary>>;\\n\\tpadding: 0px;\\n\\tborder: 3px solid \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-image-chooser a svg,\\n.tc-image-chooser a img {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n\\theight: auto;\\n\\tmax-width: 3.5em;\\n\\tmax-height: 3.5em;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmargin: auto;\\n}\\n\\n/* Make search dropdown visible on small screens. issue #7003 */\\n@media (max-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-sidebar-search .tc-block-dropdown-wrapper {\\n\\t\\tposition: initial;\\n\\t}\\n\\n}\\n\\n/*\\n** Modals\\n*/\\n\\n.tc-modal-wrapper {\\n\\tposition: fixed;\\n\\toverflow: auto;\\n\\toverflow-y: scroll;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 900;\\n}\\n\\n.tc-modal-backdrop {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 1000;\\n\\tbackground-color: \u003C\u003Ccolour modal-backdrop>>;\\n}\\n\\n.tc-modal {\\n\\tz-index: 1100;\\n\\tbackground-color: \u003C\u003Ccolour modal-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour modal-border>>;\\n}\\n\\n@media (max-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 1em;\\n\\t\\tleft: 1em;\\n\\t\\tright: 1em;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n@media (min-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 2em;\\n\\t\\tleft: 25%;\\n\\t\\twidth: 50%;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n.tc-modal-header {\\n\\tpadding: 9px 15px;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour modal-header-border>>;\\n}\\n\\n.tc-modal-header h3 {\\n\\tmargin: 0;\\n\\tline-height: 30px;\\n}\\n\\n.tc-modal-header img, .tc-modal-header svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-modal-body {\\n\\tpadding: 15px;\\n}\\n\\n.tc-modal-footer {\\n\\tpadding: 14px 15px 15px;\\n\\tmargin-bottom: 0;\\n\\ttext-align: right;\\n\\tbackground-color: \u003C\u003Ccolour modal-footer-background>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour modal-footer-border>>;\\n}\\n\\n.tc-modal-prevent-scroll {\\n\\toverflow: hidden;\\n}\\n\\n/*\\n** Centered modals\\n*/\\n.tc-modal-centered .tc-modal {\\n\\twidth: auto;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%) !important;\\n}\\n\\n/*\\n** Notifications\\n*/\\n\\n.tc-notification {\\n\\tposition: fixed;\\n\\ttop: 14px;\\n\\tright: 42px;\\n\\tz-index: 1300;\\n\\tmax-width: 280px;\\n\\tpadding: 0 14px 0 14px;\\n\\tbackground-color: \u003C\u003Ccolour notification-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour notification-border>>;\\n}\\n\\n/*\\n** Tabs\\n*/\\n\\n.tc-tab-set.tc-vertical {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tab-buttons {\\n\\tfont-size: 0.85em;\\n\\tpadding-top: 1em;\\n\\tmargin-bottom: -2px;\\n}\\n\\n.tc-tab-buttons.tc-vertical  {\\n\\tz-index: 100;\\n\\tdisplay: block;\\n\\tpadding-top: 14px;\\n\\tvertical-align: top;\\n\\ttext-align: right;\\n\\tmargin-bottom: inherit;\\n\\tmargin-right: -1px;\\n\\tmax-width: 33%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n}\\n\\n.tc-tab-buttons button.tc-tab-selected {\\n\\tcolor: \u003C\u003Ccolour tab-foreground-selected>>;\\n\\tbackground-color: \u003C\u003Ccolour tab-background-selected>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border-selected>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border-selected>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour tab-border-selected>>;\\n}\\n\\n.tc-tab-buttons button {\\n\\tcolor: \u003C\u003Ccolour tab-foreground>>;\\n\\tpadding: 3px 5px 3px 5px;\\n\\tmargin-right: 0.3em;\\n\\tfont-weight: normal;\\n\\tborder: none;\\n\\tbackground: inherit;\\n\\tbackground-color: \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-top-right-radius: 2px;\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tmargin-top: 3px;\\n\\tmargin-right: 0;\\n\\ttext-align: right;\\n\\tbackground-color: \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-right: none;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-bottom-left-radius: 2px;\\n\\tborder-top-right-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour tab-background-selected>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour tab-background-selected>>;\\n}\\n\\n.tc-tab-divider {\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-divider>>;\\n}\\n\\n.tc-tab-divider.tc-vertical  {\\n\\tdisplay: none;\\n}\\n\\n.tc-tab-content {\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tab-content.tc-vertical  {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-top: 0;\\n\\tpadding-left: 14px;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\t-webkit-flex: 1 0 70%;\\n\\tflex: 1 0 70%;\\n\\toverflow: auto;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons {\\n\\tmargin-bottom: -1px;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background-selected>>;\\n\\tcolor: \u003C\u003Ccolour sidebar-tab-foreground-selected>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour sidebar-tab-border-selected>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour sidebar-tab-border-selected>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour sidebar-tab-border-selected>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button {\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background>>;\\n\\tcolor: \u003C\u003Ccolour sidebar-tab-foreground>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour sidebar-tab-border>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour sidebar-tab-border>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour sidebar-tab-border>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-divider {\\n\\tborder-top: 1px solid \u003C\u003Ccolour sidebar-tab-divider>>;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background>>;\\n\\tborder-top: none;\\n\\tborder-left: none;\\n\\tborder-bottom: none;\\n\\tborder-right: 1px solid #ccc;\\n\\tmargin-bottom: inherit;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background-selected>>;\\n\\tborder: none;\\n}\\n\\n/*\\n** Manager\\n*/\\n\\n.tc-manager-wrapper {\\n\\n}\\n\\n.tc-manager-controls {\\n\\n}\\n\\n.tc-manager-control {\\n\\tmargin: 0.5em 0;\\n}\\n\\n.tc-manager-control select {\\n\\tmax-width: 100%;\\n}\\n\\n.tc-manager-list {\\n\\twidth: 100%;\\n\\tborder-top: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item {\\n\\n}\\n\\n.tc-manager-list-item-heading {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding: 3px;\\n}\\n\\n.tc-manager-list-item-heading-selected {\\n\\tfont-weight: bold;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n\\tbackground-color: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-manager-list-item-heading:hover {\\n\\tbackground: \u003C\u003Ccolour primary>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-manager-list-item-content {\\n\\tdisplay: flex;\\n}\\n\\n.tc-manager-list-item-content-sidebar {\\n\\tflex: 1 0;\\n\\tbackground: \u003C\u003Ccolour tiddler-editor-background>>;\\n\\tborder-right: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-bottom: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-manager-list-item-content-item-heading {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tbackground: \u003C\u003Ccolour muted-foreground>>;\\n\\ttext-transform: uppercase;\\n\\tfont-size: 0.6em;\\n\\tfont-weight: bold;\\n\\tpadding: 0.5em 0 0.5em 0;\\n}\\n\\n.tc-manager-list-item-content-item-body {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-manager-list-item-content-item-body > pre {\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tborder: none;\\n\\tbackground: inherit;\\n}\\n\\n.tc-manager-list-item-content-tiddler {\\n\\tflex: 3 1;\\n\\tborder-left: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-right: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-bottom: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item-content-item-body > table {\\n\\tborder: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n.tc-manager-list-item-content-item-body > table td {\\n\\tborder: none;\\n}\\n\\n.tc-manager-icon-editor > button {\\n\\twidth: 100%;\\n}\\n\\n.tc-manager-icon-editor > button > svg,\\n.tc-manager-icon-editor > button > button {\\n\\twidth: 100%;\\n\\theight: auto;\\n}\\n\\n/*\\n** Import table\\n*/\\n\\n.tc-import-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-import-table svg.tc-image-edit-button {\\n\\tmax-width: unset;\\n}\\n\\n.tc-import-table th:first-of-type {\\n\\twidth: 10%;\\n}\\n\\n.tc-import-table th:last-of-type {\\n\\twidth: 30%;\\n}\\n\\n.tc-import-table .tc-row-disabled {\\n\\tbackground: \u003C\u003Ccolour very-muted-foreground>>10;\\n\\topacity: 0.8;\\n}\\n\\n.tc-import-table .tc-row-warning {\\n\\tbackground: \u003C\u003Ccolour diff-delete-background>>50;\\n}\\n\\n/*\\n** Alerts\\n*/\\n\\n.tc-alerts {\\n\\tposition: fixed;\\n\\ttop: 28px;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmax-width: 50%;\\n\\tz-index: 20000;\\n}\\n\\n.tc-alert {\\n\\tposition: relative;\\n\\tmargin: 14px;\\n\\tpadding: 7px;\\n\\tborder: 1px solid \u003C\u003Ccolour alert-border>>;\\n\\tbackground-color: \u003C\u003Ccolour alert-background>>;\\n}\\n\\n.tc-alert-toolbar {\\n\\tposition: absolute;\\n\\ttop: 7px;\\n\\tright: 7px;\\n\\tline-height: 0;\\n}\\n\\n.tc-alert-toolbar svg {\\n\\tfill: \u003C\u003Ccolour alert-muted-foreground>>;\\n}\\n\\n.tc-alert-subtitle {\\n\\tcolor: \u003C\u003Ccolour alert-muted-foreground>>;\\n\\tfont-weight: bold;\\n\\tfont-size: 0.8em;\\n\\tmargin-bottom: 0.5em;\\n}\\n\\n.tc-alert-body > p {\\n\\tmargin: 0;\\n}\\n\\n.tc-alert-highlight {\\n\\tcolor: \u003C\u003Ccolour alert-highlight>>;\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-static-alert {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t.tc-static-alert-inner {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 100;\\n\\t}\\n\\n}\\n\\n.tc-static-alert-inner {\\n\\tpadding: 0 2px 2px 42px;\\n\\tcolor: \u003C\u003Ccolour static-alert-foreground>>;\\n}\\n\\n/*\\n** Floating drafts list\\n*/\\n\\n.tc-drafts-list {\\n\\tz-index: 2000;\\n\\tposition: fixed;\\n\\tfont-size: 0.8em;\\n\\tleft: 0;\\n\\tbottom: 0;\\n}\\n\\n.tc-drafts-list a {\\n\\tmargin: 0 0.5em;\\n\\tpadding: 4px 4px;\\n\\tborder-top-left-radius: 4px;\\n\\tborder-top-right-radius: 4px;\\n\\tborder: 1px solid \u003C\u003Ccolour background>>;\\n\\tborder-bottom: none;\\n\\tbackground: \u003C\u003Ccolour dirty-indicator>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-drafts-list a:hover {\\n\\ttext-decoration: none;\\n\\tbackground: \u003C\u003Ccolour foreground>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-drafts-list a svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: text-bottom;\\n}\\n\\n/*\\n** Control panel\\n*/\\n\\n.tc-control-panel td {\\n\\tpadding: 4px;\\n}\\n\\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\\n\\twidth: 100%;\\n}\\n\\n.tc-control-panel-setting {\\n\\tborder-top: 1px solid \u003C\u003Ccolour blockquote-bar>>;\\n}\\n\\n.tc-plugin-info {\\n\\tdisplay: flex;\\n\\ttext-shadow: none;\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tpadding: 4px;\\n\\talign-items: center;\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink.tc-plugin-info {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-foreground>>;\\n}\\n\\n\\n.tc-plugin-info-sub-plugins .tc-plugin-info {\\n\\tmargin: 0.5em;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-plugin-info-sub-plugin-indicator {\\n\\tmargin: -16px 1em 0 2em;\\n}\\n\\n.tc-plugin-info-sub-plugin-indicator button {\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tbackground: \u003C\u003Ccolour foreground>>;\\n\\tborder-radius: 8px;\\n\\tpadding: 2px 7px;\\n\\tfont-size: 0.75em;\\n}\\n\\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\\n\\tmargin-left: 1em;\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-plugin-info-disabled {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n}\\n\\n.tc-plugin-info-disabled:hover {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover {\\n\\ttext-decoration: none;\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-stability {\\n\\tborder: 1px solid \u003C\u003Ccolour background>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-plugin-info-chunk {\\n\\tmargin: 2px;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\tline-height: 1;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-icon {\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\tline-height: 1;\\n\\theight: 2em;\\n\\twidth: 2em;\\n\\tdisplay: grid;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description {\\n\\tflex-grow: 1;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability {\\n\\tmargin-right: 4px;\\n\\tpadding: 1px 3px;\\n\\tfont-size: 0.8em;\\n\\tborder-radius: 4px;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-stable {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-stable>>;\\n\\tcolor: \u003C\u003Ccolour stability-stable>>;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-experimental {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-experimental>>;\\n\\tcolor: \u003C\u003Ccolour stability-experimental>>;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-deprecated {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-deprecated>>;\\n\\tcolor: \u003C\u003Ccolour stability-deprecated>>;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-legacy {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-legacy>>;\\n\\tcolor: \u003C\u003Ccolour stability-legacy>>;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\ttext-align: right;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\\n\\tfont-size: 1em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description div {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\\n\\tmax-width: 2em;\\n\\tmax-height: 2em;\\n\\tmargin: auto;\\n}\\n\\n.tc-plugin-info-dropdown {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tmargin-top: -8px;\\n}\\n\\n.tc-plugin-info-dropdown-message {\\n\\tbackground: \u003C\u003Ccolour message-background>>;\\n\\tpadding: 0.5em 1em 0.5em 1em;\\n\\tfont-weight: bold;\\n\\tfont-size: 0.8em;\\n}\\n\\n.tc-plugin-info-dropdown-body {\\n\\tpadding: 1em 1em 0 1em;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-plugin-info-sub-plugins {\\n\\tpadding: 0.5em;\\n\\tmargin: 0 1em 1em 1em;\\n\\tbackground: \u003C\u003Ccolour notification-background>>;\\n}\\n\\n.tc-install-plugin {\\n\\tfont-weight: bold;\\n\\tbackground: green;\\n\\tcolor: white;\\n\\tfill: white;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n}\\n\\n.tc-install-plugin.tc-reinstall-downgrade {\\n\\tbackground: red;\\n}\\n\\n.tc-install-plugin.tc-reinstall {\\n\\tbackground: blue;\\n}\\n\\n.tc-install-plugin.tc-reinstall-upgrade {\\n\\tbackground: orange;\\n}\\n\\n.tc-check-list {\\n\\tline-height: 2em;\\n}\\n\\n.tc-check-list .tc-image-button {\\n\\theight: 1.5em;\\n}\\n\\n/*\\n** Message boxes\\n*/\\n\\n.tc-message-box {\\n\\tborder: 1px solid \u003C\u003Ccolour message-border>>;\\n\\tbackground: \u003C\u003Ccolour message-background>>;\\n\\tpadding: 0px 21px 0px 21px;\\n\\tfont-size: 12px;\\n\\tline-height: 18px;\\n\\tcolor: \u003C\u003Ccolour message-foreground>>;\\n}\\n\\n.tc-message-box svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: text-bottom;\\n}\\n\\n/*\\n** Pictures\\n*/\\n\\n.tc-bordered-image {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding: 5px;\\n\\tmargin: 5px;\\n}\\n\\n/*\\n** Floats\\n*/\\n\\n.tc-float-right {\\n\\tfloat: right;\\n}\\n\\n/* Float tc-clearfix. Needs to be used by elements that allow float:right in their content.\\n** So the floating element does not overflow\\n*/\\n\\n.tc-clearfix:after {\\n\\tcontent: \\\"\\\";\\n\\tclear: both;\\n\\tdisplay: table;\\n}\\n\\n/* Fix overflow toc, manager and testcase output */\\n.tc-tiddler-body .tc-tabbed-table-of-contents, .tc-manager-list-item-content, .tc-test-case-output {\\n\\toverflow-x: auto;\\n}\\n\\n/* A wrapper to fix table overflow */\\n\\n.tc-table-wrapper {\\n\\toverflow-x: auto;\\n}\\n\\n/*\\n** Chooser\\n*/\\n\\n.tc-chooser {\\n\\tborder-right: 1px solid \u003C\u003Ccolour table-header-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour table-header-background>>;\\n}\\n\\n\\n.tc-chooser-item {\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour table-header-background>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour table-header-background>>;\\n\\tpadding: 2px 4px 2px 14px;\\n}\\n\\n.tc-drop-down .tc-chooser-item {\\n\\tpadding: 2px;\\n}\\n\\n.tc-chosen,\\n.tc-chooser-item:hover {\\n\\tbackground-color: \u003C\u003Ccolour table-header-background>>;\\n\\tborder-color: \u003C\u003Ccolour table-footer-background>>;\\n}\\n\\n.tc-chosen .tc-tiddlylink {\\n\\tcursor:default;\\n}\\n\\n.tc-chooser-item .tc-tiddlylink {\\n\\tdisplay: block;\\n\\ttext-decoration: none;\\n\\tbackground-color: transparent;\\n}\\n\\n.tc-chooser-item:hover .tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-chosen .tc-tiddlylink,\\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-chosen > .tc-tiddlylink:before {\\n\\tmargin-left: -10px;\\n\\tposition: relative;\\n\\tcontent: \\\"» \\\";\\n}\\n\\n.tc-chooser-item svg,\\n.tc-chooser-item img{\\n\\tmax-width: 1em;\\n\\tmax-height: 1em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-language-chooser .tc-image-button img {\\n\\tmax-width: 2em;\\n\\tmax-height: 1em;\\n\\twidth: auto;\\n\\theight: auto;\\n\\tvertical-align: -0.15em;\\n}\\n\\n/*\\n** Palette swatches\\n*/\\n\\n.tc-swatches-horiz {\\n}\\n\\n.tc-swatches-horiz .tc-swatch {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-swatch {\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tmargin: 0.4em;\\n\\tborder: 1px solid #888;\\n}\\n\\ninput.tc-palette-manager-colour-input {\\n\\twidth: 100%;\\n\\tpadding: 0;\\n}\\n\\n/*\\n** Table of contents\\n*/\\n\\n.tc-sidebar-lists .tc-table-of-contents {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-table-of-contents button,\\n.tc-table-of-contents .toc-item-muted {\\n\\tcolor: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents svg {\\n\\twidth: 0.7em;\\n\\theight: 0.7em;\\n\\tvertical-align: middle;\\n\\tfill: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents ol {\\n\\tlist-style-type: none;\\n\\tpadding-left: 0;\\n}\\n\\n.tc-table-of-contents ol ol {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-table-of-contents li {\\n\\tfont-size: 1.0em;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li a {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-table-of-contents li li a {\\n\\tfont-weight: normal;\\n}\\n\\n.tc-table-of-contents li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.5;\\n}\\n\\n.tc-table-of-contents li li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-tabbed-table-of-contents {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents {\\n\\tz-index: 100;\\n\\tdisplay: inline-block;\\n\\tpadding-left: 1em;\\n\\tmax-width: 50%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n\\tbackground: \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tdisplay: block;\\n\\tpadding: 0.12em 1em 0.12em 0.25em;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-background>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-background>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\\n\\ttext-decoration: none;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tbackground: \u003C\u003Ccolour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tmargin-right: -1px;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-left: 1.5em;\\n\\tpadding-right: 1.5em;\\n\\tborder: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\t-webkit-flex: 1 0 50%;\\n\\tflex: 1 0 50%;\\n}\\n\\n/*\\n** Dirty indicator\\n*/\\n\\nhtml body svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-clean {\\n\\tvisibility: visible;\\n}\\n\\nhtml body svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-dirty {\\n\\tvisibility: hidden;\\n}\\n\\nhtml body.tc-dirty svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-clean {\\n\\tvisibility: hidden;\\n}\\n\\nhtml body.tc-dirty svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-dirty {\\n\\tvisibility: visible;\\n}\\n\\nhtml body.tc-dirty span.tc-dirty-indicator, html body.tc-dirty span.tc-dirty-indicator svg {\\n\\tfill: \u003C\u003Ccolour dirty-indicator>>;\\n\\tcolor: \u003C\u003Ccolour dirty-indicator>>;\\n}\\n\\n/*\\n** File inputs\\n*/\\n\\n.tc-file-input-wrapper {\\n\\tposition: relative;\\n\\toverflow: hidden;\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-file-input-wrapper input[type=file] {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tfont-size: 999px;\\n\\tmax-width: 100%;\\n\\tmax-height: 100%;\\n\\tfilter: alpha(opacity=0);\\n\\topacity: 0;\\n\\toutline: none;\\n\\tbackground: white;\\n\\tcursor: pointer;\\n\\tdisplay: inline-block;\\n}\\n\\n::-webkit-file-upload-button {\\n\\tcursor:pointer;\\n}\\n\\n/*\\n** Thumbnail macros\\n*/\\n\\n.tc-thumbnail-wrapper {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\tmargin: 6px;\\n\\tvertical-align: top;\\n}\\n\\n.tc-thumbnail-right-wrapper {\\n\\tfloat:right;\\n\\tmargin: 0.5em 0 0.5em 0.5em;\\n}\\n\\n.tc-thumbnail-image {\\n\\ttext-align: center;\\n\\toverflow: hidden;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-image svg,\\n.tc-thumbnail-image img {\\n\\tfilter: alpha(opacity=1);\\n\\topacity: 1;\\n\\tmin-width: 100%;\\n\\tmin-height: 100%;\\n\\tmax-width: 100%;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\\n\\tfilter: alpha(opacity=0.8);\\n\\topacity: 0.8;\\n}\\n\\n.tc-thumbnail-background {\\n\\tposition: absolute;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-icon svg,\\n.tc-thumbnail-icon img {\\n\\twidth: 3em;\\n\\theight: 3em;\\n\\t\u003C\u003Cfilter \\\"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\\\">>\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\\n\\tfill: #fff;\\n\\t\u003C\u003Cfilter \\\"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\\\">>\\n}\\n\\n.tc-thumbnail-icon {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tdisplay: -webkit-flex;\\n\\t-webkit-align-items: center;\\n\\t-webkit-justify-content: center;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n\\n.tc-thumbnail-caption {\\n\\tposition: absolute;\\n\\tbackground-color: #777;\\n\\tcolor: #fff;\\n\\ttext-align: center;\\n\\tbottom: 0;\\n\\twidth: 100%;\\n\\tfilter: alpha(opacity=0.9);\\n\\topacity: 0.9;\\n\\tline-height: 1.4;\\n\\tborder-bottom-left-radius: 3px;\\n\\tborder-bottom-right-radius: 3px;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\\n\\tfilter: alpha(opacity=1);\\n\\topacity: 1;\\n}\\n\\n/*\\n** Diffs\\n*/\\n\\n.tc-diff-equal {\\n\\tbackground-color: \u003C\u003Ccolour diff-equal-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-equal-foreground>>;\\n}\\n\\n.tc-diff-insert {\\n\\tbackground-color: \u003C\u003Ccolour diff-insert-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-insert-foreground>>;\\n}\\n\\n.tc-diff-delete {\\n\\tbackground-color: \u003C\u003Ccolour diff-delete-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-delete-foreground>>;\\n}\\n\\n.tc-diff-invisible {\\n\\tbackground-color: \u003C\u003Ccolour diff-invisible-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-invisible-foreground>>;\\n}\\n\\n.tc-diff-tiddlers th {\\n\\ttext-align: right;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tfont-weight: normal;\\n\\tfont-style: italic;\\n}\\n\\n.tc-diff-tiddlers pre {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tborder: none;\\n\\tbackground: none;\\n}\\n\\n/*\\n** Errors\\n*/\\n\\n.tc-error {\\n\\tbackground: #f00;\\n\\tcolor: #fff;\\n}\\n\\n/*\\n** Tree macro\\n*/\\n\\n.tc-tree div {\\n\\tpadding-left: 14px;\\n}\\n\\n.tc-tree ol {\\n\\tlist-style-type: none;\\n\\tpadding-left: 0;\\n\\tmargin-top: 0;\\n}\\n\\n.tc-tree ol ol {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-tree button {\\n\\tcolor: #acacac;\\n}\\n\\n.tc-tree svg {\\n\\tfill: #acacac;\\n}\\n\\n.tc-tree span svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: baseline;\\n}\\n\\n.tc-tree li span {\\n\\tcolor: lightgray;\\n}\\n\\nselect {\\n\\tcolor: \u003C\u003Ccolour select-tag-foreground>>;\\n\\tbackground: \u003C\u003Ccolour select-tag-background>>;\\n}\\n\\n/*\\n** Translink macro\\n*/\\n\\n.tc-translink {\\n\\tbackground-color: \u003C\u003Ccolour pre-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour pre-border>>;\\n\\tpadding: 0 3px;\\n\\tborder-radius: 3px;\\n}\\n\\ndiv.tc-translink > div {\\n\\tmargin: 1em;\\n}\\n\\ndiv.tc-translink > div > a:first-child > h1 {\\n\\tfont-size: 1.2em;\\n\\tfont-weight: bold;\\n}\\n\\nspan.tc-translink > a:first-child {\\n\\tfont-weight: bold;\\n}\\n\\n/*\\n** Classes for displaying globals\\n*/\\n\\n.tc-global-tiddler-body {\\n\\tpadding: 0.25em;\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-global-tiddler-body-heading {\\n\\tmargin: 0 0 0.25em 0;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-global-tiddler-body-type {\\n\\tmargin: 0 0 0.25em 0;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-global-tiddler-body-details {\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-global-tiddler-body pre {\\n\\tmargin: 0;\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n}\\n\\n/*\\n** Utility classes for SVG icons\\n*/\\n\\n.tc-fill-background {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-network-activity-background {\\n\\tfill: \u003C\u003Ccolour network-activity-foreground>>;\\n}\\n\\n/*\\n** Test Cases\\n*/\\n\\n.tc-test-case-wrapper {\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-radius: 6px;\\n}\\n\\n.tc-test-case-wrapper {\\n\\tbackground-color: \u003C\u003Ccolour testcase-accent-level-1>>;\\n}\\n\\n.tc-test-case-wrapper .tc-test-case-wrapper {\\n\\tbackground-color: \u003C\u003Ccolour testcase-accent-level-2>>;\\n}\\n\\n.tc-test-case-wrapper .tc-test-case-wrapper .tc-test-case-wrapper {\\n\\tbackground-color: \u003C\u003Ccolour testcase-accent-level-3>>;\\n}\\n\\n.tc-test-case-header {\\n\\tfont-weight: normal;\\n\\tmargin: 0.5em 0;\\n\\tpadding: 0 0.5em;\\n}\\n\\n.tc-test-case-divider {\\n\\tx-background-color: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-test-case-result-icon {\\n\\tfill: #fff;\\n\\tpadding: 0.25em;\\n\\tdisplay: inline-block;\\n\\tline-height: 0;\\n\\tborder-radius: 1em;\\n\\tvertical-align: text-bottom;\\n\\tmargin-right: 0.25em;\\n}\\n\\n.tc-test-case-result-icon-pass {\\n\\tbackground-color: green;\\n}\\n\\n.tc-test-case-result-icon-fail {\\n\\tbackground-color: red;\\n}\\n\\n.tc-test-case-result-icon svg {\\n\\twidth: 0.5em;\\n\\theight: 0.5em;\\n}\\n\\n.tc-test-case-header > h2 {\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 4px;\\n\\tpadding: 0.25em;\\n}\\n\\n.tc-test-case-header > h2,\\n.tc-test-case-source > pre {\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-header > h2 a.tc-tiddlylink-missing {\\n\\tfont-style: normal;\\n}\\n\\n.tc-test-case-toolbar {\\n\\tfloat: right;\\n}\\n\\n.tc-test-case-toolbar svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n}\\n\\n.tc-test-case-toolbar .tc-drop-down {\\n\\tfont-size: 0.8em;\\n}\\n\\n.tc-test-case-result-fail {\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 4px;\\n\\tmargin: 0 0.5em;\\n\\tpadding: 0;\\n}\\n\\n.tc-test-case-result-fail-header {\\n\\tbackground: \u003C\u003Ccolour diff-delete-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-delete-foreground>>;\\n\\tborder-top-left-radius: 4px;\\n\\tborder-top-right-radius: 4px;\\n\\tpadding: 4px;\\n}\\n\\n.tc-test-case-result-fail-body {\\n\\tpadding: 4px;\\n}\\n\\n.tc-test-case-source > pre {\\n\\theight: 100%;\\n}\\n\\n.tc-test-case-narrative {\\n\\tpadding: 0.5em;\\n}\\n\\n.tc-test-case-panes {\\n\\tdisplay: flex;\\n\\talign-items: stretch;\\n\\tflex-wrap: wrap;\\n\\tpadding: 0.5em;\\n\\tborder-bottom-left-radius: 6px;\\n\\tborder-bottom-right-radius: 6px;\\n}\\n\\n.tc-test-case-source {\\n\\tflex: 1 0 49%;\\n\\tmin-width: 250px;\\n}\\n\\n.tc-test-case-source .tc-tab-content {\\n\\tbackground: inherit;\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-source .tc-tab-content .tc-field-table {\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-test-case-source .tc-field-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-test-case-source table.tc-field-table {\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-source .tc-tiddler-frame .tc-edit-texteditor {\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-divider {\\n\\tflex: 0 0 1.5%;\\n}\\n\\n.tc-test-case-source .tc-tab-buttons {\\n\\tpadding-top: 0;\\n}\\n\\n.tc-test-case-footer-toolbar {\\n\\tdisplay: flex;\\n\\tjustify-content: flex-end;\\n}\\n\\n.tc-test-case-output {\\n\\tbox-shadow: inset 2px 2px 10px 0px \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 4px;\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tflex: 1 0 49%;\\n\\tmin-width: 250px;\\n\\tpadding: 0.25em 1em;\\n}\\n\\n/*\\n** Flexbox utility classes\\n*/\\n\\n.tc-flex {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-flex-column {\\n\\tflex-direction: column;\\n}\\n\\n.tc-flex-row {\\n\\tflex-direction: row;\\n}\\n\\n.tc-flex-grow-1 {\\n\\tflex-grow: 1;\\n}\\n\\n.tc-flex-grow-2 {\\n\\tflex-grow: 2;\\n}\\n\\n/*\\n** Other utility classes\\n*/\\n\\n/* Horizontal gaps */\\n\\n.tc-tiny-gap {\\n\\tmargin-left: .25em;\\n\\tmargin-right: .25em;\\n}\\n\\n.tc-tiny-gap-left {\\n\\tmargin-left: .25em;\\n}\\n\\n.tc-tiny-gap-right {\\n\\tmargin-right: .25em;\\n}\\n\\n.tc-small-gap {\\n\\tmargin-left: .5em;\\n\\tmargin-right: .5em;\\n}\\n\\n.tc-small-gap-left {\\n\\tmargin-left: .5em;\\n}\\n\\n.tc-small-gap-right {\\n\\tmargin-right: .5em;\\n}\\n\\n.tc-big-gap {\\n\\tmargin-left: 1em;\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-big-gap-left {\\n\\tmargin-left: 1em;\\n}\\n\\n.tc-big-gap-right {\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-word-break {\\n\\tword-break: break-all;\\n}\\n\\n/* Vertical gaps */\\n\\n.tc-tiny-v-gap-bottom {\\n\\tmargin-bottom: 3px;\\n}\\n\\n\"},\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\",\"text\":\"15px\"},\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\",\"text\":\"22px\"},\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\"text\":\"14px\"},\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\"text\":\"20px\"},\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\"text\":\"0px\"},\"$:/themes/tiddlywiki/vanilla/metrics/storytop\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\"text\":\"0px\"},\"$:/themes/tiddlywiki/vanilla/metrics/storyright\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\"text\":\"770px\"},\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\"text\":\"770px\"},\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\",\"text\":\"686px\"},\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\",\"text\":\"960px\"},\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\":{\"title\":\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\",\"text\":\"350px\"},\"$:/themes/tiddlywiki/vanilla/options/stickytitles\":{\"title\":\"$:/themes/tiddlywiki/vanilla/options/stickytitles\",\"text\":\"no\"},\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\":{\"title\":\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\",\"text\":\"fixed-fluid\"},\"$:/themes/tiddlywiki/vanilla/options/codewrapping\":{\"title\":\"$:/themes/tiddlywiki/vanilla/options/codewrapping\",\"text\":\"pre-wrap\"},\"$:/themes/tiddlywiki/vanilla/reset\":{\"title\":\"$:/themes/tiddlywiki/vanilla/reset\",\"type\":\"text/css\",\"text\":\"/*! modern-normalize v2.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\\n\\n/*\\nDocument\\n========\\n*/\\n\\n/**\\nUse a better box model (opinionated).\\n*/\\n\\n*,\\n::before,\\n::after {\\n\\tbox-sizing: border-box;\\n}\\n\\nhtml {\\n\\t/* Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) */\\n\\tfont-family:\\n\\t\\tsystem-ui,\\n\\t\\t'Segoe UI',\\n\\t\\tRoboto,\\n\\t\\tHelvetica,\\n\\t\\tArial,\\n\\t\\tsans-serif,\\n\\t\\t'Apple Color Emoji',\\n\\t\\t'Segoe UI Emoji';\\n\\tline-height: 1.15; /* 1. Correct the line height in all browsers. */\\n\\t-webkit-text-size-adjust: 100%; /* 2. Prevent adjustments of font size after orientation changes in iOS. */\\n\\t-moz-tab-size: 4; /* 3. Use a more readable tab size (opinionated). */\\n\\ttab-size: 4; /* 3 */\\n}\\n\\n/*\\nSections\\n========\\n*/\\n\\nbody {\\n\\tmargin: 0; /* Remove the margin in all browsers. */\\n}\\n\\n/*\\nGrouping content\\n================\\n*/\\n\\n/**\\n1. Add the correct height in Firefox.\\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\\n*/\\n\\nhr {\\n\\theight: 0; /* 1 */\\n\\tcolor: inherit; /* 2 */\\n}\\n\\n/*\\nText-level semantics\\n====================\\n*/\\n\\n/**\\nAdd the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\nabbr[title] {\\n\\ttext-decoration: underline dotted;\\n}\\n\\n/**\\nAdd the correct font weight in Edge and Safari.\\n*/\\n\\nb,\\nstrong {\\n\\tfont-weight: bolder;\\n}\\n\\n/**\\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\\n2. Correct the odd 'em' font sizing in all browsers.\\n*/\\n\\ncode,\\nkbd,\\nsamp,\\npre {\\n\\tfont-family:\\n\\t\\tui-monospace,\\n\\t\\tSFMono-Regular,\\n\\t\\tConsolas,\\n\\t\\t'Liberation Mono',\\n\\t\\tMenlo,\\n\\t\\tmonospace; /* 1 */\\n\\tfont-size: 1em; /* 2 */\\n}\\n\\n/**\\nAdd the correct font size in all browsers.\\n*/\\n\\nsmall {\\n\\tfont-size: 80%;\\n}\\n\\n/**\\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\\n*/\\n\\nsub,\\nsup {\\n\\tfont-size: 75%;\\n\\tline-height: 0;\\n\\tposition: relative;\\n\\tvertical-align: baseline;\\n}\\n\\nsub {\\n\\tbottom: -0.25em;\\n}\\n\\nsup {\\n\\ttop: -0.5em;\\n}\\n\\n/*\\nTabular data\\n============\\n*/\\n\\n/**\\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\\n2. Correct table border color inheritance in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\\n*/\\n\\ntable {\\n\\ttext-indent: 0; /* 1 */\\n\\tborder-color: inherit; /* 2 */\\n}\\n\\n/*\\nForms\\n=====\\n*/\\n\\n/**\\n1. Change the font styles in all browsers.\\n2. Remove the margin in Firefox and Safari.\\n*/\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n\\tfont-family: inherit; /* 1 */\\n\\tfont-size: 100%; /* 1 */\\n\\tline-height: 1.15; /* 1 */\\n\\tmargin: 0; /* 2 */\\n}\\n\\n/**\\nRemove the inheritance of text transform in Edge and Firefox.\\n*/\\n\\nbutton,\\nselect {\\n\\ttext-transform: none;\\n}\\n\\n/**\\nCorrect the inability to style clickable types in iOS and Safari.\\n*/\\n\\nbutton,\\n[type='button'],\\n[type='reset'],\\n[type='submit'] {\\n\\t-webkit-appearance: button;\\n}\\n\\n/**\\nRemove the inner border and padding in Firefox.\\n*/\\n\\n::-moz-focus-inner {\\n\\tborder-style: none;\\n\\tpadding: 0;\\n}\\n\\n/**\\nRestore the focus styles unset by the previous rule.\\n*/\\n\\n:-moz-focusring {\\n\\toutline: 1px dotted ButtonText;\\n}\\n\\n/**\\nRemove the additional ':invalid' styles in Firefox.\\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\\n*/\\n\\n:-moz-ui-invalid {\\n\\tbox-shadow: none;\\n}\\n\\n/**\\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\\n*/\\n\\nlegend {\\n\\tpadding: 0;\\n}\\n\\n/**\\nAdd the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\nprogress {\\n\\tvertical-align: baseline;\\n}\\n\\n/**\\nCorrect the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n::-webkit-inner-spin-button,\\n::-webkit-outer-spin-button {\\n\\theight: auto;\\n}\\n\\n/**\\n1. Correct the odd appearance in Chrome and Safari.\\n2. Correct the outline style in Safari.\\n*/\\n\\n[type='search'] {\\n\\t-webkit-appearance: textfield; /* 1 */\\n\\toutline-offset: -2px; /* 2 */\\n}\\n\\n/**\\nRemove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n::-webkit-search-decoration {\\n\\t-webkit-appearance: none;\\n}\\n\\n/**\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Change font properties to 'inherit' in Safari.\\n*/\\n\\n::-webkit-file-upload-button {\\n\\t-webkit-appearance: button; /* 1 */\\n\\tfont: inherit; /* 2 */\\n}\\n\\n/*\\nInteractive\\n===========\\n*/\\n\\n/*\\nAdd the correct display in Chrome and Safari.\\n*/\\n\\nsummary {\\n\\tdisplay: list-item;\\n}\\n\"},\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\":{\"title\":\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\",\"text\":\"-apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", \\\"Noto Sans\\\", sans-serif, Helvetica, Arial, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\"\"},\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\":{\"title\":\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\",\"text\":\"ui-monospace, \\\"SFMono-Regular\\\", \\\"SF Mono\\\", Menlo, Consolas, \\\"Liberation Mono\\\", monospace\"},\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\":{\"title\":\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\",\"text\":\"fixed\"},\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\":{\"title\":\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\",\"text\":\"auto\"},\"$:/themes/tiddlywiki/vanilla/sticky\":{\"title\":\"$:/themes/tiddlywiki/vanilla/sticky\",\"code-body\":\"yes\",\"text\":\"\u003C$reveal state=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n``\\n.tc-tiddler-title {\\n\\tposition: -webkit-sticky;\\n\\tposition: -moz-sticky;\\n\\tposition: -o-sticky;\\n\\tposition: -ms-sticky;\\n\\tposition: sticky;\\n\\ttop: 0px;\\n\\tbackground: ``\u003C\u003Ccolour tiddler-background>>``;\\n\\tz-index: 500;\\n}\\n\\n``\\n\u003C$list filter=\\\"[range[100]]\\\">\\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text=\u003C\u003CcurrentTiddler>>/>`) {\\nz-index: `\u003C$text text={{{ [[200]subtract\u003CcurrentTiddler>] }}}/>`;\\n}\\n`\\n\u003C/$list>\\n\u003C/$reveal>\\n\"}}}"}
]</script><div id="storeArea" style="display:none;"></div>
<!--~~ Raw markup for the bottom of the body section ~~-->

<!--~~ Load external JavaScripts ~~-->
<script src="https://cdn.jsdelivr.net/gh/wangyenshu/YS_Extension@main/tiddlywikicore-5.3.7.js" onerror="alert('Error: Cannot load https://cdn.jsdelivr.net/gh/wangyenshu/YS_Extension@main/tiddlywikicore-5.3.7.js');"></script>
</body>
</html>


|~ViewToolbar|closeTiddler closeOthers +editTiddler jsonEdit > fields permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
/***
|Name        |VerticalSplitScreenPlugin|
|Description |Opens a new pop-up window with a vertical split view, displaying the current page and another URL in a frameset.|
|Source      |https://github.com/wangyenshu/VerticalSplitScreenPlugin/blob/main/VerticalSplitScreenPlugin.js|
|Version     |0.1|
|Author      |Yanshu Wang, with the help of AI|
|License     |MIT|
|~CoreVersion|2.x|
|Type        |plugin|
!!!!!Documentation
Use the {{{<<VerticalSplitScreen>>}}} macro to display a button that launches the vertical split-screen browser.
It will open in a new pop-up window, prompting for a URL for the right pane.
<<VerticalSplitScreen>>
!!!!!Code
***/
//{{{
config.macros.VerticalSplitScreen = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Create a button element
        var button = document.createElement("button");
        button.innerText = "Open Vertical Split Screen"; // Text displayed on the button
        button.title = "Click to open a vertical split screen view on the current page"; // Tooltip

        // Add basic styling classes for consistency with TiddlyWiki buttons
        button.className = "tiddlyLink button";

        button.onclick = function() {
            var href = location.href;
            // Prompt for the URL for the right frame.
            var website = prompt('Please enter the URL for the right pane:', '') || href;

            // Remove any existing split screen containers or close buttons before creating new ones
            var existingContainer = document.getElementById("verticalSplitScreenContainer");
            if (existingContainer) {
                document.body.removeChild(existingContainer);
            }
            var existingCloseButton = document.getElementById("verticalSplitScreenCloseButton");
            if (existingCloseButton) {
                document.body.removeChild(existingCloseButton);
            }

            // Create the main container for the split view
            var splitContainer = document.createElement("div");
            splitContainer.setAttribute("id", "verticalSplitScreenContainer");
            splitContainer.style.position = "fixed";
            splitContainer.style.left = "0";
            splitContainer.style.top = "0";
            splitContainer.style.width = "100vw";
            splitContainer.style.height = "100vh";
            splitContainer.style.zIndex = "99999"; // High z-index to overlay content
            splitContainer.style.display = "flex"; // Use flexbox for side-by-side layout
            splitContainer.style.border = "none";
            splitContainer.style.margin = "0";
            splitContainer.style.padding = "0";
            splitContainer.style.backgroundColor = "white"; // Ensure background is solid if iframes don't load fully

            // Create the left iframe for the current page
            var leftIframe = document.createElement("iframe");
            leftIframe.style.width = "50%";
            leftIframe.style.height = "100%";
            leftIframe.style.border = "none";
            leftIframe.style.margin = "0";
            leftIframe.style.padding = "0";
            leftIframe.src = href; // Load current page into left iframe

            // Create the right iframe for the specified website
            var rightIframe = document.createElement("iframe");
            rightIframe.style.width = "50%";
            rightIframe.style.height = "100%";
            rightIframe.style.border = "none";
            rightIframe.style.margin = "0";
            rightIframe.style.padding = "0";
            rightIframe.src = website; // Load user-specified website into right iframe

            // Append iframes to the container
            splitContainer.appendChild(leftIframe);
            splitContainer.appendChild(rightIframe);

            // Append the container to the document body
            document.body.appendChild(splitContainer);

            // Create a close button for the split view
            var closeButton = document.createElement("button");
            closeButton.innerText = "Close Split View";
            closeButton.style.position = "fixed";
            closeButton.style.top = "10px";
            closeButton.style.right = "10px";
            closeButton.style.zIndex = "100000"; // Higher than iframe container
            closeButton.style.padding = "5px 10px";
            closeButton.style.borderRadius = "5px";
            closeButton.style.backgroundColor = "#ff4d4d"; // Red color
            closeButton.style.color = "white";
            closeButton.style.border = "none";
            closeButton.style.cursor = "pointer";
            closeButton.setAttribute("id", "verticalSplitScreenCloseButton");

            closeButton.onclick = function() {
                var containerToRemove = document.getElementById("verticalSplitScreenContainer");
                if (containerToRemove) {
                    document.body.removeChild(containerToRemove);
                }
                var buttonToRemove = document.getElementById("verticalSplitScreenCloseButton");
                if (buttonToRemove) {
                    document.body.removeChild(buttonToRemove);
                }
            };
            document.body.appendChild(closeButton);

            return false; // Prevent default button action
        };

        // Append the main plugin button to the place where the macro is called
        place.appendChild(button);
    }
};
//}}}
/***
|Name|innerTW5Plugin|
|Source|https://github.com/wangyenshu/innerTW5Plugin/blob/main/innerTW5Plugin.js|
|Author|Yanshu Wang|
|Version|0.1|
|Type|plugin|
|Description|Embedded Tiddlywiki5 frame inside Tiddlywiki Classic, allowing users to use Tiddlywiki5 Plugins inside Tiddlywiki classic.|
|License|MIT|
!Usage
{{{
<<innerTW5Plugin tid:"innerTW5PluginDemo" tid:"innerTW5PluginMultiDemo" width:"80%" height:"400px">>
}}}
<<innerTW5Plugin tid:"innerTW5PluginDemo" tid:"innerTW5PluginMultiDemo" width:"80%" height:"400px">>
!Documentation
This macro will append the content inside the tiddler that the 'tid' parameter calls inside this place in [[TW5Sandbox]]
{{{
<!--~~ Ordinary tiddlers ~~-->
<script class="tiddlywiki-tiddler-store" type="application/json">[
]</script><div id="storeArea" 
}}}
in order. In the example, it will append the content in [[innerTW5PluginDemo]] then append the content in [[innerTW5PluginMultiDemo]] to that place in [[TW5Sandbox]] and display it in an iframe.
So the content should be in JSON format, see [[innerTW5PluginDemo]] for an example.
Edit the template TW5 in [[TW5Sandbox]].
The default tiddler for [[TW5Sandbox]] is configured as {{{TW5Sandbox}}}.
Example [[innerTW5PluginDemoD3]] shows how to use D3 plugin in TW5 in TWC.
This macro works for Firefox but not Chrome. Since Chrome does not support loading iframe of size greater than 2MB.

The following bookmarklet simplify the json editing:
{{{
javascript:w=window.open('','Links','scrollbars,resizable,width=640,height=550');w.document.write('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>TiddlyWiki Tiddler JSON Editor</title><style>body{font-family:\'Inter\',sans-serif;margin:0;padding:20px;min-height:100vh;display:flex;align-items:center;justify-content:center;background-color:#f0f0f0;}@media(max-width:768px){body{padding:10px;}.container{padding:15px;}.flex-buttons%20button{width:100%;min-width:unset;}.message-box-content{padding:15px;}}@media(min-width:769px){.container{max-width:800px;}}.container{background-color:#fff;padding:30px;border-radius:10px;box-shadow:0%204px%2015px%20rgba(0,0,0,.1);width:100%;box-sizing:border-box;}h1{text-align:center;margin-bottom:20px;}p{text-align:center;margin-bottom:20px;}textarea,input[type="text"]{width:100%;padding:8px;margin-bottom:10px;border:1px%20solid%20#ccc;border-radius:4px;box-sizing:border-box;}textarea{resize:vertical;}button{padding:10px%2015px;border:none;border-radius:5px;cursor:pointer;background-color:#007bff;color:white;margin-right:10px;}button:hover{background-color:#0056b3;}#fieldEditor,#jsonOutput,#messageBox{display:none;}#messageBox{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.75);display:flex;align-items:center;justify-content:center;}#messageBox>div{background-color:white;padding:20px;border-radius:8px;box-shadow:0%204px%2010px%20rgba(0,0,0,.2);max-width:400px;width:100%;text-align:center;}#messageText{margin-bottom:15px;}.flex-buttons{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:20px;}.flex-buttons%20button{flex:1;min-width:120px;}.field-group{margin-bottom:10px;}.border-top{border-top:1px%20solid%20#eee;padding-top:20px;margin-top:20px;}</style></head><body><div%20class="container"><h1>TiddlyWiki%20Tiddler%20JSON%20Editor</h1><p>Paste%20a%20tiddler\'s%20JSON%20below%20to%20edit%20its%20fields.<br>Modify%20the%20fields,%20then%20click%20"Generate%20JSON"%20to%20see%20the%20updated%20output.</p><div%20id="initialJsonInput"><label%20for="inputJson">Paste%20Tiddler%20JSON%20Here:</label><textarea%20id="inputJson"rows="10"placeholder=\'{\n%20%20%20%20"title":%20"My%20Example%20Tiddler",\n%20%20%20%20"text":%20"This%20is%20some%20example%20text%20for%20the%20tiddler.%20You%20can%20[[edit]]%20it.",\n%20%20%20%20"tags":%20"example%20demo",\n%20%20%20%20"created":%20"20250622100000000",\n%20%20%20%20"modified":%20"20250622100000000",\n%20%20%20%20"modifier":%20"TiddlyWikiUser",\n%20%20%20%20"type":%20"text/vnd.tiddlywiki",\n%20%20%20%20"customField1":%20"Custom%20Value%201",\n%20%20%20%20"anotherField":%20"Another%20custom%20value"\n}\'></textarea><button%20id="loadJsonButton"style="width:100%;">Load%20Tiddler</button></div><div%20id="fieldEditor"style="display:none;"><h2>Edit%20Tiddler%20Fields</h2><div%20id="field-container"></div><div%20class="border-top"><h3>Add%20New%20Field</h3><div%20style="display:flex;gap:10px;"><input%20type="text"id="newFieldName"style="flex-grow:1;"placeholder="Enter%20new%20field%20name%20(e.g.,%20\'my-custom-field\')"><button%20id="addNewFieldButton">Add%20Field</button></div></div><div%20class="flex-buttons"><button%20id="generateJsonButton">Generate%20JSON</button><button%20id="resetButton">Reset</button></div></div><div%20id="jsonOutput"style="display:none;"><h2>Generated%20Tiddler%20JSON</h2><pre%20id="jsonCode"style="background-color:#f9f9f9;padding:10px;border:1px%20solid%20#ddd;border-radius:4px;overflow:auto;max-height:200px;"></pre><button%20id="copyJsonButton"style="width:100%;margin-top:10px;">Copy%20JSON</button></div><div%20id="messageBox"style="position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.75);display:none;align-items:center;justify-content:center;"><div%20style="background-color:white;padding:20px;border-radius:8px;box-shadow:0%204px%2010px%20rgba(0,0,0,.2);max-width:400px;width:100%;text-align:center;"><p%20id="messageText"style="margin-bottom:15px;"></p><button%20id="messageBoxClose">OK</button></div></div></div><script>function%20showMessageBox(message){const%20messageBox=document.getElementById(\'messageBox\');const%20messageText=document.getElementById(\'messageText\');messageText.textContent=message;messageBox.style.display=\'flex\';}document.getElementById(\'messageBoxClose\').addEventListener(\'click\',()=>{(document.getElementById(\'messageBox\').style.display=\'none\');});const%20inputJsonTextarea=document.getElementById(\'inputJson\');const%20loadJsonButton=document.getElementById(\'loadJsonButton\');const%20fieldEditorDiv=document.getElementById(\'fieldEditor\');const%20initialJsonInputDiv=document.getElementById(\'initialJsonInput\');const%20fieldContainer=document.getElementById(\'field-container\');const%20generateJsonButton=document.getElementById(\'generateJsonButton\');const%20resetButton=document.getElementById(\'resetButton\');const%20jsonOutputDiv=document.getElementById(\'jsonOutput\');const%20jsonCodePre=document.getElementById(\'jsonCode\');const%20copyJsonButton=document.getElementById(\'copyJsonButton\');const%20newFieldNameInput=document.getElementById(\'newFieldName\');const%20addNewFieldButton=document.getElementById(\'addNewFieldButton\');let%20currentTiddlerData=null;const%20fieldInputs={};function%20createFieldInput(fieldName,fieldValue=\'\'){const%20fieldGroup=document.createElement(\'div\');fieldGroup.className=\'field-group\';const%20label=document.createElement(\'label\');label.textContent=fieldName;label.setAttribute(\'for\',`field-${fieldName}`);fieldGroup.appendChild(label);let%20inputElement;if(fieldName===\'text\'){inputElement=document.createElement(\'textarea\');inputElement.rows=8;}else{inputElement=document.createElement(\'input\');inputElement.type=\'text\';}inputElement.id=`field-${fieldName}`;inputElement.name=fieldName;inputElement.value=fieldValue;fieldGroup.appendChild(inputElement);fieldContainer.appendChild(fieldGroup);fieldInputs[fieldName]=inputElement;}function%20loadTiddlerFields(jsonString){try{currentTiddlerData=JSON.parse(jsonString);fieldContainer.innerHTML=\'\';for(const%20key%20in%20fieldInputs){delete%20fieldInputs[key];}const%20sortedFields=Object.keys(currentTiddlerData).sort((a,b)=>{if(a===\'title\')return-1;if(b===\'title\')return%201;if(a===\'text\')return-1;if(b===\'text\')return%201;return%20a.localeCompare(b);});sortedFields.forEach(fieldName=>{createFieldInput(fieldName,currentTiddlerData[fieldName]);});initialJsonInputDiv.style.display=\'none\';fieldEditorDiv.style.display=\'block\';jsonOutputDiv.style.display=\'none\';}catch(e){showMessageBox(\'Invalid%20JSON%20provided.%20Please%20check%20your%20input.\');console.error(\'JSON%20parsing%20error:\',e);}}loadJsonButton.addEventListener(\'click\',()=>{(json=inputJsonTextarea.value.trim());if(json){loadTiddlerFields(json);}else{showMessageBox(\'Please%20paste%20Tiddler%20JSON%20into%20the%20textarea%20first.\');}});addNewFieldButton.addEventListener(\'click\',()=>{(newFieldName=newFieldNameInput.value.trim());if(newFieldName){if(fieldInputs[newFieldName]){showMessageBox(`Field%20"${newFieldName}"%20already%20exists.`);}else{createFieldInput(newFieldName,\'\');newFieldNameInput.value=\'\';}}else{showMessageBox(\'Please%20enter%20a%20field%20name.\');}});generateJsonButton.addEventListener(\'click\',()=>{(updatedTiddlerData={});for(const%20fieldName%20in%20fieldInputs){if(fieldInputs.hasOwnProperty(fieldName)){updatedTiddlerData[fieldName]=fieldInputs[fieldName].value;}}try{(outputJsonString=JSON.stringify(updatedTiddlerData));jsonCodePre.textContent=outputJsonString;jsonOutputDiv.style.display=\'block\';}catch(e){showMessageBox(\'Error%20generating%20JSON%20from%20fields.%20Please%20check%20your%20field%20values.\');console.error(\'JSON%20stringify%20error:\',e);}});resetButton.addEventListener(\'click\',()=>{(initialJsonInputDiv.style.display=\'block\');fieldEditorDiv.style.display=\'none\';jsonOutputDiv.style.display=\'none\';inputJsonTextarea.value=inputJsonTextarea.placeholder;fieldContainer.innerHTML=\'\';currentTiddlerData=null;for(const%20key%20in%20fieldInputs){delete%20fieldInputs[key];}});document.addEventListener(\'DOMContentLoaded\',()=>{(inputJsonTextarea.value=inputJsonTextarea.placeholder);});copyJsonButton.addEventListener(\'click\',async()=>{(jsonText=jsonCodePre.textContent);if(jsonText){try{await%20navigator.clipboard.writeText(jsonText);showMessageBox(\'JSON%20copied%20to%20clipboard!\');}catch(err){showMessageBox(\'Failed%20to%20copy%20JSON%20to%20clipboard.%20Your%20browser%20might%20require%20user%20interaction%20or%20permissions%20to%20copy.\');console.error(\'Copy%20to%20clipboard%20failed:\',err);}}else{showMessageBox(\'No%20JSON%20to%20copy!\');}});</script></body></html>');
}}}
!Todo
Reduce the size of [[TW5Sandbox]].
Add a parameter to configure default tiddler in [[TW5Sandbox]].
!Credit
The example [[innerTW5PluginDemoD3]] use tiddlers in https://tiddlywiki.com/plugins/tiddlywiki/d3/.
***/
//{{{
config.macros.innerTW5Plugin = {
    handler: function(place, macroName, params, wikifier, paramString, tiddler) {
        // Parse parameters "tid", "width", and "height"
        var paramsObj = paramString.parseParams("tid width height", null, true)[0] || {};
        var tidList = paramsObj.tid || [];
        var iframeWidth = (paramsObj.width && paramsObj.width.length) ? paramsObj.width[0] : "100%";
        var iframeHeight = (paramsObj.height && paramsObj.height.length) ? paramsObj.height[0] : "600px";
        
        if(tidList.length === 0) {
            createTiddlyText(place, "No tiddler names provided");
            return;
        }
        
        // Retrieve the TW5Sandbox tiddler which contains the basic TW5 HTML template.
        var sandbox = store.getTiddlerText("TW5Sandbox");
        if(!sandbox) {
            createTiddlyText(place, "TW5Sandbox tiddler not found");
            return;
        }
        
        // Locate the insertion marker and the <script> tag that holds the JSON tiddler store.
        var marker = "<!--~~ Ordinary tiddlers ~~-->";
        var markerIndex = sandbox.indexOf(marker);
        if(markerIndex === -1) {
            createTiddlyText(place, "Insertion marker not found in TW5Sandbox");
            return;
        }
        var scriptTag = '<script class="tiddlywiki-tiddler-store" type="application/json">';
        var scriptStart = sandbox.indexOf(scriptTag, markerIndex);
        if(scriptStart === -1) {
            createTiddlyText(place, "Script tag not found in TW5Sandbox");
            return;
        }
        var scriptEnd = sandbox.indexOf("</script>", scriptStart);
        if(scriptEnd === -1) {
            createTiddlyText(place, "Script closing tag not found in TW5Sandbox");
            return;
        }
        
        // Extract the JSON content between the script tags.
        var jsonStart = sandbox.indexOf(">", scriptStart) + 1;
        var jsonContent = sandbox.substring(jsonStart, scriptEnd).trim();
        if(jsonContent.slice(-1) !== "]") {
            createTiddlyText(place, "Store JSON content not in expected format");
            return;
        }
        
        // Remove the closing bracket from the JSON array so we can append additional tiddler content.
        var newJsonContent = jsonContent.slice(0, -1).trim();
        
        // Loop over each tid parameter, fetch its content and append it.
        for(var i = 0; i < tidList.length; i++){
            var tContent = store.getTiddlerText(tidList[i]);
            if(!tContent) {
                createTiddlyText(place, "Tiddler '" + tidList[i] + "' not found");
                return;
            }
            // Add a comma separator if necessary.
            if(newJsonContent.length > 1) {
                newJsonContent += ",\n" + tContent;
            } else {
                newJsonContent += tContent;
            }
        }
        // Close the JSON array.
        newJsonContent += "]";
        
        // Rebuild the sandbox HTML with the updated JSON inserted.
        var newSandbox = sandbox.substring(0, jsonStart) + "\n" + newJsonContent + "\n" + sandbox.substring(scriptEnd);
        
        // Create a data URL for the modified HTML and create an iframe.
        var iframeSrc = "data:text/html;charset=utf-8," + encodeURIComponent(newSandbox);
        var iframe = document.createElement("iframe");
        iframe.style.width = iframeWidth;
        iframe.style.height = iframeHeight;
        iframe.src = iframeSrc;
        place.appendChild(iframe);
    }
};
//}}}
{"created":"20250326190612216","text":"TiddlerContent","tags":"","title":"New Tiddler","modified":"20250326190624762"}
<<innerTW5Plugin tid:"D3" tid:"CloudData" tid:"GraphData" tid:"D3Showcase" width:"80%" height:"1000px">>
{"created":"20250326190612217","text":"TiddlerContent2","tags":"","title":"New Tiddler2","modified":"20250326190624763"}