diff --git a/404.html b/404.html index cc04723..470f470 100644 --- a/404.html +++ b/404.html @@ -4,9 +4,9 @@ Waku Documentation - - - + + + @@ -16,6 +16,6 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/_og/07f47bb3880ecbe25150a25d03816a5572df4ac4.png b/_og/07f47bb3880ecbe25150a25d03816a5572df4ac4.png deleted file mode 100644 index 72622fa..0000000 Binary files a/_og/07f47bb3880ecbe25150a25d03816a5572df4ac4.png and /dev/null differ diff --git a/_og/41cc5074a455937223433752a44ceb9849cedbb8.png b/_og/41cc5074a455937223433752a44ceb9849cedbb8.png new file mode 100644 index 0000000..8eeac5b Binary files /dev/null and b/_og/41cc5074a455937223433752a44ceb9849cedbb8.png differ diff --git a/_og/780b8ec066dfe984ee8bfbb7e7e4403b3faf7404.png b/_og/780b8ec066dfe984ee8bfbb7e7e4403b3faf7404.png deleted file mode 100644 index 71b2ab0..0000000 Binary files a/_og/780b8ec066dfe984ee8bfbb7e7e4403b3faf7404.png and /dev/null differ diff --git a/assets/css/styles.7d25f233.css b/assets/css/styles.7d25f233.css deleted file mode 100644 index 409ba8b..0000000 --- a/assets/css/styles.7d25f233.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}[data-theme=dark],html[data-theme=dark]{--ifm-color-scheme:dark}:root,[data-theme=light]{--ifm-color-scheme:light}code,pre code{--lsd-typography-generic-font-family:monospace}.events .theme-doc-breadcrumbs .breadcrumbs__link,.text--capitalize{text-transform:capitalize}.button,.dropdown__link,.footer__item,.text--truncate{white-space:nowrap}.mdx-cta-section .mdx-cta-section--align-center .mdx-cta-button,.mdx-video-section .mdx-video-section--align-center .mdx-cta-button{margin-inline:auto}.mdx-cta-section--full-width .mdx-cta-section__link,.mdx-video-section--full-width .mdx-video-section__link{grid-area:2/2/3/3}.toggleButton_dl49,html{-webkit-tap-highlight-color:transparent}*,.dropdownNavbarItem_o23I,.events .theme-doc-breadcrumbs .breadcrumbs__item--active,.mdx-event-info__container,.mdx-news-card__external-link-icon,.mdx-numbers-view-number,.root_xZfc,.toggle_K23S{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.dropdown__menu,.menu__list,.root_N57j ul li{list-style:none}:root{--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-radius:0.4rem;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-weight-light:300;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-color:var(--ifm-font-color-base);--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-color:var(--ifm-color-white);--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-sidebar-width:83vw;--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{background-color:rgb(var(--lsd-surface-primary));height:auto!important}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.blog-archive-page .main-wrapper main>section,.margin-top--none,.mdx-grid>.mdx-grid__content .mdx-news-card .mdx-news-card__title,.tabItem_LNqP{margin-top:0!important}.margin-bottom--none,.markdown>:last-child{margin-bottom:0!important}.main-wrapper>.container,.margin-vert--none{margin-bottom:0!important;margin-top:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit;color:rgb(var(--lsd-text-primary))}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);overflow:auto;padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}.sub1,h1{font-size:var(--ifm-h1-font-size)}.sub2,h2{font-size:var(--ifm-h2-font-size)}.sub3,h3{font-size:var(--ifm-h3-font-size)}.sub4,h4{font-size:var(--ifm-h4-font-size)}.sub5,h5{font-size:var(--ifm-h5-font-size)}.sub6,h6,small{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading));letter-spacing:-1.5px}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){-webkit-text-decoration:none;text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_uzNF .wordWrapButtonIcon_b1P5{color:var(--ifm-color-primary)}.text--secondary,[data-theme=dark] .root_JWD1>div>div{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--lowercase{text-transform:lowercase}.alert__heading,.mdx-hero-title--uppercase,.text--uppercase,table td strong,table th{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.dropdown__link,.dropdown__link--active,.dropdown__link:hover,.menu__link:hover,.navbar__brand:hover,.navbar__link--active,.navbar__link:hover,.pagination-nav__link:hover,.pagination__link:hover{-webkit-text-decoration:none;text-decoration:none}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);-webkit-text-decoration:none;text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.breadcrumbs__item,.close:hover,.table-of-contents__link--active code{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.admonitionIcon_BGV6,.root_JWD1>span svg{vertical-align:middle}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color)}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%);display:none}.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after,.menu__list-item-collapsible>a[aria-expanded=false]>svg{transform:rotate(90deg)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_hrrU article>:first-child,.docItemContainer_hrrU header+*,.footer__item,.mdx-roadmap .mdx-cta-button{margin-top:0}.admonitionContent_iozl>:last-child,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.main-wrapper>main,.table-of-contents,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.external-link,.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;visibility:hidden;left:0;bottom:0}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color)}.menu__caret:before,.menu__link--sublist-caret:after{content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.icon_S7Kx,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color)}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.blog-wrapper>.container>.row>aside>nav>ul li,.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color)}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.footer,.row{position:relative}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);position:relative;text-align:left;top:-.5rem}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.footer>div,.grid{grid-template-columns:repeat(24,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover)}.blog-wrapper>.container>.row>aside>nav>div:first-child,.blog-wrapper>.container>.row>aside>nav>ul li a{border-left:1px solid #0000;font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important}.blog-wrapper main a:hover,.content_knG7 a,.dropdown__link:hover,.footer__item a,.markdown a,.markdown a:hover,.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>a:hover,article a,article a:hover{-webkit-text-decoration:underline;text-decoration:underline}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar__left-items>.navbar__item:first-of-type,.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);background-color:#0000!important;--content-padding:16px;--container-max-width:1072px;--pagination-nav-margin-top:96px;--ifm-navbar-link-color:rgb(var(--lsd-text-primary));--ifm-navbar-background-color:rgb(var(--lsd-surface-primary));--ifm-dropdown-link-color:rgb(var(--lsd-text-primary));--ifm-dropdown-hover-background-color:rgb(var(--lsd-surface-secondary));--ifm-background-color:rgb(var(--lsd-surface-primary));--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-primary:rgb(var(--lsd-theme-primary));--ifm-color-secondary:rgb(var(--lsd-theme-secondary));--prism-background-color:rgb(var(--lsd-theme-primary));--ifm-color-gray-0:rgb(var(--lsd-surface-primary));--ifm-color-gray-100:#f8f8fa;--ifm-color-gray-200:#f7f7f8;--ifm-color-gray-300:#eeeef0;--ifm-color-gray-400:#c0c0c2;--ifm-color-gray-500:#828285;--ifm-color-gray-600:#474747;--ifm-color-gray-700:#373738;--ifm-color-gray-800:#1a1a1a;--ifm-color-gray-900:#151515;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-font-color-base-inverse:var(--ifm-color-black);--docusaurus-highlighted-code-line-bg:#ffffff26;--ifm-card-background-color:var(--ifm-color-gray-100)!important;--ifm-alert-foreground-color:var(--ifm-color-gray-700);--ifm-button-background-color:rgb(var(--lsd-surface-primary));--ifm-global-border-width:1px;--ifm-global-radius:0.6rem;--ifm-hover-overlay:#0000000d;--ifm-font-family-base:var(--lsd-typography-generic-font-family);--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--lgs-font-family-secondary:Georgia,"Times New Roman",serif;--ifm-font-size-base:100%;--ifm-line-height-base:1.625;--ifm-font-size-secondary:100%;--ifm-line-height-secondary:1.5;--ifm-font-weight-light:400;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:400;--ifm-font-weight-bold:600;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-h1-font-size:var(--lsd-h1-fontSize);--ifm-h2-font-size:var(--lsd-h2-fontSize);--ifm-h3-font-size:var(--lsd-h3-fontSize);--ifm-h4-font-size:var(--lsd-h4-fontSize);--ifm-h5-font-size:var(--lsd-h5-fontSize);--ifm-h6-font-size:var(--lsd-h6-fontSize);--ifm-global-spacing:24px;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:0.75rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:24px;--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-code-background:rgb(var(--lsd-text-primary))!important;--ifm-pre-padding:1.125rem;--ifm-link-decoration:none;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-border-left-width:3px;--ifm-blockquote-shadow:none;--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-button-padding-vertical:0.4rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-border-radius:var(--ifm-global-radius);--ifm-card-horizontal-spacing:var(--ifm-spacing-horizontal);--ifm-card-vertical-spacing:var(--ifm-spacing-vertical);--ifm-footer-link-horizontal-spacing:0;--ifm-footer-padding-horizontal:var(--content-padding);--ifm-footer-padding-vertical:24px;--ifm-footer-background-color:#0000;--ifm-menu-link-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-menu-link-padding-vertical:0.25rem;--ifm-menu-color:rgb(var(--lsd-text-primary),0.6);--ifm-menu-color-background-active:#0000;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-height:64px;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-padding-horizontal:var(--content-padding);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)/3);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:100vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pills-spacing:0.125rem;--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--ifm-alert-background-color:#0000;--ifm-color-secondary-contrast-background:#0000;--ifm-color-success-contrast-background:#0000;--ifm-color-info-contrast-background:#0000;--ifm-color-warning-contrast-background:#0000;--ifm-color-danger-contrast-background:#0000;--ifm-alert-border-radius:none;--note:#d4d5d8;--tip:#6ace4b;--caution:#ddaa39;--danger:#e46967;--info:#68b1d0;--ifm-color-secondary-dark:var(--note);--ifm-color-secondary-light:var(--note);--ifm-color-success-dark:var(--tip);--ifm-color-success-light:var(--tip);--ifm-color-info-dark:var(--info);--ifm-color-info-light:var(--info);--ifm-color-warning-dark:var(--caution);--ifm-color-warning-light:var(--caution);--ifm-color-danger-dark:var(--danger);--ifm-color-danger-light:var(--danger);--ifm-footer-link-color:rgb(var(--lsd-text-primary));--ifm-color-content-secondary:rgb(var(--lsd-text-primary));--ifm-hero-background-color:#f8f8fa;--ifm-hero-text-color:var(--ifm-color-black);--desktop-footer-gap:200px;--mobile-footer-gap:144px;--doc-grid-gap:16px;--ifm-table-background:#0000!important;--ifm-table-stripe-background:#0000!important;--ifm-pre-border-radius:0!important;--ifm-code-font-size:100%!important;--doc-sidebar-width:16.66vw!important;--doc-sidebar-max-width:320px;--ifm-navbar-item-padding-vertical:8px;--ifm-navbar-item-padding-horizontal:12px;--docusaurus-announcement-bar-height:auto;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--mobile-width:100%;--mobile-height:176px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}body,html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100%}main{min-height:calc(100vh - var(--ifm-navbar-height) - var(--content-padding))}svg *{fill:rgb(var(--lsd-text-primary))}.grid{display:grid;gap:16px}.table-of-contents__link--active,.table-of-contents__link:hover{color:rgb(var(--lsd-text-primary))!important}h1{font-size:var(--lsd-h1-fontSize);font-weight:var(--lsd-h1-fontWeight);line-height:var(--lsd-h1-lineHeight)}h1,h2,h3,h4{font-family:var(--lsd-typography-generic-font-family)}h2{font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight)}h3{font-size:var(--lsd-h3-fontSize);font-weight:var(--lsd-h3-fontWeight);line-height:var(--lsd-h3-lineHeight)}h4{font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight)}code{background:#ffffff26;border-radius:0;color:rgb(var(--lsd-text-primary));background:rgba(var(--lsd-theme-primary),.1)}pre code{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-body1-fontSize)!important;font-weight:var(--lsd-body1-fontWeight)!important;line-height:var(--lsd-body1-lineHeight)!important}.theme-doc-footer-edit-meta-row div[class*=lastUpdated_] b,table td strong,table th{font-weight:400!important}.mdx-page body{overflow-x:hidden!important}.mdx-page h2{margin-top:unset!important}.alert,.card,.theme-code-block{box-shadow:none!important}.menu__list-item-collapsible>a,.navbar{box-shadow:none}.sans{font-family:var(--lgs-font-family-secondary);line-height:var(--ifm-line-height-secondary)}.blog-wrapper--index [itemprop=blogPost] .markdown,.external-link,.footer__bottom,.footer__copyright,.menu__list-item .menu__link,.theme-doc-footer-edit-meta-row div[class*=lastUpdated_],table{font-size:var(--lsd-body2-fontSize)!important;font-weight:var(--lsd-body2-fontWeight)!important;line-height:var(--lsd-body2-lineHeight)!important;font-family:var(--lsd-typography-generic-font-family)!important}.markdown a,.markdown a:hover,article a,article a:hover{text-decoration-color:inherit;text-decoration-color:rgba(var(--lsd-text-primary),.6);text-underline-offset:.3rem}.card{padding:var(--ifm-spacing-vertical) var(--ifm-spacing-horizontal);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.mdx-cta-section--no-border,.mdx-cta-section--no-border>*,.mdx-feature-list--border-none,.mdx-video-section--no-border,.mdx-video-section--no-border>*,.table-of-contents__left-border{border:none!important}.menu__link{align-items:center;display:flex;justify-content:space-between}.menu__link span{color:rgba(var(--lsd-text-primary),.6)}.theme-edit-this-page{align-items:center;display:flex;gap:12px}.menuExternalLink_NmtK,.navbar__inner,.navbar__item{align-items:center}.dropdown__link:hover{color:rgb(var(--lsd-text-secondary))}.blog-wrapper>.container>.row>aside>nav>ul li a:hover,.breadcrumbs__item--active,.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.breadcrumbs__item:not(:last-child):after{background:none;content:"/";opacity:1}.breadcrumbs__link{background:#0000!important;padding:0}.navbar{height:var(--ifm-navbar-height)}.navbar__logo,a[class^=sidebarLogo_] img{height:40px}a[class^=sidebarLogo_]{margin-left:-16px!important;margin:0}.dropdown__link--active{color:rgb(var(--lsd-text-secondary))!important;background-color:#0000}.row{margin:0}.theme-doc-version-banner *,.theme-doc-version-banner:hover *{color:#fff;text-decoration-color:#fff!important}.navbar__left-items>a:not(:last-child){margin-right:1.25rem}.navbar__left-items>a:not(:last-child)[href^="/"]{margin-right:1.75rem}.menu__link--sublist-caret:after{background:none;content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTQgOS41My45NC45NEw4IDcuNDE3bDMuMDYgMy4wNTMuOTQtLjk0LTQtNHoiLz48L3N2Zz4=);filter:unset;height:unset;min-width:unset;width:unset}.menu__list-item--collapsed>.menu__link--sublist-caret:after{transform:rotate(0)!important}.menu__link--active{border-radius:0}.dropdown__menu,.pagination-nav__link{border:1px solid rgb(var(--lsd-border-primary))}.menu__link--active span{color:rgb(var(--lsd-text-primary))}.table-of-contents a{padding-left:16px}.table-of-contents__link--active{border-left:1px solid rgb(var(--lsd-border-primary));padding-left:16px}.cursor-pointer{cursor:pointer}.navbar__item{display:inline-flex;padding:0}.mdx-accordion-item,.navbar__link--active{border-bottom:1px solid rgb(var(--lsd-border-primary))}.dropdown__menu{background:rgb(var(--lsd-surface-primary));border-radius:0;margin-right:-1px;margin-top:6px;padding:0;transition-duration:0ms}.dropdown__link{background-color:#0000;border-radius:0;margin:0;padding:5px 11px}.dropdown__link *{text-decoration:inherit!important}.dropdown__link:hover{background-color:#0000}.margin-left-8,.mdx-jpd__external-link-icon{margin-left:8px}.pagination-nav{margin-top:var(--pagination-nav-margin-top)!important}.overflow-hidden,.pagination-nav a{overflow:hidden}.theme-admonition,table{overflow:auto}.pagination-nav span{display:-webkit-box;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;width:70%;word-break:break-word}.pagination-nav__link{align-items:center;border-radius:0;display:flex;gap:18px;padding:10px 14px}.theme-doc-version-badge,table td,table th,table thead>tr{border:1px solid rgb(var(--lsd-border-primary))}.pagination-nav__link--next{grid-column:2/3;text-align:right;justify-content:flex-end}.footer__item a svg,.menu__caret,.pagination-nav__label:after,.pagination-nav__label:before,.theme-doc-footer-edit-meta-row div[class*=lastUpdated_] small{display:none}.no-breadcrumbs .theme-doc-breadcrumbs,.theme-back-to-top-button{display:none!important}.footer__link-item,.tag_NdBD{display:inline-block}.lsd-collapse__content{padding:24px}.theme-doc-version-badge{background:#0000;color:rgb(var(--lsd-text-primary));margin-bottom:16px;padding:4px 8px}.navbar__right-items{align-items:center;display:flex}table{border-collapse:collapse;margin-bottom:var(--ifm-spacing-vertical);display:table;table-layout:fixed;width:100%}table th{text-align:left}table td{color:var(--ifm-table-cell-color)}.theme-doc-footer{margin-bottom:96px}.theme-doc-footer-edit-meta-row div[class*=lastUpdated_]{font-style:normal;opacity:.7}.navbar-sidebar__item{padding-block:0;padding-inline:var(--content-padding)}.navbar-sidebar__back{align-items:center;display:flex;gap:16px;margin:24px 0!important;padding:0;width:100%!important}.theme-doc-sidebar-menu .menu__link{padding-left:var(--content-padding);padding-right:0}.menu__list-item-collapsible>a[aria-expanded=true]>svg{transform:rotate(180deg)}.events .pagination-nav,.events aside,.menu__list-item-collapsible>a>svg,.news .theme-doc-sidebar-container,.news header h1{display:none}main[itemtype*=Blog]{margin-left:0}.mdx-ghc-subheader-text,main[itemtype*=Blog] .theme-doc-breadcrumbs{margin-bottom:40px}main[itemtype*=Blog] .blog-divider{background:rgb(var(--lsd-theme-primary));margin-block:40px}.events .theme-doc-markdown>h1{margin-bottom:16px!important}.events .breadcrumbs__item,.events .breadcrumbs__link{-webkit-text-decoration:none;text-decoration:none}.events .theme-doc-breadcrumbs{display:block}.full-width>div .main-wrapper main{grid-column:1/17!important}.news .news-title{display:flex;font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h1-fontSize);font-weight:var(--lsd-h1-fontWeight);gap:16px;line-height:var(--lsd-h1-lineHeight);margin-bottom:0!important}.news .news-title span,.theme-code-block:hover .buttonGroup_M5ko button{opacity:.4}.footer__links>div:first-of-type,.footer__links>div:nth-of-type(3),.mdx-event-profile__title{margin-bottom:8px}.footer__links>div:nth-of-type(2){margin-bottom:34px}.container{padding-inline:var(--content-padding)}.main-wrapper>main,.main-wrapper>main>.row,.main-wrapper>main>.row>.col{--ifm-spacing-horizontal:var(--content-padding);flex-basis:100%!important;flex:unset;margin:0;max-width:unset;width:100%!important}.footer{margin-bottom:18px;width:100%!important}.footer>div{display:grid;gap:1rem;max-width:unset;padding:24px 0 0}.footer__bottom{grid-column:1/12;grid-row:1/1;text-align:unset}.blog-archive-page .main-wrapper header .container p,.blog-wrapper main>section article ul li a:after,.blog-wrapper main>section article ul li a:before,.docSidebarContainer_YfHR,.footer__bottom>div:first-of-type,.hidden,.mdx-accordion-item>input,.sidebarLogo_Ydl9,.theme-doc-toc-desktop,.themedComponent_mlkZ,.themedImage_kfRS,[data-hidden-doc-sidebar=true] .theme-doc-sidebar-container,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.footer__title{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-label1-fontSize)!important;font-weight:var(--lsd-label1-fontWeight)!important;font-weight:var(--ifm-font-weight-normal);line-height:var(--lsd-label1-lineHeight)!important;margin-bottom:4px}.blog-wrapper main>section article ul li .lsd-tag>span,.blog-wrapper main>section article ul li .lsd-tag>span>span,.footer__item,.footer__item a{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-label1-fontSize)!important;font-weight:var(--lsd-label1-fontWeight)!important;line-height:var(--lsd-label1-lineHeight)!important}.footer>div:first-child>.footer__links,.footer>div:nth-child(2)>.footer__links{display:grid;grid-column:13/25;grid-row:1/1;margin-bottom:0}.footer>div:nth-child(2)>.footer__links{gap:2rem 1rem;grid-template-columns:repeat(2,1fr)}.footer__col{grid-template-columns:span c}.blog-wrapper main>section article ul li a,.codeBlockStandalone_MEMb,.col.footer__col,.modal_kLVz>div>div:first-child,.noResults_mD2O,.root_N57j ul,.root_ONDG.empty_a7qb{padding:0}.footer__items{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.footer__item{display:inline-flex}.blog-wrapper .breadcrumbs__item,.blog-wrapper main a,.blog-wrapper--index h2[itemprop=headline]>a,.footer__item:not(:last-child):after{-webkit-text-decoration:none;text-decoration:none}.footer__item:not(:last-child):after{content:"•";display:inline-block;margin-left:8px}.footer__logo{max-width:var(--ifm-footer-logo-max-width);margin:0!important}.navbar__inner{flex-direction:row}.hero--primary{--ifm-hero-background-color:rgb(var(--lsd-surface-primary));--ifm-hero-text-color:rgb(var(--lsd-text-primary))}.docusaurus-mermaid-container{margin-block:40px}.hidden-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hidden-scrollbar::-webkit-scrollbar{display:none;width:0}[class^=mdx-]{--lsd-h1-fontWeight:100;--lsd-h2-fontWeight:300;--lsd-h3-fontWeight:300;--lsd-h4-fontWeight:300;--lsd-h5-fontWeight:300;--lsd-h6-fontWeight:300;--lsd-subtitle1-fontWeight:300}.hidden{opacity:0;visibility:hidden}.blog-wrapper h1[itemprop=headline]{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h1-fontSize)!important;font-weight:var(--lsd-h1-fontWeight)!important;line-height:var(--lsd-h1-lineHeight)!important}.blog-wrapper>.container{display:flex;margin:0;max-width:unset;padding-inline:0;width:100%}.mdx-cta-section .mdx-cta-section--align-right .mdx-cta-button,.mdx-logo-carousel .mdx-section-header__extra,.mdx-video-section .mdx-video-section--align-right .mdx-cta-button{margin-left:auto}.blog-wrapper>.container>.row,.mdx-roadmap,.mdx-scroll-buttons,.two-items{width:100%}.blog-wrapper main>header h1{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important;margin-bottom:.5rem}.blog-wrapper>.container>.row>aside{max-width:unset}.blog-wrapper>.container>.row>aside>nav{padding-top:16px;top:var(--ifm-navbar-height)}.blog-wrapper>.container>.row>aside>nav>div:first-child{font-family:var(--lsd-typography-generic-font-family)!important;margin-bottom:0!important;padding:4px 0 4px 15px}.blog-wrapper>.container>.row>aside>nav>ul li a{box-sizing:border-box;display:block;font-family:var(--lsd-typography-generic-font-family)!important;opacity:.6;padding:4px 0 4px 2rem}.blog-wrapper--index>.container>.row>aside>nav>div:first-child,.blog-wrapper>.container>.row>aside>nav>ul li a[class*=sidebarItemLinkActive_]{border-color:rgb(var(--lsd-border-primary))}.mdx-cta-section,.mdx-cta-section--list .mdx-cta-section__list>:not(:first-child),.mdx-video-section{border-top:1px solid rgb(var(--lsd-border-primary))}.blog-wrapper main article,.mdx-asset-card:not(.mdx-asset-card--downloadable) .mdx-asset-card__inner{border-bottom:1px solid rgb(var(--lsd-border-primary))}.blog-wrapper--index h2[itemprop=headline]{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.blog-wrapper>.container>.row>main{margin-top:16px;max-width:unset}.blog-archive-page .main-wrapper header .container h1,.blog-wrapper article header h2,.blog-wrapper main>section article h2{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.blog-wrapper article footer{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-top:24px!important}.blog-wrapper main article{margin-bottom:34px!important;padding-bottom:34px}.blog-wrapper main article:last-of-type{border-bottom:none!important}.blog-archive-page .main-wrapper{padding:2rem var(--content-padding)}.blog-archive-page .main-wrapper header{border-bottom:1px solid var(--ifm-hero-text-color);margin:0;padding:0 0 1rem}.blog-archive-page .main-wrapper header .container{margin:0;padding:0!important}.blog-archive-page .main-wrapper main>section .container{margin:0;max-width:unset;padding:0}.blog-archive-page .main-wrapper main>section .container>.row,.mdx-logo-carousel-buttons,.mdx-roadmap__timeline{margin-top:64px}.blog-archive-page .main-wrapper main>section .container>.row>.col{margin:0!important;max-width:unset;padding:0}.blog-archive-page .main-wrapper main>section .container>.row>.col h3{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h5-fontSize)!important;font-weight:var(--lsd-h5-fontWeight)!important;line-height:var(--lsd-h5-lineHeight)!important}.blog-archive-page .main-wrapper main>section .container>.row>.col a{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-body1-fontSize)!important;font-weight:var(--lsd-body1-fontWeight)!important;line-height:var(--lsd-body1-lineHeight)!important}.blog-archive-page .main-wrapper main>section .container>.row>.col ul{margin:1rem 0 0;padding:0 0 0 1.5rem}.blog-wrapper main>section article{border-bottom:none;padding:0}.blog-wrapper main>section article ul,.mdx-app-card__name{margin-top:1rem}.blog-wrapper main>section article ul li{margin:0 .5rem 0 0!important;padding:0!important}.blog-wrapper main>section article ul li .lsd-tag{height:28px;padding:3px 11px}.blog-wrapper main>section article ul li .lsd-tag>span,.blog-wrapper main>section article ul li .lsd-tag>span>span{color:rgb(var(--lsd-text-primary))}.header-github-link:hover,.mdx-event-card__label,.mdx-event-info__label{opacity:.6}.header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat}.video-container{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:space-around}.yt-video{flex:1 1 auto;height:432px;max-width:100%}.case-study-container a{display:block;margin-bottom:20px;width:100%}.case-study-container a img,.externalLinkIcon_Qfue svg,.root_TTsz.fullWidth_HBtH{height:auto;width:100%}.mdx-accordion-item__header{align-items:center;display:flex;flex-direction:row;gap:0 16px;justify-content:space-between;min-height:88px;padding:16px 0}.mdx-asset-card,.mdx-erc{min-height:144px;-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-accordion-item__header,.mdx-accordion-item__header *,.mdx-cta-section__list-item-link,.mdx-video-section__list-item-link{cursor:pointer}.mdx-accordion-item__content-wrapper{height:auto;overflow:hidden}.mdx-accordion-item__content{height:0}.mdx-accordion-item--open .mdx-accordion-item__content{height:auto;padding-bottom:1.875rem;padding-top:6px}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=dark] .themedImage--dark_OvIx,[data-theme=light] .themedComponent--light_NVdE,[data-theme=light] .themedImage--light_BL8e,html:not([data-theme]) .themedComponent--light_NVdE,html:not([data-theme]) .themedImage--light_BL8e{display:initial}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.breadcrumbsContainer_RLvU{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:24px}.codeBlockContainer_Ckt0{background:var(--prism-background-color);border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw)}.codeBlockContainer_Ckt0,.codeBlockContainer_EB2s{color:var(--prism-color);margin-bottom:var(--ifm-leading)}.codeBlockContainer_EB2s{background:#0000;border-radius:0}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.content_knG7,.mdx-cta-section .mdx-cta-section--align-center *{text-align:center}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_Vdqa{opacity:1!important}.copyButtonIcons_IEyt{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_TrPX,.copyButtonSuccessIcon_cVMy{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_cVMy{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_Vdqa .copyButtonIcon_TrPX{opacity:0;transform:scale(.33)}.copyButtonCopied_Vdqa .copyButtonSuccessIcon_cVMy{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_b1P5{height:1.2rem;width:1.2rem}.buttonGroup_M5ko{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup_M5ko button{align-items:center;background:var(--prism-background-color);border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);color:var(--prism-color);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup_M5ko button:focus-visible,.buttonGroup_M5ko button:hover{opacity:1!important}.codeBlockContent_QJqH{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_OeMC{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlockTitle_OeMC+.codeBlockContent_QJqH .codeBlock_a8dz{border-top-left-radius:0;border-top-right-radius:0}.collapse_LWBd button,.textField_af43{width:100%!important}.chevron_How5{left:0;position:absolute}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0}.content_knG7 a{color:inherit}.mdx-asset-card__downloadables>* button,.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>a,.mdx-cta-section--list .mdx-cta-section__list>a{-webkit-text-decoration:none;text-decoration:none}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.icon_S7Kx.s_AZDZ svg{width:10px}.icon_S7Kx.m_thRi svg{width:20px}.icon_S7Kx.l_WHPt svg{width:40px}[data-theme=dark] .icon_S7Kx.fill_hNhN,[data-theme=dark] .icon_S7Kx.fill_hNhN *{fill:var(--ifm-color-white)}[data-theme=dark] .icon_S7Kx.stroke_N8dm svg,[data-theme=dark] .icon_S7Kx.stroke_N8dm svg *{stroke:var(--ifm-color-white)}[data-theme=light] .icon_S7Kx.fill_hNhN,[data-theme=light] .icon_S7Kx.fill_hNhN *{fill:var(--ifm-color-black)}[data-theme=light] .icon_S7Kx.stroke_N8dm svg,[data-theme=light] .icon_S7Kx.stroke_N8dm svg *{stroke:var(--ifm-color-black)}.mdx-app-card{align-items:flex-start;display:flex;flex-direction:column;padding:1.5rem 0}.mdx-app-card__logo{height:40px;width:auto}.mdx-app-card__description{margin-top:1.5rem}.mdx-app-card__link{margin-top:1.5rem;width:100%}.mdx-app-card__link button{padding:10px 16px;width:100%}.mdx-app-card__link button>span{align-items:center;display:block;display:flex;flex-direction:row;justify-content:space-between;width:100%}.root_TTsz{display:inline-block;font-size:0!important;position:relative}.root_TTsz.fullHeight_ls1u{height:100%;width:auto}.root_TTsz .content_feMR{height:100%;left:0;position:absolute;top:0;width:100%}.root_TTsz:not(.keep_Y9Ea) .root_TTsz{height:auto;width:auto}.root_TTsz:not(.keep_Y9Ea) .content_feMR{height:100%;left:unset;position:relative;top:unset;width:100%}.mdx-asset-card{align-items:flex-start;border:1px solid rgb(var(--lsd-border-primary));border-bottom:none;display:flex;flex-direction:column;width:216px}.mdx-asset-card__inner{padding:16px 16px 32px;width:100%}.mdx-asset-card__title,.mdx-event-profile-list__container h2,.mdx-event-profile__role,.mdx-ghc__challenge-labels,.mdx-ghc__issue-title{margin-bottom:16px}.mdx-asset-card__image img{height:100%;object-fit:contain;object-position:center center;width:100%}.mdx-asset-card__downloadables{align-items:flex-start;display:flex;flex-direction:row;justify-content:stretch;width:100%}.mdx-asset-card__downloadables>*{flex-grow:1;font-size:12px;-webkit-text-decoration:none!important;text-decoration:none!important;text-underline-offset:unset!important}.mdx-asset-card__downloadables>* button{justify-content:space-between;width:100%}.mdx-asset-card__downloadables>:first-child button{border-left:none}.mdx-asset-card__downloadables>:last-child button,.mdx-asset-card__downloadables>:not(:last-child) button{border-right:none}.mdx-box{padding-bottom:var(--mdx-box-bottom);padding-top:var(--mdx-box-top)}.mdx-cta-button,.mdx-section-header--with-description .mdx-section-header__extra{margin-top:2rem}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>.mdx-cta-section__item-description,.mdx-cta-section__description{margin-top:1rem}.mdx-cta-button button,.mdx-cta-button button span{font-size:inherit;font-weight:inherit;line-height:inherit}.mdx-cta-button .lsd-button--large{padding:9px 39px}.mdx-cta-button .lsd-button--small{padding:5px 11px}.mdx-cta-section,.mdx-video-section{display:grid;padding:24px 0 0}.mdx-cta-section .mdx-cta-section__link,.mdx-jpd__job-link,.mdx-video-section .mdx-video-section__link{display:block;width:fit-content}.mdx-cta-section .mdx-cta-section__header__desktop-button .mdx-cta-button{margin-top:unset}.mdx-cta-section .mdx-cta-section--align-center{align-items:center;display:flex;flex-direction:column;margin:auto;max-width:936px}.mdx-cta-section .mdx-cta-section--align-center .mdx-cta-section__description{margin-top:1.5rem}.mdx-cta-section .mdx-cta-section--align-left *{text-align:left}.mdx-cta-section .mdx-cta-section--align-right *{text-align:right}.mdx-cta-section__header,.mdx-profile-card__profile{align-items:center;display:flex;gap:24px}.mdx-cta-section__header button{font-size:12px!important;line-height:16px!important;padding:6px 12px!important}.mdx-cta-section--title-only .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);font-weight:300;line-height:var(--lsd-h5-lineHeight);max-width:886px}.mdx-cta-section--title-button .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-display4-fontSize);font-weight:var(--lsd-display4-fontWeight);font-weight:300;line-height:var(--lsd-display4-lineHeight);max-width:886px}.mdx-cta-section--full-width .mdx-cta-section__container{display:grid;gap:0 1rem;grid-template-columns:repeat(2,1fr)}.mdx-cta-section--full-width .mdx-cta-section__title,.mdx-ns__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h3-fontSize);font-weight:var(--lsd-h3-fontWeight);line-height:var(--lsd-h3-lineHeight)}.mdx-cta-section--full-width .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-cta-section--simple .mdx-cta-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-cta-section--simple .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-cta-section--list{display:grid;gap:0 1rem;grid-template-columns:1fr 1fr}.mdx-cta-section--list .mdx-cta-section__container{grid-column:1/2}.mdx-cta-section--list .mdx-cta-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-cta-section--list .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-hero h1,.mdx-roadmap .mdx-cta-section__container h3,.mdx-roadmap .mdx-cta-section__description,.mdx-roadmap .mdx-cta-section__title{font-family:var(--lsd-typography-generic-font-family)!important}.mdx-cta-section--list .mdx-cta-section__list{display:flex;flex-direction:column;gap:1.5rem 0;grid-column:2/3}.mdx-cta-section--list .mdx-cta-section__list>a{display:block}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>a>.mdx-cta-section__item-title{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:1rem;color:rgb(var(--lsd-text-primary));display:flex;gap:12px;margin-top:1.5rem;padding:3px 11px;width:fit-content}.mdx-community-feedback .mdx-section-header__title,.mdx-logo-carousel .mdx-section-header__title{flex-basis:100%}.mdx-community-feedback .mdx-community-feedback__description{display:block;margin-bottom:80px;margin-top:24px;max-width:528px}.mdx-community-feedback .mdx-community-feedback__items{align-items:flex-start;display:flex;overflow-x:auto}.mdx-community-feedback .mdx-community-feedback__item{align-self:flex-start;display:flex;flex-direction:column;flex-shrink:0;gap:20px;min-width:296px;width:calc(33.33333% - 10.66667px)}.mdx-community-feedback .mdx-community-feedback__item-header{align-items:center;border-bottom:1px solid rgb(var(--lsd-border-primary));display:flex;justify-content:space-between;padding-bottom:20px}.mdx-community-feedback .mdx-community-feedback__item-content{display:flex;flex:1 1 auto;flex-direction:column;justify-content:flex-start;min-height:180px;position:relative}.mdx-community-feedback .mdx-community-feedback__media-wrapper,.mdx-timeline-item__period-container{position:relative;width:100%}.mdx-community-feedback .mdx-community-feedback__media-wrapper .mdx-community-feedback__item-gradient{background:linear-gradient(to bottom,rgba(var(--lsd-theme-secondary),0) 0,rgba(var(--lsd-theme-secondary),.97) 80%,rgba(var(--lsd-theme-secondary),1) 100%);bottom:0;height:40px;left:0;pointer-events:none;position:absolute;right:0;z-index:2}.mdx-community-feedback .mdx-community-feedback__item-header-user{align-items:center;display:flex;gap:14px;-webkit-text-decoration:none;text-decoration:none}.mdx-erc:hover .mdx-erc__title,.mdx-ghc__issue-title-link:hover,.mdx-ghc__view-on-github-link:hover{-webkit-text-decoration:underline!important;text-decoration:underline!important}.mdx-community-feedback .mdx-community-feedback__item-header-user-image{border-radius:50%;height:48px;width:48px}.mdx-community-feedback .mdx-community-feedback__item-header-user-handle{opacity:.5}.mdx-community-feedback .mdx-community-feedback__item-header-user-info{display:flex;flex-direction:column}.mdx-community-feedback .mdx-community-feedback__item-header-link{margin:12px}.mdx-community-feedback .mdx-community-feedback__item-content-text{display:-webkit-box;overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;align-self:stretch;overflow:hidden;text-overflow:ellipsis}.mdx-erc--with-preview .mdx-erc__icon,.mdx-ns__inner .mdx-ns__toast .lsd-toast__close-button{display:none}.mdx-erc__title,.mdx-event-card__title{-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.mdx-community-feedback .mdx-community-feedback__item-see-more{background:rgb(var(--lsd-theme-secondary));bottom:0;left:0;margin-top:16px;position:absolute;text-align:left;width:100%}.mdx-video-section .mdx-video-section--align-center *,.root_EFVO{text-align:center}.mdx-community-feedback .mdx-community-feedback__item-see-more.static{margin-top:4px;position:static}.mdx-community-feedback .mdx-community-feedback__item-see-more-text{background:none;border:none;cursor:pointer;opacity:.6;padding:0;position:relative}.mdx-community-feedback .mdx-community-feedback__item-see-less-text{bottom:18px;cursor:pointer;opacity:.6;padding:0;position:relative}.mdx-community-feedback .mdx-community-feedback__item-image{margin-top:16px;object-fit:cover;object-position:top;transition:height .3s;width:100%}.mdx-community-feedback .mdx-community-feedback__item-image.collapsed{height:60px}.img_ev3q,.mdx-community-feedback .mdx-community-feedback__item-image.expanded{height:auto}.mdx-community-feedback-buttons,.mdx-table-view-table-title{margin-bottom:32px}.mdx-scroll-buttons>div{display:flex;flex-direction:row;justify-content:flex-end;width:100%}.mdx-scroll-buttons-container{scroll-snap-type:x mandatory}.mdx-scroll-buttons-container>*{scroll-snap-align:start}.mdx-doc-metadata{display:flex;flex-direction:row;line-height:0;margin-bottom:2.5rem}.mdx-doc-metadata>span:not(:last-child):after{content:"•";display:inline-block;margin-inline:.75rem}.markdown h1+.mdx-doc-metadata,.markdown header+.mdx-doc-metadata{margin-top:calc(var(--ifm-h1-vertical-rhythm-bottom)*-1*var(--ifm-leading) + 1rem)}.mdx-erc{align-items:flex-start;border:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:row}.mdx-erc__icon{padding:16px 16px 16px 8px}.mdx-erc__inner{flex-grow:1;padding:16px}.mdx-erc__logo,.mdx-erc__logo svg{height:32px!important;width:32px!important}.mdx-erc__title{display:-webkit-box;margin-top:32px;max-height:calc(var(--lsd-body1-lineHeight)*2)}.mdx-erc__description{margin-top:8px}.mdx-erc--with-preview{display:flex;flex-direction:column}.mdx-erc--with-preview .mdx-erc__preview-image{border-bottom:1px solid rgb(var(--lsd-border-primary));height:100%;object-fit:cover;width:100%}.mdx-erc--with-preview .mdx-erc__inner{display:grid;gap:0 16px;grid-template-columns:32px auto;grid-template-rows:auto auto;padding:16px}.mdx-erc--with-preview .mdx-erc__logo{align-self:center;grid-column:1;grid-row:1/span 2}.mdx-erc--with-preview .mdx-erc__title{margin-top:0;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-height:calc(var(--lsd-body1-lineHeight)*1)}.mdx-erc--with-preview .mdx-erc__description{margin-top:4px}.mdx-feature-list{border-top:1px solid rgb(var(--lsd-surface-secondary));position:relative}.mdx-feature-list__feature,.mdx-ghc__container,.mdx-showcase-card{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-feature-list__title,.root_ltHz{padding:24px 0}.mdx-feature-list__feature-index--circle{align-items:center;background:rgb(var(--lsd-surface-secondary));border-radius:100%;color:rgb(var(--lsd-text-secondary))!important;display:inline-flex;height:1.875rem;justify-content:center;padding:.5rem;width:1.875rem}.mdx-feature-list__feature-index--number{background:#0000;color:rgb(var(--lsd-text-primary))!important;display:block;font-size:28px!important;height:unset;line-height:36px!important;opacity:.3;padding:unset;width:unset}.mdx-feature-list__list{display:grid;grid-template-columns:repeat(2,1fr)}.mdx-event-profile__info,.mdx-feature-list__feature-inner,.mdx-numbers-view-header-title,.roadmap__header{display:flex;flex-direction:column}.mdx-feature-list__feature-title{margin-top:.5rem}.mdx-feature-list__feature-description{max-width:460px}.mdx-feature-list__header{align-items:center;display:flex;flex-direction:row;gap:2rem}.mdx-feature-list--cta-bottom .mdx-feature-list__extra{margin-top:3.5rem;padding:0 1rem}.mdx-feature-list__feature-border--none{width:0!important}.mdx-ghc__container{padding-top:24px}.mdx-ghc__issue-title-link{-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-ghc__header,.mdx-jpd__header{margin-bottom:40px;margin-top:16px}.mdx-ghc__challenge-label{border:1px solid rgb(var(--lsd-border-primary));border-radius:20px;margin-right:8px;padding:4px 8px}.mdx-ghc__view-on-github-link{display:block;margin-bottom:56px;margin-top:40px;-webkit-text-decoration:none!important;text-decoration:none!important;width:fit-content}.mdx-ghc__participant-photo{border:1px solid rgb(var(--lsd-border-secondary));border-radius:100%;margin-left:-4px;width:24px}.mdx-timeline-item,.mdx-timeline-item__border{border-bottom:1px solid rgb(var(--lsd-border-primary))}.mdx-ghc__participant-photo-container{align-items:center;direction:rtl;display:flex;justify-content:flex-end;padding-left:4px}.mdx-ghc__comment-count{margin-left:4px}.mdx-ghc__issue-content-grid{align-items:center;display:grid;grid-template-columns:82px 135px 82px 1fr;margin-top:24px;row-gap:12px}.mdx-hero{--default-z-index:1;--hero-max-height:1080px;display:flex;flex-direction:column;height:calc(100vh - var(--ifm-navbar-height) - 8px);max-height:var(--hero-max-height);position:relative;z-index:var(--default-z-index)}.mdx-hero h1{font-size:var(--lsd-display4-fontSize)!important;font-weight:var(--lsd-display4-fontWeight)!important;line-height:var(--lsd-display4-lineHeight)!important}.mdx-hero--top{justify-content:flex-start}.mdx-hero--center{justify-content:center}.mdx-hero--bottom{justify-content:flex-end}.mdx-hero-action--large button{padding:10px 64px}.mdx-hero-actions{align-items:center;display:flex;flex-direction:row;gap:0 1rem;margin-top:2rem;position:relative;z-index:98}.mdx-hero-description{font-size:18px!important;line-height:24px!important;margin-top:18px;max-width:528px;position:relative;text-shadow:1px 1px 6px rgba(var(--lsd-surface-primary),1);z-index:-2}.mdx-hero-info{display:flex;flex-direction:column;justify-content:end;max-width:596px;padding:32px 0;transition:margin-bottom .05s ease-in-out}.mdx-hero-title{font-size:48px!important;line-height:56px!important}.mdx-jpd__department-title,.mdx-video-section__header button{font-size:12px!important;line-height:16px!important}.mdx-hero-video{display:grid;flex-grow:1;grid-template-columns:1fr;grid-template-rows:1fr;pointer-events:none;position:relative;--hero-video-height:120%;--hero-video-min-height:100vh;--hero-video-offset-y:-150px;--hero-video-scale:1.70951586;--hero-video-height-mobile:120%;--hero-video-min-height-mobile:100vh;--hero-video-offset-y-mobile:-50px;--hero-video-scale-mobile:1.70951586}.mdx-hero-video>*{align-items:center;display:flex;flex-direction:column;grid-column:1/1;grid-row:1/1;height:var(--hero-video-height);justify-content:center;left:0;min-height:var(--hero-video-min-height);position:absolute;top:0;transform:translateY(var(--hero-video-offset-y));width:100%}.mdx-hero-video .mdx-hero-video__placeholder{opacity:0;visibility:hidden}.mdx-hero-video img{object-fit:contain}.mdx-hero-video img,.mdx-hero-video video{height:100%;max-width:calc(var(--container-max-width)*var(--hero-video-scale));object-position:top;transform-origin:top center;width:auto}.mdx-hero-video--loading .mdx-hero-video__video{opacity:0}.mdx-hero-video--loading .mdx-hero-video__placeholder{opacity:1;visibility:visible}.mdx-hero-asset{--default-z-index:-1;position:relative;z-index:var(--default-z-index)}.mdx-hero-asset button{display:none!important}.mdx-hero-asset img{position:absolute;right:0;top:0}.mdx-jpd__single-job-department-container{border-top:1px solid rgb(var(--lsd-border-primary));padding-top:8px}.mdx-jpd__job-title-container{align-items:center;display:flex;padding-bottom:8px}.mdx-jpd__job-list{list-style-type:none;margin:0;padding:8px 0 24px}.mdx-jpd__job-list-item{padding:14px 0}.mdx-jpd__job-link,.mdx-jpd__job-link:hover,.root_Ooa0{-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-event-card__title:hover,.mdx-jpd__job-link:hover .mdx-jpd__job-title,.mdx-news-card:hover .mdx-news-card__title,.mdx-social-card:hover{-webkit-text-decoration:underline!important;text-decoration:underline!important}.mdx-logo-carousel .mdx-logo-carousel__inner{margin-top:32px}.mdx-logo-carousel .mdx-logo-carousel__item{flex-shrink:0}.mdx-logo-carousel .mdx-logo-carousel__logo{height:56px;width:auto}.mdx-ns__inner form{margin-top:40px;width:100%}.mdx-ns__inner .mdx-ns__inputs{align-items:center;display:flex;flex-direction:row;gap:16px;width:100%}.mdx-ns__inner .mdx-ns__inputs>*{flex-grow:1}.mdx-event-card-list__container,.mdx-ns__inner .mdx-ns__submit-button{margin-top:40px}.mdx-ns__inner .mdx-ns__toast{margin-bottom:24px;margin-top:-16px;width:100%}.mdx-profile-card{align-items:flex-start;border-top:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:column;justify-content:space-between;padding:1.5rem 1rem 0 0}.mdx-profile-card__profile-placeholder{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:50%;display:flex;height:56px!important;justify-content:center;width:56px!important}.mdx-profile-card__profile-placeholder svg,.mdx-social-card__logo,.mdx-social-card__logo svg{height:40px!important;width:40px!important}.mdx-profile-card__profile-placeholder svg rect{fill:unset!important}.mdx-profile-card__profile-image{border-radius:50%;height:56px!important;width:56px!important}.mdx-profile-card__buttons{align-items:center;display:flex;flex-direction:row;gap:8px;height:16px;margin-top:8px}.mdx-profile-card__link{height:fit-content;position:relative;-webkit-text-decoration:none;text-decoration:none}.mdx-event-card,.mdx-event-profile,.mdx-news-card,.mdx-social-card{-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-profile-card__link svg{height:16px;width:16px}.mdx-timeline-item{display:flex;flex:0 0 auto;flex-direction:column;gap:1rem;justify-content:space-between;padding-bottom:23px;scroll-snap-align:start!important;width:193px}.mdx-timeline-item__header{align-items:flex-start;display:flex;flex-direction:column;gap:1rem}.mdx-timeline-item__border{height:50%;left:0;position:absolute;top:0;width:calc(100% + 1rem);z-index:-1}.mdx-timeline-item--border-dashed .mdx-timeline-item__border{border-bottom-style:dashed}.mdx-timeline-item__period{border-radius:10rem;display:inline-block;padding:3px 12px}#__docusaurus-base-url-issue-banner-container,.docItemContainer_hrrU .tocMobile_imaF:not(:first-of-type),.groups_p1lF .divider_eGUz:last-child,.mdx-roadmap__timeline .mdx-grid-item:last-child .mdx-timeline-item__border,.mdx-timeline-item__item:last-child .mdx-timeline-item__border,.modal_kLVz .closeButton_Rr0e,.navbarSearchContainer_Bca1:empty,.toc_pP_5,.wrapper_SWrM .fullscreenButton_Bocn,[data-theme=dark] .lightToggleIcon_K4TL,[data-theme=light] .darkToggleIcon_lKkA{display:none}.mdx-timeline-item__period--filled{background-color:rgb(var(--lsd-surface-secondary));border:1px solid rgb(var(--lsd-border-secondary));color:rgb(var(--lsd-text-secondary))!important}.mdx-timeline-item__period--transparent{background-color:rgb(var(--lsd-surface-primary));border:1px solid rgb(var(--lsd-border-primary));color:rgb(var(--lsd-text-primary))!important}.mdx-timeline-item__description{margin-bottom:auto;margin-top:24px;white-space:pre-wrap}.mdx-roadmap .mdx-grid__scroll{margin-bottom:32px!important}.mdx-roadmap .mdx-cta-section__title{font-size:var(--lsd-h2-fontSize)!important;font-weight:var(--lsd-h2-fontWeight)!important;line-height:var(--lsd-h2-lineHeight)!important}.mdx-roadmap .mdx-cta-section__description{font-size:var(--lsd-h5-fontSize)!important;font-weight:var(--lsd-h5-fontWeight)!important;line-height:var(--lsd-h5-lineHeight)!important;margin-top:24px;max-width:528px}.mdx-roadmap .mdx-cta-section__container h3{font-size:var(--lsd-subtitle1-fontSize)!important;font-weight:var(--lsd-subtitle1-fontWeight)!important;line-height:var(--lsd-subtitle1-lineHeight)!important}.mdx-roadmap__timeline .mdx-roadmap__timeline-item--no-border{border:none}.mdx-roadmap__timeline-item{height:100%}.scrollToBottom_NE5w{--offset-y:-2rem;background:rgb(var(--lsd-surface-primary))!important;opacity:1;position:absolute;top:min(100*var(--vh) - var(--ifm-navbar-height),var(--maxTop) - var(--ifm-navbar-height));transform:translateY(-2rem);transform:translateY(calc(-100% + var(--offset-y)));transition:.2s ease-in-out;z-index:100}.scrollToBottom_NE5w.hide_q_kn{opacity:0;transform:translateY(calc(-100% + var(--offset-y) - .625rem))}.mdx-section-header{border-top:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:row;gap:1rem;padding-top:24px;width:100%}.mdx-section-header>*{flex-basis:50%}.mdx-section-header__title{display:flex;flex-direction:row;gap:1.5rem}.mdx-section-header--no-border{border-top:none}.mdx-showcase-card__inner{display:flex;flex-direction:column;gap:1rem;padding-top:1.5rem}.mdx-showcase-card__logo{height:auto;width:40px}.mdx-showcase-card__index{align-items:center;background-color:rgb(var(--lsd-surface-secondary));border-radius:50%;color:rgb(var(--lsd-text-secondary))!important;display:flex;flex-direction:row;height:30px;justify-content:center;width:30px}.mdx-showcase-card__title{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.mdx-showcase-card__description{margin-top:1rem;padding-top:.5rem}.mdx-showcase-card--large .mdx-showcase-card__logo{width:40px}.mdx-showcase-card--small .mdx-showcase-card__logo{width:34px}.mdx-showcase-card--border-solid .mdx-showcase-card__description{border-top:1px solid rgb(var(--lsd-border-primary));padding-top:1rem}.mdx-showcase-card__cta{align-items:center;display:flex;font-size:14px;gap:6px;line-height:20px}.mdx-showcase-card__cta svg{transform:rotate(-90deg)}.mdx-social-card{align-items:flex-start;border:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:column;justify-content:space-between;min-height:144px;padding:1rem}.mdx-social-card__row{display:flex;justify-content:space-between;width:100%}.mdx-event-card{display:flex;flex-direction:column;gap:24px}.mdx-event-card__row,.mdx-event-profile__row,.mdx-news-card__row{display:flex;gap:8px;justify-content:space-between;width:100%}.mdx-event-card__thumbnail{border:1px solid rgba(var(--lsd-border-primary),.2);height:55px}.mdx-event-card__title{display:-webkit-box;text-overflow:ellipsis;height:48px;word-break:break-word}.mdx-event-card__info{border-top:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:column;gap:16px;padding:16px 2px 16px 0;width:100%}.mdx-event-card__info *,.mdx-event-info__content{white-space:pre-wrap}.mdx-event-card-list__button,.mdx-news-card-list__button{display:block;margin:0 auto}.mdx-event-banner__thumbnail{aspect-ratio:5/1;border:1px solid rgba(var(--lsd-border-primary),.2);margin-bottom:32px}.mdx-event-info__container{align-self:stretch;border-top:1px solid rgba(var(--lsd-border-primary));display:flex;flex:1 0 0;flex-direction:column;gap:16px;height:100%;padding:16px 24px 0 0}.mdx-event-about__container{display:grid;gap:16px;grid-template-columns:repeat(12,1fr)}.mdx-event-about__container>p{grid-column:1/6;margin-top:0!important}.mdx-event-about__container span{grid-column:7/13}.mdx-event-profile,.mdx-news-card{display:flex;flex-direction:column;gap:16px}.mdx-event-profile__image{aspect-ratio:1/1}.mdx-event-profile__social{align-items:center;display:flex;gap:8px}.mdx-event-cta__container h2{margin-bottom:32px;margin-top:0!important}.mdx-event-cta__button{height:70px!important;width:100%!important}.mdx-event-cta__button>span{align-items:center;display:flex;height:100%;justify-content:space-between}.mdx-input-cta-section__container{border-top:1px solid rgb(var(--lsd-border-primary));padding-top:24px;position:relative}.mdx-input-cta-section__container h2{margin-bottom:16px;margin-top:0!important}.mdx-input-cta-section__title{margin-bottom:24px!important}.mdx-input-cta-section__cta{height:40px!important;width:160px!important}.input-cta-section__description{margin-bottom:32px!important;white-space:pre-wrap}.mdx-input-cta-section__form{display:flex;gap:16px}.mdx-input-cta-section__input-fields,.mdx-numbers-view{display:flex;gap:16px;width:100%}.mdx-input-cta-section__input-fields>div,.mdx-numbers-view-title,.mdx-table-view-description,.mdx-table-view-title{width:100%}.mdx-input-cta-section__message{bottom:-32px;display:block;position:absolute}form .mdx-input-cta-section__cta{width:146px!important}.mdx-event-header__container{display:flex;flex-direction:column;gap:24px}.event-details .mdx-event-header__container h1{margin-bottom:0!important}.mdx-news-card:hover .mdx-news-card__external-link-icon{display:flex!important}.mdx-news-card__thumbnail{border:1px solid rgba(var(--lsd-border-primary),.2);display:flex!important;height:144px;width:100%}.mdx-news-card__info{display:flex;gap:8px;width:100%}.mdx-news-card__info *{white-space:pre-wrap}.mdx-news-card__tags{display:flex;gap:8px;margin-top:4px}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>.mdx-video-section__item-description,.mdx-video-section__description{margin-top:1rem}.mdx-news-card-thumbnail__container{height:144px;position:relative;width:100%}.mdx-news-card__external-link-icon{align-items:center;border:1px solid #fff;bottom:8px;display:none;height:28px;justify-content:center;position:absolute;right:8px;width:28px;z-index:9999}.mdx-spec-card,.mdx-table-view-row,.mdx-video-section--list .mdx-video-section__list>:not(:first-child){border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-news-card__external-link-icon svg>path{fill:#fff}.mdx-news-card__external-link-icon>div{margin:unset}.mdx-video-section .mdx-video-section__video-container{grid-column:8/17;height:0;overflow:hidden;padding-top:56.25%;position:relative;width:100%}.mdx-video-section iframe{left:0;position:absolute;top:0}.mdx-video-section .mdx-video-section--align-center{align-items:center;display:flex;flex-direction:column;margin:auto;max-width:936px}.mdx-video-section .mdx-video-section--align-center .mdx-video-section__description{margin-top:1.5rem}.mdx-video-section .mdx-video-section--align-left *{text-align:left}.mdx-video-section .mdx-video-section--align-right *{text-align:right}.mdx-video-section__header{align-items:center;display:flex;gap:16px}.mdx-video-section__header button{padding:6px 12px!important}.mdx-video-section__header svg{height:26px!important;width:26px!important}.mdx-video-section__header svg path{fill:rgb(var(--lsd-text-secondary))}.mdx-video-section--title-only .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);font-weight:300;line-height:var(--lsd-h5-lineHeight);max-width:886px}.mdx-video-section--title-button .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-display4-fontSize);font-weight:var(--lsd-display4-fontWeight);font-weight:300;line-height:var(--lsd-display4-lineHeight);max-width:886px}.mdx-video-section--full-width .mdx-video-section__container{display:grid;gap:0 1rem;grid-template-columns:repeat(2,1fr)}.mdx-video-section--full-width .mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h3-fontSize);font-weight:var(--lsd-h3-fontWeight);line-height:var(--lsd-h3-lineHeight)}.mdx-video-section--full-width .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-video-section--simple .mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-video-section--simple .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-video-section--list{display:grid;gap:0 1rem;grid-template-columns:repeat(16,1fr)}.mdx-video-section--list .mdx-video-section__container{grid-column:1/7}.mdx-video-section--list .mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-video-section--list .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-video-section--list .mdx-video-section__list{display:flex;flex-direction:column;gap:1.5rem 0;grid-column:2/3}.mdx-video-section--list .mdx-video-section__list>a{display:block;-webkit-text-decoration:none;text-decoration:none}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>a>.mdx-video-section__item-title{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:1rem;color:rgb(var(--lsd-text-primary));display:flex;gap:12px;margin-top:1.5rem;padding:3px 11px;width:fit-content}.mdx-spec-card .mdx-spec-card__link,.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>a{-webkit-text-decoration:none;text-decoration:none}.footerLink_sh7M,.linkContent__x3v:hover,.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>a:hover{-webkit-text-decoration:underline;text-decoration:underline}.mdx-table-view-table{padding:20px;width:100%}.mdx-table-view-row{display:flex;gap:20px;padding:24px 0}.mdx-numbers-view-header{display:flex;flex-direction:column;gap:32px;width:100%}.mdx-numbers-view-content{display:flex;flex-direction:column;gap:16px;width:100%}.mdx-numbers-view-row{display:flex;gap:32px}.mdx-numbers-view-number{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:50%;display:flex;font-size:14px;height:32px;justify-content:center;padding:4px 12px;width:32px}.mdx-numbers-view-description{margin-top:16px;width:100%}.nav_cMpg,.root_QACb{margin:0 auto;max-width:var(--container-max-width)}.mdx-spec-card{padding-block:16px}.mdx-spec-card .mdx-spec-card__container{display:flex;flex-direction:column;gap:16px}.mdx-spec-card .mdx-spec-card__button{height:28px;margin:0;padding-left:12px;width:fit-content}.mdx-spec-card .mdx-spec-card__button-icon{padding:7px 10px}.backdrop_Ifvc{background:rgb(var(--lsd-surface-primary));z-index:201}.backdrop_Ifvc,.navWrapper_ybYI{height:100%;left:0;opacity:0;position:fixed;top:0;visibility:hidden;width:100%}.navWrapper_ybYI{background:#0000;pointer-events:none;z-index:203}.l-modal__content,.nav_cMpg{background:rgb(var(--lsd-surface-primary))}.navWrapper_ybYI>*{pointer-events:auto}.nav_cMpg{align-items:center;display:flex;flex-direction:row;height:var(--ifm-navbar-height);justify-content:space-between;padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.visible_ynAX{opacity:1!important;visibility:visible!important}.wrapper_SWrM{position:relative}.wrapper_SWrM:not(.active_qZD5) .fullscreenButton_Bocn{background:rgb(var(--lsd-surface-primary));bottom:8px;position:absolute;right:8px;transition:.3s}.root_QACb{padding:0;width:100%}.firstRow_ar1q{border-top:1px solid rgb(var(--lsd-text-primary));margin-bottom:96px!important}.firstRow_ar1q,.secondRow__ww3{display:flex;flex-direction:row}.secondRow__ww3{border-top:1px solid rgb(var(--lsd-border-primary));padding-bottom:16px!important}.backToTop_wDfN{bottom:16px;position:absolute;width:fit-content}.l-modal,.l-modal__backdrop{position:fixed;top:0;left:0}.footerLink_sh7M{height:fit-content;width:fit-content}.toggle_K23S{border:1px solid rgb(var(--lsd-border-primary));height:32px;width:32px}.toggle_K23S svg{height:14px;width:14px}.toggleButton_dl49{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.dropdownNavbarItem_o23I,.l-modal__content{border:1px solid rgb(var(--lsd-border-primary))}.toggleButton_dl49:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_AAS_{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}.l-modal{height:100vh;opacity:0;transition:.3s;visibility:hidden;width:100%;z-index:9999}.l-modal__container{display:grid;gap:1rem;grid-template-columns:repeat(24,1fr);margin:0 auto;max-width:1376px;overflow:auto}.l-modal--open{opacity:1;visibility:visible}.l-modal__content{grid-column:8/19;height:fit-content;margin:64px 0;max-height:80vh;padding:7px;z-index:9998}.groups_p1lF,.root_ONDG{max-height:60vh;overflow-y:auto}.l-modal__backdrop{background-color:rgba(var(--lsd-surface-primary),.6);height:100%;width:100%;z-index:9997}.modal_kLVz .header_QwCa{align-items:center;display:flex;flex-direction:row;gap:.5rem}.root_EFVO{padding:32px}.root_ONDG{padding:24px}.title_uwS_{font-size:.75rem!important}.item_RHYF{align-items:center;display:flex;flex-direction:row;margin-top:1rem}.item_RHYF .itemTitle_jtAv{flex-grow:1;overflow:hidden;padding-left:1rem;text-overflow:ellipsis;white-space:nowrap}.linkContent__x3v,.root_JWD1{align-items:center;display:flex}.item_RHYF .itemTitle_jtAv mark,.root_JWD1 mark{background:none;color:inherit}.root_xZfc{padding:8px 8px 0;position:relative;width:100%}.textField_af43 button svg{height:auto;max-height:100%!important;width:14px}.root_N57j>div:first-child{color:#828285;padding:0 24px}.root_N57j>div:first-child,.root_N57j>div:first-child *{font-size:.75rem}.root_N57j ul li{margin-top:1rem}.root_JWD1{padding:0 24px}.root_JWD1>div{margin-left:1rem}.root_Ooa0.level1_fpUf{display:block;padding-left:32px}.icon_sZn2{height:auto;width:16px}.icon_sZn2.fill_fkan,.icon_sZn2.fill_fkan *{fill:currentColor}.icon_sZn2.stroke_j3wH,.icon_sZn2.stroke_j3wH *{stroke:currentColor}[data-theme=light] .icon_sZn2{color:#000}[data-theme=dark] .icon_sZn2{color:#fff}.groups_p1lF{display:flex;flex-direction:column;gap:16px}[data-theme=dark] .divider_eGUz>div{opacity:.1}[data-theme=dark] .topBar_Dtew button{background-color:var(--ifm-button-color)}.linkContent__x3v{gap:6px;-webkit-text-decoration:none;text-decoration:none}.linkContent__x3v:hover{text-decoration-color:rgba(var(--lsd-text-primary),.6);text-underline-offset:.3rem}.externalLinkIcon_Qfue{width:8px}.dropdownNavbarItem_o23I{height:28px;padding:6px 12px}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.admonition_ntHH{border:1px solid var(--ifm-alert-border-color);display:flex;gap:18px;margin-bottom:24px;padding:18px}.admonitionHeading_JPfy{font-size:1.25rem!important;font-weight:400;line-height:1.5rem!important;margin-bottom:.3rem;text-transform:capitalize}.admonitionHeading_JPfy code{text-transform:none}.admonitionIcon_BGV6{display:inline-block}.admonitionIcon_BGV6 svg{display:inline-block;height:16px;width:16px}.admonitionIcon_BGV6 svg *{stroke:none!important;fill:var(--ifm-alert-border-color)}.admonitionContent_iozl{display:block;margin-top:12px}.navbarHideable_OoEf{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_zoxl{transform:translate3d(0,calc(-100% - 2px),0)}.rightSection_CLeF{align-items:center;display:flex;justify-content:flex-end;white-space:nowrap}.iconButtonGroup_ktNv button:not(:last-child){border-right:1px solid!important;margin-right:-1px!important}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{min-height:100%}#__docusaurus,.root_jG9K{display:flex;flex-direction:column}.root_jG9K{align-items:center;padding:1rem!important;width:100%}.root_jG9K>div{max-width:796px!important;width:100%}.root_jG9K>div>div{align-items:flex-start;display:flex;flex-direction:column;gap:1rem;padding:0!important}.root_UH70,.tagWithCount_gIvh{align-items:center;display:flex}.root_jG9K a{margin-top:2.5rem}.tag_dtsN{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_dtsN:hover{--docusaurus-tag-list-border:var(--ifm-link-color);-webkit-text-decoration:none;text-decoration:none}.tagRegular_SGIC{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_gIvh{border-left:0;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_gIvh:after,.tagWithCount_gIvh:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_gIvh:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_gIvh:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_gIvh span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.root_UH70{flex-direction:row}.tags_LT8x{display:inline;margin:0 0 0 1rem!important;padding:0!important}.tag_NdBD:not(:first-child){margin-left:.5rem}.tag_NdBD a{margin:0!important;padding:0!important}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.tocCollapsibleButton_dxRj{align-items:center;border:1px solid rgb(var(--lsd-border-primary));display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButtonExpanded_TSyC:after,.tocCollapsibleExpanded_zTjk{transform:none}.tocCollapsible_ROek{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_Qsjj>ul{border-left:none;border:1px solid rgb(var(--lsd-border-primary))!important;border-top:none!important;font-size:15px;padding:.2rem 0}.tocCollapsibleContent_Qsjj ul li{margin:.4rem .8rem}.tocCollapsibleContent_Qsjj a{display:block;-webkit-text-decoration:var(--ifm-link-text-decoration);text-decoration:var(--ifm-link-text-decoration)}.badge_AsjZ{background:#0000}.docItemGrid_SzoZ{display:grid;gap:16px;grid-template-columns:repeat(14,1fr)}.gap1_XuuQ{grid-column:span 1}.tocMobile_imaF{margin-bottom:2rem;margin-top:-.5rem}.tocMobile_imaF>div{display:block!important;margin:0}.docItemContainer_hrrU h1{margin-bottom:40px!important}.docItemContainer_hrrU h2,.docItemContainer_hrrU h3{margin-top:32px!important}@media (min-width:0px){.mdx-box{--mdx-box-top:var(--mdx-box-top-xs);--mdx-box-bottom:var(--mdx-box-bottom-xs)}}@media (min-width:576px){.mdx-box{--mdx-box-top:var(--mdx-box-top-sm);--mdx-box-bottom:var(--mdx-box-bottom-sm)}}@media (min-width:768px){.blog-archive-page .main-wrapper main>section .container>.row{display:grid;gap:64px 24px;grid-template-columns:repeat(24,1fr)}.blog-archive-page .main-wrapper main>section .container>.row>.col{grid-column:span 12;margin:0!important;max-width:unset;padding:0 8.3333333333% 0 0}.two-items{width:48%}.case-study-container a{display:inline-block;margin-bottom:20px;margin-right:2%;width:48%}.case-study-container a:nth-child(2n){margin-right:0}.mdx-box{--mdx-box-top:var(--mdx-box-top-md);--mdx-box-bottom:var(--mdx-box-bottom-md)}.mdx-scroll-buttons__button--with-label{gap:12px;min-width:83px;padding:5px 11px 5px 9px!important;width:auto!important}.mdx-scroll-buttons__button--with-label:first-of-type,.mdx-scroll-buttons__button--with-label:last-of-type{justify-content:flex-start}.mdx-scroll-buttons--spaced>div{gap:0 1rem;justify-content:space-between!important}.mdx-scroll-buttons--spaced>div>button:not(:last-child){border-right:1px solid rgb(var(--lsd-border-primary))!important}}@media (min-width:997px){.full-width>div .main-wrapper main>div>div{grid-template-columns:unset!important}.main-wrapper .container{padding-bottom:124px!important}.main-wrapper>div>div{display:grid;gap:1rem;grid-template-columns:repeat(16,45px);margin:auto;width:fit-content}.main-wrapper>div>div aside{border:none;grid-column:1/5;width:auto}.main-wrapper>div>div main{grid-column:6/16;margin-top:48px;max-width:none}.navbar__left{flex-basis:8.3333333333%;flex:0 1 auto}.navbar__left-items{flex:1 0;margin:auto}nav.menu{margin-top:48px;padding-top:16px}.container{padding-inline:0!important}aside a[tabindex="-1"] img{margin-left:14px}.theme-doc-sidebar-menu .menu__link{padding-left:8px}.navbar .lsd-icon-button--medium{height:28px!important;width:28px!important}.blog-wrapper>.container>.row{display:grid;gap:16px;grid-template-columns:repeat(24,1fr)}.blog-wrapper>.container>.row>aside{grid-column:1/5}.blog-wrapper>.container>.row>main{grid-column:6/20}.blog-wrapper:not(.blog-wrapper--index)>.container>.row>div:last-child{grid-column:21/25;max-width:unset}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_NjKY{flex-grow:1;padding-top:16px}@supports (scrollbar-gutter:stable){.menu_NjKY{scrollbar-gutter:stable}}.menuWithAnnouncementBar_U5pk{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_UEyd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height)}.sidebarWithHideableNavbar__00c{padding-top:0!important}.sidebarHidden_F1ZE{opacity:0;visibility:hidden}.sidebarLogo_Ydl9{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);-webkit-text-decoration:none!important;text-decoration:none!important}.sidebarLogo_Ydl9 img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;background-color:var(--docusaurus-collapse-button-bg);display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.expandButtonIcon_i1dp{transform:rotate(0)}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.mdx-box{--mdx-box-top:var(--mdx-box-top-lg);--mdx-box-bottom:var(--mdx-box-bottom-lg)}.mdx-cta-section__header__mobile-button{display:none}.mdx-feature-list--bottom-aligned .mdx-feature-list__feature{min-height:332px}.mdx-feature-list--bottom-aligned .mdx-feature-list__feature-description{display:flex;flex:1 0;flex-direction:column;justify-content:flex-end}.mdx-feature-list--top-aligned .mdx-feature-list__feature-description{margin-top:40px}.mdx-feature-list__feature{padding:1rem;position:relative}.mdx-feature-list__feature-inner{height:100%}.mdx-feature-list__feature-border{background:rgb(var(--lsd-border-primary));height:calc(100% - 2rem);position:absolute;right:0;top:1rem;width:1px}.mdx-feature-list__feature:nth-child(odd){padding-left:0}.mdx-feature-list__feature:nth-child(2n){padding-right:0}.mdx-feature-list__feature:nth-child(2n) .mdx-feature-list__feature-border,.mdx-video-section__header__mobile-button,.tocMobile_ITEo{display:none}.wrapper_SWrM:not(.active_qZD5) .fullscreenButton_Bocn{background:rgb(var(--lsd-surface-primary));bottom:8px;display:flex;opacity:0;position:absolute;right:8px;transition:.3s;visibility:hidden}.wrapper_SWrM:not(.active_qZD5):hover .fullscreenButton_Bocn{opacity:1;visibility:visible}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.docItemGrid_SzoZ{display:grid;gap:var(--doc-grid-gap);grid-template-columns:repeat(11,1fr)}.docItemCol_F52z{grid-column:span 11}}@media (min-width:997px)and (max-width:1199px){.main-wrapper .container>div>div,.navbar{padding-inline:0!important}.main-wrapper,.navbar{width:960px!important}.events .main-wrapper>div aside{grid-column:1/1}.events .main-wrapper>div main,.navbar__inner{grid-column:1/17}.plugin-id-root-pages main{grid-column:4/14!important}.main-wrapper .container{padding-bottom:96px}.main-wrapper>div{width:960px}.navbar{display:grid;gap:1rem;grid-template-columns:repeat(16,45px);margin:auto}.navbar__left-items{display:flex;justify-content:center}.main-wrapper{margin:0 auto!important}}@media (min-width:1200px){.main-wrapper>div>div main>.container,.main-wrapper>main>.row>.col,.navbar{padding-inline:0!important}.plugin-id-root-pages main{grid-column:4/16!important}.footer{padding:0!important}.main-wrapper>div>div{display:grid;gap:1rem;grid-template-columns:repeat(16,1fr);margin-inline:unset;width:unset}.main-wrapper>div>div aside{border:none;grid-column:1/4;width:auto}.main-wrapper>div>div main{grid-column:5/17;max-width:none}.theme-doc-toc-desktop{top:calc(var(--ifm-navbar-height))!important}.navbar__inner{display:grid;gap:16px;grid-template-columns:repeat(24,1fr);padding:0}.navbar__left{align-items:center;display:flex;flex-direction:row;grid-column:1/6}.navbar__left-items{grid-column:6/20}.navbar__right-items{flex-direction:row;gap:16px;grid-column:20/25;justify-content:flex-end}.blog-archive-page .main-wrapper main>section .container>.row{display:grid;gap:64px 24px;grid-template-columns:repeat(24,1fr)}.blog-archive-page .main-wrapper main>section .container>.row>.col{grid-column:span 8;margin:0!important;max-width:unset;padding:0 12.5% 0 0}.mdx-box{--mdx-box-top:var(--mdx-box-top-xl);--mdx-box-bottom:var(--mdx-box-bottom-xl)}.docItemGrid_SzoZ{display:grid;gap:var(--doc-grid-gap);grid-template-columns:repeat(12,1fr)}.docItemCol_F52z{grid-column:span 10}.tocMobile_imaF{display:none}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:1199px){.main-wrapper main>.container{padding-bottom:calc(var(--desktop-footer-gap) - var(--ifm-footer-padding-vertical) - var(--doc-grid-gap))!important}.header-github-link:before{margin-right:16px}.toc_pP_5{display:none}}@media (max-width:997px);@media (max-width:996px){.navbar-sidebar__close,.navbar__toggle{border:1px solid rgb(var(--lsd-border-primary))}.blog-wrapper h1[itemprop=headline],.mdx-cta-button .lsd-button--large,.mdx-cta-section__description,.mdx-cta-section__title,.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__link>div{font-family:var(--lsd-typography-generic-font-family)!important}.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0;padding-bottom:0!important;--ifm-footer-padding-horizontal:var(--content-padding)}.desktop,.footer__link-separator,.navbar__item,.navbar__left-items{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block;width:max-content}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid,.root_xZfc{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.mdx-numbers-view,.mdx-section-header,.pills--block,.tabs--block{flex-direction:column}:root{--ifm-background-color:rgb(var(--lsd-surface-primary))}.navbar__color-mode-toggle{display:none!important}.main-wrapper main>.container{padding-bottom:calc(var(--mobile-footer-gap) - var(--ifm-footer-padding-vertical) - var(--doc-grid-gap))!important}.grid{grid-template-columns:repeat(2,1fr)}.footer-grid,.mdx-feature-list__list,.mdx-profile-card{grid-template-columns:1fr}.navbar__toggle{align-items:center;box-sizing:border-box;display:flex;height:32px;justify-content:center;margin:0;width:32px}.navbar__toggle svg{height:14px;width:14px}.main-wrapper>div,.mdx-cta-section--full-width .mdx-cta-section__container,.mdx-cta-section--list,.mdx-video-section--full-width .mdx-video-section__container,.mdx-video-section--list,.tocMobile_imaF{display:block}.theme-admonition{display:block!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu{padding-inline:0}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__list{display:flex;flex-direction:column;gap:8px;padding:var(--content-padding)}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__link{border-left:none;padding-left:0}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__link>div{font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important;-webkit-text-decoration:none;text-decoration:none}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer{margin-top:3rem;padding:0!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer>div{display:flex!important;flex-direction:column!important;gap:32px!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer>button{display:none}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer .container.container-fluid{margin-bottom:16px!important;padding-inline:var(--content-padding)}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer .container.container-fluid>.footer__links{gap:0!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer>div[class*=secondRow]{margin:var(--content-padding)}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer .footer__links{gap:16px!important}.navbar-sidebar__brand{height:60px;padding-block:0}.navbar-sidebar__brand>button{height:32px;width:32px}.navbar-sidebar__brand>button:first-of-type{margin-left:auto;margin-right:0!important}.navbar-sidebar__brand>button:not(:last-of-type){border-right:none}.navbar-sidebar__close{align-items:center;display:flex;justify-content:center;margin-left:unset}.blog-divider{margin-block:32px!important}.blog-wrapper main{padding-inline:var(--content-padding)}.blog-wrapper article footer{align-items:flex-start;flex-direction:column}.blog-wrapper article footer .read-more-link{margin-top:24px}.blog-wrapper article footer .read-more-link,.blog-wrapper article footer .read-more-link button{flex-basis:100%;width:100%}.blog-wrapper h1[itemprop=headline]{font-size:var(--lsd-h2-fontSize)!important;font-weight:var(--lsd-h2-fontWeight)!important;line-height:var(--lsd-h2-lineHeight)!important}.mdx-cta-button .lsd-button--large{font-size:var(--lsd-label2-fontSize)!important;font-weight:var(--lsd-label2-fontWeight)!important;line-height:var(--lsd-label2-lineHeight)!important;padding:5px 11px}.mdx-cta-section--align-center .lsd-button--large{padding:10px 40px}.mdx-cta-section,.mdx-video-section{padding:16px 0 0}.mdx-cta-section--title-button .mdx-cta-section__description,.mdx-video-section--title-button .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight)}.mdx-cta-section--full-width .mdx-cta-section__title,.mdx-cta-section--simple .mdx-cta-section__title,.mdx-video-section--full-width .mdx-video-section__title,.mdx-video-section--simple .mdx-video-section__title{margin-top:1.5rem}.mdx-cta-section--list .mdx-cta-section__list,.mdx-roadmap__timeline{margin-top:4rem}.mdx-cta-section--list .mdx-cta-section__list>*{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>.mdx-cta-section__item-title{font-size:.875rem!important;line-height:1.25rem!important}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>.mdx-cta-section__item-description{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.colorModeToggle_GSaI,.dropdownNavbarItem_o23I,.l-modal__backdrop,.mdx-cta-section__header__desktop-button,.tableOfContents_bqdL{display:none}.mdx-cta-section__header__mobile-button{margin-top:24px}.mdx-cta-section__title{font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.mdx-cta-section__description{font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important}.mdx-community-feedback .mdx-community-feedback__inner,.mdx-logo-carousel .mdx-logo-carousel__inner{margin-top:64px}.mdx-community-feedback .mdx-community-feedback__description{margin-top:16px}.mdx-community-feedback .mdx-community-feedback__items{gap:0 16px;margin-left:-32px;width:calc(100% + 48px)!important}.mdx-community-feedback .mdx-community-feedback__item{padding-left:16px}.mdx-community-feedback .mdx-community-feedback__item:last-of-type{margin-right:16px}.mdx-feature-list .mdx-feature-list__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-subtitle2-fontSize);font-weight:var(--lsd-subtitle2-fontWeight);line-height:var(--lsd-subtitle2-lineHeight);padding:1rem 0}.mdx-feature-list--cta-bottom .mdx-feature-list__extra{margin-top:2rem;padding:0}.mdx-feature-list__header h2,.mdx-roadmap .mdx-cta-section__title,.mdx-section-header h2{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.lsd-button span,.mdx-hero-description{line-height:var(--lsd-body2-lineHeight)!important}.mdx-feature-list__feature{border:none;border-top:1px solid rgb(var(--lsd-border-primary));padding:1.5rem 0}.mdx-feature-list__feature .mdx-feature-list__feature-index--circle{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-subtitle2-fontSize);font-weight:var(--lsd-subtitle2-fontWeight);height:1.625rem;line-height:var(--lsd-subtitle2-lineHeight);width:1.625rem}.mdx-feature-list__feature .mdx-feature-list__feature-title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight);margin-top:1rem}.mdx-feature-list__feature .mdx-feature-list__feature-description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-body1-fontSize);font-weight:var(--lsd-body1-fontWeight);line-height:var(--lsd-body1-lineHeight);margin-top:3rem}.mdx-hero-description,.mdx-roadmap .mdx-cta-section__description{margin-top:16px;font-family:var(--lsd-typography-generic-font-family)!important}.mdx-feature-list__feature:nth-child(odd) .mdx-feature-list__feature-inner{border:none}.lsd-button,.mdx-hero-action button{padding:6px 12px!important}.mdx-hero-actions{align-items:center;display:flex;flex-direction:row;justify-content:stretch;width:100%;z-index:0}.mdx-hero-actions>*{flex-basis:50%}.mdx-hero-actions>a,.mdx-hero-actions>a>button{display:block;width:100%}.mdx-hero-description{font-size:var(--lsd-body2-fontSize)!important;font-weight:var(--lsd-body2-fontWeight)!important}.mdx-hero-info{padding:28px 0}.mdx-hero-title,.mdx-numbers-view-section-title{font-size:28px!important}.mdx-hero-video>*{height:var(--hero-video-height-mobile);min-height:var(--hero-video-min-height-mobile);transform:translateY(var(--hero-video-offset-y-mobile))}.mdx-hero-video img,.mdx-hero-video video{max-width:calc((100vw - 32px)*var(--hero-video-scale-mobile))}.mdx-timeline-item{width:204px}.mdx-roadmap .mdx-cta-section__description{font-size:var(--lsd-body1-fontSize)!important;font-weight:var(--lsd-body1-fontWeight)!important;line-height:var(--lsd-body1-lineHeight)!important}.scrollToBottom_NE5w{--offset-y:-1rem}.mdx-section-header__title{font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important;display:flex;flex-wrap:wrap}.mdx-section-header__description,.mdx-section-header__title{font-family:var(--lsd-typography-generic-font-family)!important}.mdx-section-header__description{font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.mdx-showcase{gap:1.5rem 1rem;grid-template-columns:repeat(2,1fr)}.mdx-showcase-card__name{font-size:1.375rem!important;line-height:1.75rem!important}.mdx-showcase-card__description{margin-top:1rem}.mdx-showcase-card__logo{height:auto;width:34px}.mdx-news-card-thumbnail__container,.mdx-news-card__thumbnail{height:128px}.mdx-video-section--list .mdx-cta-button{margin-bottom:40px;margin-top:24px}.mdx-video-section--list .mdx-video-section__list{margin-top:4rem}.mdx-video-section--list .mdx-video-section__list>*{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>.mdx-video-section__item-title{font-size:.875rem!important;line-height:1.25rem!important}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>.mdx-video-section__item-description{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.mdx-video-section__header__mobile-button{margin-top:24px}.mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.mdx-table-view-table-title{font-size:28px!important;margin-bottom:24px}.mdx-table-view-row{flex-direction:column;gap:32px}.mdx-numbers-view{gap:32px}.mdx-numbers-view-row{gap:16px}.mdx-numbers-view-number{height:32px;padding:4px 12px;width:32px}.mdx-numbers-view-header{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:16px}.lsd-button span{font-size:var(--lsd-body3-fontSize)!important}.mdx-numbers-view-title{font-size:20px!important}.wrapper_SWrM>div{overflow:visible!important}.nav_cMpg{height:56px}.backToTop_wDfN{bottom:16px;left:16px;margin-top:76px!important;position:relative}.l-modal{overflow:hidden;width:100vw}.l-modal__container{display:grid;grid-template-columns:1fr;height:100vh;max-width:unset;min-height:-webkit-fill-available;width:100%}.root_ONDG,.root_ltHz{height:100%;overflow:auto}.l-modal__content{border:none;grid-column:1/2;grid-row:1/2;height:100%;margin:0;max-height:100vh;overflow:hidden}.modal_kLVz .header_QwCa{padding:12px 16px}.modal_kLVz .closeButton_Rr0e{display:block;height:2rem;width:2rem}.root_EFVO{padding:40px 24px}.root_ONDG{max-height:100%;padding:24px 24px 64px}.groups_p1lF{max-height:unset;overflow:auto}.root_ltHz{padding:24px 0 64px}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}.docItemGrid_SzoZ{display:grid;grid-template-columns:repeat(2,1fr);padding-left:0}.docItemCol_F52z{grid-column:span 2}}@media (max-width:767px){.blog-archive-page .main-wrapper main>section .container>.row{margin-top:0}.blog-archive-page .main-wrapper main>section .container>.row .col{margin-top:40px!important}.mdx-scroll-buttons>div{justify-content:flex-end}.mdx-scroll-buttons>div>button:not(:last-child){border-right:none!important}.mdx-scroll-buttons .mdx-scroll-buttons__label{display:none}.mdx-scroll-buttons--spaced>div{justify-content:space-between!important}.mdx-scroll-buttons--spaced>div>button:not(:last-child){border-right:1px solid rgb(var(--lsd-border-primary))!important}.mdx-hero{justify-content:unset}.mdx-hero h1{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h2-fontSize)!important;font-weight:var(--lsd-h2-fontWeight)!important;line-height:var(--lsd-h2-lineHeight)!important}.mdx-ns__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight)}.mdx-ns__inner form{margin-top:40px}.mdx-ns__inner .mdx-ns__inputs{flex-direction:column;gap:24px}.mdx-ns__inner .mdx-ns__inputs>*{width:100%}.mdx-ns__inner .mdx-ns__submit-button{margin-top:24px}.mdx-profile-card{display:flex;scroll-snap-align:start!important;width:var(--mobile-width)}.mdx-profile-card__profile{display:flex;flex-direction:column;gap:16px}.mdx-profile-card__name{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h5-fontSize)!important;font-weight:var(--lsd-h5-fontWeight)!important;line-height:var(--lsd-h5-lineHeight)!important}.mdx-event-card__thumbnail{height:unset}.mdx-news-card-thumbnail__container,.mdx-news-card__thumbnail{height:100%}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (max-width:575px){:root{--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-button-size-multiplier:1.25;--ifm-button-padding-horizontal:calc(var(--ifm-button-size-multiplier)*var(--ifm-spacing-horizontal));--ifm-button-padding-vertical:calc(var(--ifm-button-size-multiplier)*var(--ifm-spacing-vertical));--ifm-alert-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-alert-padding-vertical:calc(var(--ifm-spacing-vertical)*2)}.markdown>h2{--ifm-h2-font-size:1.75rem}.markdown h4{--ifm-h4-font-size:1.25rem!important}.footer>div{display:flex!important;flex-direction:column;gap:40px!important;margin-inline:16px;padding-inline:0!important;width:auto}.footer__links{display:flex!important;flex-direction:column!important}.footer__links>div:first-of-type,.footer__links>div:nth-of-type(3){margin-bottom:4px!important}.footer__links>div:nth-of-type(2){margin-bottom:34px!important}.col.footer__col{margin-bottom:0!important}.navbar__left{display:flex}.bottom-cta-sections .mdx-grid__content{gap:98px!important}.bottom-cta-sections .mdx-grid__content:last-of-type>div:last-of-type>.mdx-input-cta-section__container{margin-bottom:120px}.events .main-wrapper main>.container{padding-bottom:0!important}.mdx-event-card-list__container,.mdx-news-card-list__container{margin-bottom:48px;margin-top:32px}.mdx-event-card-list__tabs .lsd-tab-item,.mdx-news-card-list__tabs .lsd-tab-item{padding:6px 14px!important}.mdx-event-about__container,.mdx-input-cta-section__input-fields{display:flex;flex-direction:column;gap:32px}.mdx-event-about__container span,.mdx-event-header__container p{font-size:14px!important;line-height:20px!important}.mdx-event-profile-list__container .mdx-grid>.mdx-grid__content{gap:24px!important}.mdx-input-cta-section__input-fields>div{width:100%!important}.mdx-input-cta-section__container{position:relative}.mdx-input-cta-section__container .mdx-input-cta-section__form{flex-direction:column;gap:40px;margin-bottom:-24px}.mdx-input-cta-section__container .input-cta-section__description--no-form{margin-bottom:32px!important}.input-cta-section__description{margin-bottom:24px!important}.event-details .mdx-event-header__container h1{font-size:24px!important;line-height:32px!important;margin-bottom:0!important}.mdx-news-card h3{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-news-card__thumbnail{max-height:198px}.footer{--ifm-footer-padding-horizontal:0}.firstRow_ar1q{margin-bottom:64px!important;padding-inline:var(--content-padding)!important}.secondRow__ww3{margin-inline:var(--content-padding)!important}}@media (max-width:574px){.mdx-ghc__issue-content-grid{grid-template-columns:82px 1fr}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/css/styles.f0961b96.css b/assets/css/styles.f0961b96.css new file mode 100644 index 0000000..e495a28 --- /dev/null +++ b/assets/css/styles.f0961b96.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}[data-theme=dark],html[data-theme=dark]{--ifm-color-scheme:dark}:root,[data-theme=light]{--ifm-color-scheme:light}code,pre code{--lsd-typography-generic-font-family:monospace}.events .theme-doc-breadcrumbs .breadcrumbs__link,.text--capitalize{text-transform:capitalize}.button,.dropdown__link,.footer__item,.text--truncate{white-space:nowrap}.mdx-cta-section .mdx-cta-section--align-center .mdx-cta-button,.mdx-video-section .mdx-video-section--align-center .mdx-cta-button{margin-inline:auto}.mdx-cta-section--full-width .mdx-cta-section__link,.mdx-video-section--full-width .mdx-video-section__link{grid-area:2/2/3/3}.toggleButton_dl49,html{-webkit-tap-highlight-color:transparent}*,.dropdownNavbarItem_o23I,.events .theme-doc-breadcrumbs .breadcrumbs__item--active,.mdx-event-info__container,.mdx-news-card__external-link-icon,.mdx-numbers-view-number,.root_xZfc,.toggle_K23S{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.dropdown__menu,.menu__list,.root_N57j ul li{list-style:none}:root{--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-radius:0.4rem;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-weight-light:300;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-color:var(--ifm-font-color-base);--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-color:var(--ifm-color-white);--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-sidebar-width:83vw;--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{background-color:rgb(var(--lsd-surface-primary));height:auto!important}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.blog-archive-page .main-wrapper main>section,.margin-top--none,.mdx-grid>.mdx-grid__content .mdx-news-card .mdx-news-card__title,.tabItem_LNqP{margin-top:0!important}.margin-bottom--none,.markdown>:last-child{margin-bottom:0!important}.main-wrapper>.container,.margin-vert--none{margin-bottom:0!important;margin-top:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit;color:rgb(var(--lsd-text-primary))}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);overflow:auto;padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}.sub1,h1{font-size:var(--ifm-h1-font-size)}.sub2,h2{font-size:var(--ifm-h2-font-size)}.sub3,h3{font-size:var(--ifm-h3-font-size)}.sub4,h4{font-size:var(--ifm-h4-font-size)}.sub5,h5{font-size:var(--ifm-h5-font-size)}.sub6,h6,small{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading));letter-spacing:-1.5px}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){-webkit-text-decoration:none;text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_uzNF .wordWrapButtonIcon_b1P5{color:var(--ifm-color-primary)}.text--secondary,[data-theme=dark] .root_JWD1>div>div{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--lowercase{text-transform:lowercase}.alert__heading,.mdx-hero-title--uppercase,.text--uppercase,table td strong,table th{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.dropdown__link,.dropdown__link--active,.dropdown__link:hover,.menu__link:hover,.navbar__brand:hover,.navbar__link--active,.navbar__link:hover,.pagination-nav__link:hover,.pagination__link:hover{-webkit-text-decoration:none;text-decoration:none}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);-webkit-text-decoration:none;text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.breadcrumbs__item,.close:hover,.table-of-contents__link--active code{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.admonitionIcon_BGV6,.root_JWD1>span svg{vertical-align:middle}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color)}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%);display:none}.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after,.menu__list-item-collapsible>a[aria-expanded=false]>svg{transform:rotate(90deg)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_hrrU article>:first-child,.docItemContainer_hrrU header+*,.footer__item,.mdx-roadmap .mdx-cta-button{margin-top:0}.admonitionContent_iozl>:last-child,.footer__items,.tabItem_Ymn6>:last-child{margin-bottom:0}.main-wrapper>main,.table-of-contents,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.external-link,.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;top:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;visibility:hidden;left:0;bottom:0}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color)}.menu__caret:before,.menu__link--sublist-caret:after{content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.icon_S7Kx,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color)}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.blog-wrapper>.container>.row>aside>nav>ul li,.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color)}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.footer,.row{position:relative}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);position:relative;text-align:left;top:-.5rem}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.footer>div,.grid{grid-template-columns:repeat(24,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover)}.blog-wrapper>.container>.row>aside>nav>div:first-child,.blog-wrapper>.container>.row>aside>nav>ul li a{border-left:1px solid #0000;font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important}.blog-wrapper main a:hover,.content_knG7 a,.dropdown__link:hover,.footer__item a,.markdown a,.markdown a:hover,.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>a:hover,article a,article a:hover{-webkit-text-decoration:underline;text-decoration:underline}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar__left-items>.navbar__item:first-of-type,.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);background-color:#0000!important;--content-padding:16px;--container-max-width:1072px;--pagination-nav-margin-top:96px;--ifm-navbar-link-color:rgb(var(--lsd-text-primary));--ifm-navbar-background-color:rgb(var(--lsd-surface-primary));--ifm-dropdown-link-color:rgb(var(--lsd-text-primary));--ifm-dropdown-hover-background-color:rgb(var(--lsd-surface-secondary));--ifm-background-color:rgb(var(--lsd-surface-primary));--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-primary:rgb(var(--lsd-theme-primary));--ifm-color-secondary:rgb(var(--lsd-theme-secondary));--prism-background-color:rgb(var(--lsd-theme-primary));--ifm-color-gray-0:rgb(var(--lsd-surface-primary));--ifm-color-gray-100:#f8f8fa;--ifm-color-gray-200:#f7f7f8;--ifm-color-gray-300:#eeeef0;--ifm-color-gray-400:#c0c0c2;--ifm-color-gray-500:#828285;--ifm-color-gray-600:#474747;--ifm-color-gray-700:#373738;--ifm-color-gray-800:#1a1a1a;--ifm-color-gray-900:#151515;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-font-color-base-inverse:var(--ifm-color-black);--docusaurus-highlighted-code-line-bg:#ffffff26;--ifm-card-background-color:var(--ifm-color-gray-100)!important;--ifm-alert-foreground-color:var(--ifm-color-gray-700);--ifm-button-background-color:rgb(var(--lsd-surface-primary));--ifm-global-border-width:1px;--ifm-global-radius:0.6rem;--ifm-hover-overlay:#0000000d;--ifm-font-family-base:var(--lsd-typography-generic-font-family);--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--lgs-font-family-secondary:Georgia,"Times New Roman",serif;--ifm-font-size-base:100%;--ifm-line-height-base:1.625;--ifm-font-size-secondary:100%;--ifm-line-height-secondary:1.5;--ifm-font-weight-light:400;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:400;--ifm-font-weight-bold:600;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-h1-font-size:var(--lsd-h1-fontSize);--ifm-h2-font-size:var(--lsd-h2-fontSize);--ifm-h3-font-size:var(--lsd-h3-fontSize);--ifm-h4-font-size:var(--lsd-h4-fontSize);--ifm-h5-font-size:var(--lsd-h5-fontSize);--ifm-h6-font-size:var(--lsd-h6-fontSize);--ifm-global-spacing:24px;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:0.75rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:24px;--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-code-background:rgb(var(--lsd-text-primary))!important;--ifm-pre-padding:1.125rem;--ifm-link-decoration:none;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-border-left-width:3px;--ifm-blockquote-shadow:none;--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-button-padding-vertical:0.4rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-border-radius:var(--ifm-global-radius);--ifm-card-horizontal-spacing:var(--ifm-spacing-horizontal);--ifm-card-vertical-spacing:var(--ifm-spacing-vertical);--ifm-footer-link-horizontal-spacing:0;--ifm-footer-padding-horizontal:var(--content-padding);--ifm-footer-padding-vertical:24px;--ifm-footer-background-color:#0000;--ifm-menu-link-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-menu-link-padding-vertical:0.25rem;--ifm-menu-color:rgb(var(--lsd-text-primary),0.6);--ifm-menu-color-background-active:#0000;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-height:64px;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-padding-horizontal:var(--content-padding);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)/3);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:100vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pills-spacing:0.125rem;--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--ifm-alert-background-color:#0000;--ifm-color-secondary-contrast-background:#0000;--ifm-color-success-contrast-background:#0000;--ifm-color-info-contrast-background:#0000;--ifm-color-warning-contrast-background:#0000;--ifm-color-danger-contrast-background:#0000;--ifm-alert-border-radius:none;--note:#d4d5d8;--tip:#6ace4b;--caution:#ddaa39;--danger:#e46967;--info:#68b1d0;--ifm-color-secondary-dark:var(--note);--ifm-color-secondary-light:var(--note);--ifm-color-success-dark:var(--tip);--ifm-color-success-light:var(--tip);--ifm-color-info-dark:var(--info);--ifm-color-info-light:var(--info);--ifm-color-warning-dark:var(--caution);--ifm-color-warning-light:var(--caution);--ifm-color-danger-dark:var(--danger);--ifm-color-danger-light:var(--danger);--ifm-footer-link-color:rgb(var(--lsd-text-primary));--ifm-color-content-secondary:rgb(var(--lsd-text-primary));--ifm-hero-background-color:#f8f8fa;--ifm-hero-text-color:var(--ifm-color-black);--desktop-footer-gap:200px;--mobile-footer-gap:144px;--doc-grid-gap:16px;--ifm-table-background:#0000!important;--ifm-table-stripe-background:#0000!important;--ifm-pre-border-radius:0!important;--ifm-code-font-size:100%!important;--doc-sidebar-width:16.66vw!important;--doc-sidebar-max-width:320px;--ifm-navbar-item-padding-vertical:8px;--ifm-navbar-item-padding-horizontal:12px;--docusaurus-announcement-bar-height:auto;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--mobile-width:100%;--mobile-height:176px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}body,html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100%}main{min-height:calc(100vh - var(--ifm-navbar-height) - var(--content-padding))}svg *{fill:rgb(var(--lsd-text-primary))}.grid{display:grid;gap:16px}.table-of-contents__link--active,.table-of-contents__link:hover{color:rgb(var(--lsd-text-primary))!important}h1{font-size:var(--lsd-h1-fontSize);font-weight:var(--lsd-h1-fontWeight);line-height:var(--lsd-h1-lineHeight)}h1,h2,h3,h4{font-family:var(--lsd-typography-generic-font-family)}h2{font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight)}h3{font-size:var(--lsd-h3-fontSize);font-weight:var(--lsd-h3-fontWeight);line-height:var(--lsd-h3-lineHeight)}h4{font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight)}code{background:#ffffff26;border-radius:0;color:rgb(var(--lsd-text-primary));background:rgba(var(--lsd-theme-primary),.1)}pre code{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-body1-fontSize)!important;font-weight:var(--lsd-body1-fontWeight)!important;line-height:var(--lsd-body1-lineHeight)!important}.theme-doc-footer-edit-meta-row div[class*=lastUpdated_] b,table td strong,table th{font-weight:400!important}.mdx-page body{overflow-x:hidden!important}.mdx-page h2{margin-top:unset!important}.alert,.card,.theme-code-block{box-shadow:none!important}.menu__list-item-collapsible>a,.navbar{box-shadow:none}.sans{font-family:var(--lgs-font-family-secondary);line-height:var(--ifm-line-height-secondary)}.blog-wrapper--index [itemprop=blogPost] .markdown,.external-link,.footer__bottom,.footer__copyright,.menu__list-item .menu__link,.theme-doc-footer-edit-meta-row div[class*=lastUpdated_],table{font-size:var(--lsd-body2-fontSize)!important;font-weight:var(--lsd-body2-fontWeight)!important;line-height:var(--lsd-body2-lineHeight)!important;font-family:var(--lsd-typography-generic-font-family)!important}.markdown a,.markdown a:hover,article a,article a:hover{text-decoration-color:inherit;text-decoration-color:rgba(var(--lsd-text-primary),.6);text-underline-offset:.3rem}.card{padding:var(--ifm-spacing-vertical) var(--ifm-spacing-horizontal);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.mdx-cta-section--no-border,.mdx-cta-section--no-border>*,.mdx-feature-list--border-none,.mdx-video-section--no-border,.mdx-video-section--no-border>*,.table-of-contents__left-border{border:none!important}.menu__link{align-items:center;display:flex;justify-content:space-between}.menu__link span{color:rgba(var(--lsd-text-primary),.6)}.theme-edit-this-page{align-items:center;display:flex;gap:12px}.menuExternalLink_NmtK,.navbar__inner,.navbar__item{align-items:center}.dropdown__link:hover{color:rgb(var(--lsd-text-secondary))}.blog-wrapper>.container>.row>aside>nav>ul li a:hover,.breadcrumbs__item--active,.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.breadcrumbs__item:not(:last-child):after{background:none;content:"/";opacity:1}.breadcrumbs__link{background:#0000!important;padding:0}.navbar{height:var(--ifm-navbar-height)}.navbar__logo,a[class^=sidebarLogo_] img{height:40px}a[class^=sidebarLogo_]{margin-left:-16px!important;margin:0}.dropdown__link--active{color:rgb(var(--lsd-text-secondary))!important;background-color:#0000}.row{margin:0}.theme-doc-version-banner *,.theme-doc-version-banner:hover *{color:#fff;text-decoration-color:#fff!important}.navbar__left-items>a:not(:last-child){margin-right:1.25rem}.navbar__left-items>a:not(:last-child)[href^="/"]{margin-right:1.75rem}.menu__link--sublist-caret:after{background:none;content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTQgOS41My45NC45NEw4IDcuNDE3bDMuMDYgMy4wNTMuOTQtLjk0LTQtNHoiLz48L3N2Zz4=);filter:unset;height:unset;min-width:unset;width:unset}.menu__list-item--collapsed>.menu__link--sublist-caret:after{transform:rotate(0)!important}.menu__link--active{border-radius:0}.dropdown__menu,.pagination-nav__link{border:1px solid rgb(var(--lsd-border-primary))}.menu__link--active span{color:rgb(var(--lsd-text-primary))}.table-of-contents a{padding-left:16px}.table-of-contents__link--active{border-left:1px solid rgb(var(--lsd-border-primary));padding-left:16px}.cursor-pointer{cursor:pointer}.navbar__item{display:inline-flex;padding:0}.mdx-accordion-item,.navbar__link--active{border-bottom:1px solid rgb(var(--lsd-border-primary))}.dropdown__menu{background:rgb(var(--lsd-surface-primary));border-radius:0;margin-right:-1px;margin-top:6px;padding:0;transition-duration:0ms}.dropdown__link{background-color:#0000;border-radius:0;margin:0;padding:5px 11px}.dropdown__link *{text-decoration:inherit!important}.dropdown__link:hover{background-color:#0000}.margin-left-8,.mdx-jpd__external-link-icon{margin-left:8px}.pagination-nav{margin-top:var(--pagination-nav-margin-top)!important}.overflow-hidden,.pagination-nav a{overflow:hidden}.theme-admonition,table{overflow:auto}.pagination-nav span{display:-webkit-box;-webkit-line-clamp:1;text-overflow:ellipsis;-webkit-box-orient:vertical;overflow:hidden;width:70%;word-break:break-word}.pagination-nav__link{align-items:center;border-radius:0;display:flex;gap:18px;padding:10px 14px}.theme-doc-version-badge,table td,table th,table thead>tr{border:1px solid rgb(var(--lsd-border-primary))}.pagination-nav__link--next{grid-column:2/3;text-align:right;justify-content:flex-end}.footer__item a svg,.menu__caret,.pagination-nav__label:after,.pagination-nav__label:before,.theme-doc-footer-edit-meta-row div[class*=lastUpdated_] small{display:none}.no-breadcrumbs .theme-doc-breadcrumbs,.theme-back-to-top-button{display:none!important}.footer__link-item,.tag_NdBD{display:inline-block}.lsd-collapse__content{padding:24px}.theme-doc-version-badge{background:#0000;color:rgb(var(--lsd-text-primary));margin-bottom:16px;padding:4px 8px}.navbar__right-items{align-items:center;display:flex}table{border-collapse:collapse;margin-bottom:var(--ifm-spacing-vertical);display:table;table-layout:fixed;width:100%}table th{text-align:left}table td{color:var(--ifm-table-cell-color)}.theme-doc-footer{margin-bottom:96px}.theme-doc-footer-edit-meta-row div[class*=lastUpdated_]{font-style:normal;opacity:.7}.navbar-sidebar__item{padding-block:0;padding-inline:var(--content-padding)}.navbar-sidebar__back{align-items:center;display:flex;gap:16px;margin:24px 0!important;padding:0;width:100%!important}.theme-doc-sidebar-menu .menu__link{padding-left:var(--content-padding);padding-right:0}.menu__list-item-collapsible>a[aria-expanded=true]>svg{transform:rotate(180deg)}.events .pagination-nav,.events aside,.menu__list-item-collapsible>a>svg,.news .theme-doc-sidebar-container,.news header h1{display:none}main[itemtype*=Blog]{margin-left:0}.mdx-ghc-subheader-text,main[itemtype*=Blog] .theme-doc-breadcrumbs{margin-bottom:40px}main[itemtype*=Blog] .blog-divider{background:rgb(var(--lsd-theme-primary));margin-block:40px}.events .theme-doc-markdown>h1{margin-bottom:16px!important}.events .breadcrumbs__item,.events .breadcrumbs__link{-webkit-text-decoration:none;text-decoration:none}.events .theme-doc-breadcrumbs{display:block}.full-width>div .main-wrapper main{grid-column:1/17!important}.news .news-title{display:flex;font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h1-fontSize);font-weight:var(--lsd-h1-fontWeight);gap:16px;line-height:var(--lsd-h1-lineHeight);margin-bottom:0!important}.news .news-title span,.theme-code-block:hover .buttonGroup_M5ko button{opacity:.4}.footer__links>div:first-of-type,.footer__links>div:nth-of-type(3),.mdx-event-profile__title{margin-bottom:8px}.footer__links>div:nth-of-type(2){margin-bottom:34px}.container{padding-inline:var(--content-padding)}.main-wrapper>main,.main-wrapper>main>.row,.main-wrapper>main>.row>.col{--ifm-spacing-horizontal:var(--content-padding);flex-basis:100%!important;flex:unset;margin:0;max-width:unset;width:100%!important}.footer{margin-bottom:18px;width:100%!important}.footer>div{display:grid;gap:1rem;max-width:unset;padding:24px 0 0}.footer__bottom{grid-column:1/12;grid-row:1/1;text-align:unset}.blog-archive-page .main-wrapper header .container p,.blog-wrapper main>section article ul li a:after,.blog-wrapper main>section article ul li a:before,.docSidebarContainer_YfHR,.footer__bottom>div:first-of-type,.hidden,.mdx-accordion-item>input,.sidebarLogo_Ydl9,.theme-doc-toc-desktop,.themedComponent_mlkZ,.themedImage_kfRS,[data-hidden-doc-sidebar=true] .theme-doc-sidebar-container,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.footer__title{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-label1-fontSize)!important;font-weight:var(--lsd-label1-fontWeight)!important;font-weight:var(--ifm-font-weight-normal);line-height:var(--lsd-label1-lineHeight)!important;margin-bottom:4px}.blog-wrapper main>section article ul li .lsd-tag>span,.blog-wrapper main>section article ul li .lsd-tag>span>span,.footer__item,.footer__item a{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-label1-fontSize)!important;font-weight:var(--lsd-label1-fontWeight)!important;line-height:var(--lsd-label1-lineHeight)!important}.footer>div:first-child>.footer__links,.footer>div:nth-child(2)>.footer__links{display:grid;grid-column:13/25;grid-row:1/1;margin-bottom:0}.footer>div:nth-child(2)>.footer__links{gap:2rem 1rem;grid-template-columns:repeat(2,1fr)}.footer__col{grid-template-columns:span c}.blog-wrapper main>section article ul li a,.codeBlockStandalone_MEMb,.col.footer__col,.modal_kLVz>div>div:first-child,.noResults_mD2O,.root_N57j ul,.root_ONDG.empty_a7qb{padding:0}.footer__items{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}.footer__item{display:inline-flex}.blog-wrapper .breadcrumbs__item,.blog-wrapper main a,.blog-wrapper--index h2[itemprop=headline]>a,.cta-buttons .button,.cta-buttons .button:hover,.footer__item:not(:last-child):after{-webkit-text-decoration:none;text-decoration:none}.footer__item:not(:last-child):after{content:"•";display:inline-block;margin-left:8px}.footer__logo{max-width:var(--ifm-footer-logo-max-width);margin:0!important}.navbar__inner{flex-direction:row}.hero--primary{--ifm-hero-background-color:rgb(var(--lsd-surface-primary));--ifm-hero-text-color:rgb(var(--lsd-text-primary))}.docusaurus-mermaid-container{margin-block:40px}.hidden-scrollbar::-webkit-scrollbar{display:none;width:0}.hidden-scrollbar{-ms-overflow-style:none;scrollbar-width:none}[class^=mdx-]{--lsd-h1-fontWeight:100;--lsd-h2-fontWeight:300;--lsd-h3-fontWeight:300;--lsd-h4-fontWeight:300;--lsd-h5-fontWeight:300;--lsd-h6-fontWeight:300;--lsd-subtitle1-fontWeight:300}.hidden{opacity:0;visibility:hidden}.blog-wrapper h1[itemprop=headline]{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h1-fontSize)!important;font-weight:var(--lsd-h1-fontWeight)!important;line-height:var(--lsd-h1-lineHeight)!important}.blog-wrapper>.container{display:flex;margin:0;max-width:unset;padding-inline:0;width:100%}.mdx-cta-section .mdx-cta-section--align-right .mdx-cta-button,.mdx-logo-carousel .mdx-section-header__extra,.mdx-video-section .mdx-video-section--align-right .mdx-cta-button{margin-left:auto}.blog-wrapper>.container>.row,.mdx-roadmap,.mdx-scroll-buttons,.two-items{width:100%}.blog-wrapper main>header h1{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important;margin-bottom:.5rem}.blog-wrapper>.container>.row>aside{max-width:unset}.blog-wrapper>.container>.row>aside>nav{padding-top:16px;top:var(--ifm-navbar-height)}.blog-wrapper>.container>.row>aside>nav>div:first-child{font-family:var(--lsd-typography-generic-font-family)!important;margin-bottom:0!important;padding:4px 0 4px 15px}.blog-wrapper>.container>.row>aside>nav>ul li a{box-sizing:border-box;display:block;font-family:var(--lsd-typography-generic-font-family)!important;opacity:.6;padding:4px 0 4px 2rem}.blog-wrapper--index>.container>.row>aside>nav>div:first-child,.blog-wrapper>.container>.row>aside>nav>ul li a[class*=sidebarItemLinkActive_]{border-color:rgb(var(--lsd-border-primary))}.blog-wrapper--index h2[itemprop=headline]{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.blog-wrapper>.container>.row>main{margin-top:16px;max-width:unset}.blog-archive-page .main-wrapper header .container h1,.blog-wrapper article header h2,.blog-wrapper main>section article h2{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.blog-wrapper article footer{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-top:24px!important}.blog-wrapper main article{border-bottom:1px solid rgb(var(--lsd-border-primary));margin-bottom:34px!important;padding-bottom:34px}.blog-wrapper main article:last-of-type{border-bottom:none!important}.blog-archive-page .main-wrapper{padding:2rem var(--content-padding)}.blog-archive-page .main-wrapper header{border-bottom:1px solid var(--ifm-hero-text-color);margin:0;padding:0 0 1rem}.blog-archive-page .main-wrapper header .container{margin:0;padding:0!important}.blog-archive-page .main-wrapper main>section .container{margin:0;max-width:unset;padding:0}.blog-archive-page .main-wrapper main>section .container>.row,.mdx-logo-carousel-buttons,.mdx-roadmap__timeline{margin-top:64px}.blog-archive-page .main-wrapper main>section .container>.row>.col{margin:0!important;max-width:unset;padding:0}.blog-archive-page .main-wrapper main>section .container>.row>.col h3{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h5-fontSize)!important;font-weight:var(--lsd-h5-fontWeight)!important;line-height:var(--lsd-h5-lineHeight)!important}.blog-archive-page .main-wrapper main>section .container>.row>.col a{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-body1-fontSize)!important;font-weight:var(--lsd-body1-fontWeight)!important;line-height:var(--lsd-body1-lineHeight)!important}.blog-archive-page .main-wrapper main>section .container>.row>.col ul{margin:1rem 0 0;padding:0 0 0 1.5rem}.blog-wrapper main>section article{border-bottom:none;padding:0}.blog-wrapper main>section article ul,.mdx-app-card__name{margin-top:1rem}.blog-wrapper main>section article ul li{margin:0 .5rem 0 0!important;padding:0!important}.blog-wrapper main>section article ul li .lsd-tag{height:28px;padding:3px 11px}.blog-wrapper main>section article ul li .lsd-tag>span,.blog-wrapper main>section article ul li .lsd-tag>span>span{color:rgb(var(--lsd-text-primary))}.header-github-link:hover,.mdx-event-card__label,.mdx-event-info__label{opacity:.6}.header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat;content:"";display:flex;height:24px;width:24px}html[data-theme=dark] .header-github-link:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat}.cta-buttons .button,html[data-theme=dark] .cta-buttons .button{background-color:rgb(var(--lsd-text-primary));color:rgb(var(--lsd-surface-primary))}.video-container{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:space-around}.yt-video{flex:1 1 auto;height:432px;max-width:100%}.case-study-container a{display:block;margin-bottom:20px;width:100%}.case-study-container a img,.externalLinkIcon_Qfue svg,.root_TTsz.fullWidth_HBtH{height:auto;width:100%}.cta-buttons{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:flex-start;margin:1.5rem 0}.cta-buttons .button{border:1px solid rgb(var(--lsd-text-primary));border-radius:4px;display:inline-block;font-weight:500;padding:.5rem 1.25rem;transition:.2s}.cta-buttons .button:hover,html[data-theme=dark] .cta-buttons .button:hover{background-color:rgb(var(--lsd-surface-primary));color:rgb(var(--lsd-text-primary))}html[data-theme=dark] .cta-buttons .button{border-color:rgb(var(--lsd-text-primary))}.mdx-cta-section,.mdx-cta-section--list .mdx-cta-section__list>:not(:first-child),.mdx-video-section{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-accordion-item__header{align-items:center;display:flex;flex-direction:row;gap:0 16px;justify-content:space-between;min-height:88px;padding:16px 0}.mdx-asset-card,.mdx-erc{min-height:144px;-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-accordion-item__header,.mdx-accordion-item__header *,.mdx-cta-section__list-item-link,.mdx-video-section__list-item-link{cursor:pointer}.mdx-accordion-item__content-wrapper{height:auto;overflow:hidden}.mdx-accordion-item__content{height:0}.mdx-accordion-item--open .mdx-accordion-item__content{height:auto;padding-bottom:1.875rem;padding-top:6px}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=dark] .themedImage--dark_OvIx,[data-theme=light] .themedComponent--light_NVdE,[data-theme=light] .themedImage--light_BL8e,html:not([data-theme]) .themedComponent--light_NVdE,html:not([data-theme]) .themedImage--light_BL8e{display:initial}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.breadcrumbsContainer_RLvU{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:24px}.codeBlockContainer_Ckt0{background:var(--prism-background-color);border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw)}.codeBlockContainer_Ckt0,.codeBlockContainer_EB2s{color:var(--prism-color);margin-bottom:var(--ifm-leading)}.codeBlockContainer_EB2s{background:#0000;border-radius:0}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.content_knG7,.mdx-cta-section .mdx-cta-section--align-center *{text-align:center}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_Vdqa{opacity:1!important}.copyButtonIcons_IEyt{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_TrPX,.copyButtonSuccessIcon_cVMy{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_cVMy{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_Vdqa .copyButtonIcon_TrPX{opacity:0;transform:scale(.33)}.copyButtonCopied_Vdqa .copyButtonSuccessIcon_cVMy{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_b1P5{height:1.2rem;width:1.2rem}.buttonGroup_M5ko{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup_M5ko button{align-items:center;background:var(--prism-background-color);border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);color:var(--prism-color);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup_M5ko button:focus-visible,.buttonGroup_M5ko button:hover{opacity:1!important}.codeBlockContent_QJqH{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_OeMC{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlockTitle_OeMC+.codeBlockContent_QJqH .codeBlock_a8dz{border-top-left-radius:0;border-top-right-radius:0}.collapse_LWBd button,.textField_af43{width:100%!important}.chevron_How5{left:0;position:absolute}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0}.content_knG7 a{color:inherit}.mdx-asset-card__downloadables>* button,.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>a,.mdx-cta-section--list .mdx-cta-section__list>a{-webkit-text-decoration:none;text-decoration:none}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.icon_S7Kx.s_AZDZ svg{width:10px}.icon_S7Kx.m_thRi svg{width:20px}.icon_S7Kx.l_WHPt svg{width:40px}[data-theme=dark] .icon_S7Kx.fill_hNhN,[data-theme=dark] .icon_S7Kx.fill_hNhN *{fill:var(--ifm-color-white)}[data-theme=dark] .icon_S7Kx.stroke_N8dm svg,[data-theme=dark] .icon_S7Kx.stroke_N8dm svg *{stroke:var(--ifm-color-white)}[data-theme=light] .icon_S7Kx.fill_hNhN,[data-theme=light] .icon_S7Kx.fill_hNhN *{fill:var(--ifm-color-black)}[data-theme=light] .icon_S7Kx.stroke_N8dm svg,[data-theme=light] .icon_S7Kx.stroke_N8dm svg *{stroke:var(--ifm-color-black)}.mdx-app-card{align-items:flex-start;display:flex;flex-direction:column;padding:1.5rem 0}.mdx-app-card__logo{height:40px;width:auto}.mdx-app-card__description{margin-top:1.5rem}.mdx-app-card__link{margin-top:1.5rem;width:100%}.mdx-app-card__link button{padding:10px 16px;width:100%}.mdx-app-card__link button>span{align-items:center;display:block;display:flex;flex-direction:row;justify-content:space-between;width:100%}.root_TTsz{display:inline-block;font-size:0!important;position:relative}.root_TTsz.fullHeight_ls1u{height:100%;width:auto}.root_TTsz .content_feMR{height:100%;left:0;position:absolute;top:0;width:100%}.root_TTsz:not(.keep_Y9Ea) .root_TTsz{height:auto;width:auto}.root_TTsz:not(.keep_Y9Ea) .content_feMR{height:100%;left:unset;position:relative;top:unset;width:100%}.mdx-asset-card{align-items:flex-start;border:1px solid rgb(var(--lsd-border-primary));border-bottom:none;display:flex;flex-direction:column;width:216px}.mdx-asset-card__inner{padding:16px 16px 32px;width:100%}.mdx-asset-card__title,.mdx-event-profile-list__container h2,.mdx-event-profile__role,.mdx-ghc__challenge-labels,.mdx-ghc__issue-title{margin-bottom:16px}.mdx-asset-card__image img{height:100%;object-fit:contain;object-position:center center;width:100%}.mdx-asset-card__downloadables{align-items:flex-start;display:flex;flex-direction:row;justify-content:stretch;width:100%}.mdx-asset-card__downloadables>*{flex-grow:1;font-size:12px;-webkit-text-decoration:none!important;text-decoration:none!important;text-underline-offset:unset!important}.mdx-asset-card__downloadables>* button{justify-content:space-between;width:100%}.mdx-asset-card__downloadables>:first-child button{border-left:none}.mdx-asset-card__downloadables>:last-child button,.mdx-asset-card__downloadables>:not(:last-child) button{border-right:none}.mdx-asset-card:not(.mdx-asset-card--downloadable) .mdx-asset-card__inner{border-bottom:1px solid rgb(var(--lsd-border-primary))}.mdx-box{padding-bottom:var(--mdx-box-bottom);padding-top:var(--mdx-box-top)}.mdx-cta-button,.mdx-section-header--with-description .mdx-section-header__extra{margin-top:2rem}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>.mdx-cta-section__item-description,.mdx-cta-section__description{margin-top:1rem}.mdx-cta-button button,.mdx-cta-button button span{font-size:inherit;font-weight:inherit;line-height:inherit}.mdx-cta-button .lsd-button--large{padding:9px 39px}.mdx-cta-button .lsd-button--small{padding:5px 11px}.mdx-cta-section,.mdx-video-section{display:grid;padding:24px 0 0}.mdx-cta-section .mdx-cta-section__link,.mdx-jpd__job-link,.mdx-video-section .mdx-video-section__link{display:block;width:fit-content}.mdx-cta-section .mdx-cta-section__header__desktop-button .mdx-cta-button{margin-top:unset}.mdx-cta-section .mdx-cta-section--align-center{align-items:center;display:flex;flex-direction:column;margin:auto;max-width:936px}.mdx-cta-section .mdx-cta-section--align-center .mdx-cta-section__description{margin-top:1.5rem}.mdx-cta-section .mdx-cta-section--align-left *{text-align:left}.mdx-cta-section .mdx-cta-section--align-right *{text-align:right}.mdx-cta-section__header,.mdx-profile-card__profile{align-items:center;display:flex;gap:24px}.mdx-cta-section__header button{font-size:12px!important;line-height:16px!important;padding:6px 12px!important}.mdx-cta-section--title-only .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);font-weight:300;line-height:var(--lsd-h5-lineHeight);max-width:886px}.mdx-cta-section--title-button .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-display4-fontSize);font-weight:var(--lsd-display4-fontWeight);font-weight:300;line-height:var(--lsd-display4-lineHeight);max-width:886px}.mdx-cta-section--full-width .mdx-cta-section__container{display:grid;gap:0 1rem;grid-template-columns:repeat(2,1fr)}.mdx-cta-section--full-width .mdx-cta-section__title,.mdx-ns__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h3-fontSize);font-weight:var(--lsd-h3-fontWeight);line-height:var(--lsd-h3-lineHeight)}.mdx-cta-section--full-width .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-cta-section--simple .mdx-cta-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-cta-section--simple .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-cta-section--list{display:grid;gap:0 1rem;grid-template-columns:1fr 1fr}.mdx-cta-section--list .mdx-cta-section__container{grid-column:1/2}.mdx-cta-section--list .mdx-cta-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-cta-section--list .mdx-cta-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-hero h1,.mdx-roadmap .mdx-cta-section__container h3,.mdx-roadmap .mdx-cta-section__description,.mdx-roadmap .mdx-cta-section__title{font-family:var(--lsd-typography-generic-font-family)!important}.mdx-cta-section--list .mdx-cta-section__list{display:flex;flex-direction:column;gap:1.5rem 0;grid-column:2/3}.mdx-cta-section--list .mdx-cta-section__list>a{display:block}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>a>.mdx-cta-section__item-title{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:1rem;color:rgb(var(--lsd-text-primary));display:flex;gap:12px;margin-top:1.5rem;padding:3px 11px;width:fit-content}.mdx-community-feedback .mdx-section-header__title,.mdx-logo-carousel .mdx-section-header__title{flex-basis:100%}.mdx-community-feedback .mdx-community-feedback__description{display:block;margin-bottom:80px;margin-top:24px;max-width:528px}.mdx-community-feedback .mdx-community-feedback__items{align-items:flex-start;display:flex;overflow-x:auto}.mdx-community-feedback .mdx-community-feedback__item{align-self:flex-start;display:flex;flex-direction:column;flex-shrink:0;gap:20px;min-width:296px;width:calc(33.33333% - 10.66667px)}.mdx-community-feedback .mdx-community-feedback__item-header{align-items:center;border-bottom:1px solid rgb(var(--lsd-border-primary));display:flex;justify-content:space-between;padding-bottom:20px}.mdx-community-feedback .mdx-community-feedback__item-content{display:flex;flex:1 1 auto;flex-direction:column;justify-content:flex-start;min-height:180px;position:relative}.mdx-community-feedback .mdx-community-feedback__media-wrapper,.mdx-timeline-item__period-container{position:relative;width:100%}.mdx-community-feedback .mdx-community-feedback__media-wrapper .mdx-community-feedback__item-gradient{background:linear-gradient(to bottom,rgba(var(--lsd-theme-secondary),0) 0,rgba(var(--lsd-theme-secondary),.97) 80%,rgba(var(--lsd-theme-secondary),1) 100%);bottom:0;height:40px;left:0;pointer-events:none;position:absolute;right:0;z-index:2}.mdx-community-feedback .mdx-community-feedback__item-header-user{align-items:center;display:flex;gap:14px;-webkit-text-decoration:none;text-decoration:none}.mdx-erc:hover .mdx-erc__title,.mdx-ghc__issue-title-link:hover,.mdx-ghc__view-on-github-link:hover{-webkit-text-decoration:underline!important;text-decoration:underline!important}.mdx-community-feedback .mdx-community-feedback__item-header-user-image{border-radius:50%;height:48px;width:48px}.mdx-community-feedback .mdx-community-feedback__item-header-user-handle{opacity:.5}.mdx-community-feedback .mdx-community-feedback__item-header-user-info{display:flex;flex-direction:column}.mdx-community-feedback .mdx-community-feedback__item-header-link{margin:12px}.mdx-community-feedback .mdx-community-feedback__item-content-text{display:-webkit-box;overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word;-webkit-box-orient:vertical;align-self:stretch;-webkit-line-clamp:3;line-clamp:3;overflow:hidden;text-overflow:ellipsis}.mdx-erc--with-preview .mdx-erc__icon,.mdx-ns__inner .mdx-ns__toast .lsd-toast__close-button{display:none}.mdx-erc__title,.mdx-event-card__title{-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.mdx-community-feedback .mdx-community-feedback__item-see-more{background:rgb(var(--lsd-theme-secondary));bottom:0;left:0;margin-top:16px;position:absolute;text-align:left;width:100%}.mdx-video-section .mdx-video-section--align-center *,.root_EFVO{text-align:center}.mdx-community-feedback .mdx-community-feedback__item-see-more.static{margin-top:4px;position:static}.mdx-community-feedback .mdx-community-feedback__item-see-more-text{background:none;border:none;cursor:pointer;opacity:.6;padding:0;position:relative}.mdx-community-feedback .mdx-community-feedback__item-see-less-text{bottom:18px;cursor:pointer;opacity:.6;padding:0;position:relative}.mdx-community-feedback .mdx-community-feedback__item-image{margin-top:16px;object-fit:cover;object-position:top;transition:height .3s;width:100%}.mdx-community-feedback .mdx-community-feedback__item-image.collapsed{height:60px}.img_ev3q,.mdx-community-feedback .mdx-community-feedback__item-image.expanded{height:auto}.mdx-community-feedback-buttons,.mdx-table-view-table-title{margin-bottom:32px}.mdx-scroll-buttons>div{display:flex;flex-direction:row;justify-content:flex-end;width:100%}.mdx-scroll-buttons-container{scroll-snap-type:x mandatory}.mdx-scroll-buttons-container>*{scroll-snap-align:start}.mdx-doc-metadata{display:flex;flex-direction:row;line-height:0;margin-bottom:2.5rem}.mdx-doc-metadata>span:not(:last-child):after{content:"•";display:inline-block;margin-inline:.75rem}.markdown h1+.mdx-doc-metadata,.markdown header+.mdx-doc-metadata{margin-top:calc(var(--ifm-h1-vertical-rhythm-bottom)*-1*var(--ifm-leading) + 1rem)}.mdx-erc{align-items:flex-start;border:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:row}.mdx-erc__icon{padding:16px 16px 16px 8px}.mdx-erc__inner{flex-grow:1;padding:16px}.mdx-erc__logo,.mdx-erc__logo svg{height:32px!important;width:32px!important}.mdx-erc__title{display:-webkit-box;margin-top:32px;max-height:calc(var(--lsd-body1-lineHeight)*2)}.mdx-erc__description{margin-top:8px}.mdx-erc--with-preview{display:flex;flex-direction:column}.mdx-erc--with-preview .mdx-erc__preview-image{border-bottom:1px solid rgb(var(--lsd-border-primary));height:100%;object-fit:cover;width:100%}.mdx-erc--with-preview .mdx-erc__inner{display:grid;gap:0 16px;grid-template-columns:32px auto;grid-template-rows:auto auto;padding:16px}.mdx-erc--with-preview .mdx-erc__logo{align-self:center;grid-column:1;grid-row:1/span 2}.mdx-erc--with-preview .mdx-erc__title{-webkit-line-clamp:1;margin-top:0;-webkit-box-orient:vertical;max-height:calc(var(--lsd-body1-lineHeight)*1)}.mdx-erc--with-preview .mdx-erc__description{margin-top:4px}.mdx-feature-list{border-top:1px solid rgb(var(--lsd-surface-secondary));position:relative}.mdx-feature-list__feature,.mdx-ghc__container,.mdx-showcase-card{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-feature-list__title,.root_ltHz{padding:24px 0}.mdx-feature-list__feature-index--circle{align-items:center;background:rgb(var(--lsd-surface-secondary));border-radius:100%;color:rgb(var(--lsd-text-secondary))!important;display:inline-flex;height:1.875rem;justify-content:center;padding:.5rem;width:1.875rem}.mdx-feature-list__feature-index--number{background:#0000;color:rgb(var(--lsd-text-primary))!important;display:block;font-size:28px!important;height:unset;line-height:36px!important;opacity:.3;padding:unset;width:unset}.mdx-feature-list__list{display:grid;grid-template-columns:repeat(2,1fr)}.mdx-event-profile__info,.mdx-feature-list__feature-inner,.mdx-numbers-view-header-title,.roadmap__header{display:flex;flex-direction:column}.mdx-feature-list__feature-title{margin-top:.5rem}.mdx-feature-list__feature-description{max-width:460px}.mdx-feature-list__header{align-items:center;display:flex;flex-direction:row;gap:2rem}.mdx-feature-list--cta-bottom .mdx-feature-list__extra{margin-top:3.5rem;padding:0 1rem}.mdx-feature-list__feature-border--none{width:0!important}.mdx-ghc__container{padding-top:24px}.mdx-ghc__issue-title-link{-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-ghc__header,.mdx-jpd__header{margin-bottom:40px;margin-top:16px}.mdx-ghc__challenge-label{border:1px solid rgb(var(--lsd-border-primary));border-radius:20px;margin-right:8px;padding:4px 8px}.mdx-ghc__view-on-github-link{display:block;margin-bottom:56px;margin-top:40px;-webkit-text-decoration:none!important;text-decoration:none!important;width:fit-content}.mdx-ghc__participant-photo{border:1px solid rgb(var(--lsd-border-secondary));border-radius:100%;margin-left:-4px;width:24px}.mdx-timeline-item,.mdx-timeline-item__border{border-bottom:1px solid rgb(var(--lsd-border-primary))}.mdx-ghc__participant-photo-container{align-items:center;direction:rtl;display:flex;justify-content:flex-end;padding-left:4px}.mdx-ghc__comment-count{margin-left:4px}.mdx-ghc__issue-content-grid{align-items:center;display:grid;grid-template-columns:82px 135px 82px 1fr;margin-top:24px;row-gap:12px}.mdx-hero{--default-z-index:1;--hero-max-height:1080px;display:flex;flex-direction:column;height:calc(100vh - var(--ifm-navbar-height) - 8px);max-height:var(--hero-max-height);position:relative;z-index:var(--default-z-index)}.mdx-hero h1{font-size:var(--lsd-display4-fontSize)!important;font-weight:var(--lsd-display4-fontWeight)!important;line-height:var(--lsd-display4-lineHeight)!important}.mdx-hero--top{justify-content:flex-start}.mdx-hero--center{justify-content:center}.mdx-hero--bottom{justify-content:flex-end}.mdx-hero-action--large button{padding:10px 64px}.mdx-hero-actions{align-items:center;display:flex;flex-direction:row;gap:0 1rem;margin-top:2rem;position:relative;z-index:98}.mdx-hero-description{font-size:18px!important;line-height:24px!important;margin-top:18px;max-width:528px;position:relative;text-shadow:1px 1px 6px rgba(var(--lsd-surface-primary),1);z-index:-2}.mdx-hero-info{display:flex;flex-direction:column;justify-content:end;max-width:596px;padding:32px 0;transition:margin-bottom .05s ease-in-out}.mdx-hero-title{font-size:48px!important;line-height:56px!important}.mdx-jpd__department-title,.mdx-video-section__header button{font-size:12px!important;line-height:16px!important}.mdx-hero-video{display:grid;flex-grow:1;grid-template-columns:1fr;grid-template-rows:1fr;pointer-events:none;position:relative;--hero-video-height:120%;--hero-video-min-height:100vh;--hero-video-offset-y:-150px;--hero-video-scale:1.70951586;--hero-video-height-mobile:120%;--hero-video-min-height-mobile:100vh;--hero-video-offset-y-mobile:-50px;--hero-video-scale-mobile:1.70951586}.mdx-hero-video>*{align-items:center;display:flex;flex-direction:column;grid-column:1/1;grid-row:1/1;height:var(--hero-video-height);justify-content:center;left:0;min-height:var(--hero-video-min-height);position:absolute;top:0;transform:translateY(var(--hero-video-offset-y));width:100%}.mdx-hero-video .mdx-hero-video__placeholder{opacity:0;visibility:hidden}.mdx-hero-video img{object-fit:contain}.mdx-hero-video img,.mdx-hero-video video{height:100%;max-width:calc(var(--container-max-width)*var(--hero-video-scale));object-position:top;transform-origin:top center;width:auto}.mdx-hero-video--loading .mdx-hero-video__video{opacity:0}.mdx-hero-video--loading .mdx-hero-video__placeholder{opacity:1;visibility:visible}.mdx-hero-asset{--default-z-index:-1;position:relative;z-index:var(--default-z-index)}.mdx-hero-asset button{display:none!important}.mdx-hero-asset img{position:absolute;right:0;top:0}.mdx-jpd__single-job-department-container{border-top:1px solid rgb(var(--lsd-border-primary));padding-top:8px}.mdx-jpd__job-title-container{align-items:center;display:flex;padding-bottom:8px}.mdx-jpd__job-list{list-style-type:none;margin:0;padding:8px 0 24px}.mdx-jpd__job-list-item{padding:14px 0}.mdx-jpd__job-link,.mdx-jpd__job-link:hover,.root_Ooa0{-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-event-card__title:hover,.mdx-jpd__job-link:hover .mdx-jpd__job-title,.mdx-news-card:hover .mdx-news-card__title,.mdx-social-card:hover{-webkit-text-decoration:underline!important;text-decoration:underline!important}.mdx-logo-carousel .mdx-logo-carousel__inner{margin-top:32px}.mdx-logo-carousel .mdx-logo-carousel__item{flex-shrink:0}.mdx-logo-carousel .mdx-logo-carousel__logo{height:56px;width:auto}.mdx-ns__inner form{margin-top:40px;width:100%}.mdx-ns__inner .mdx-ns__inputs{align-items:center;display:flex;flex-direction:row;gap:16px;width:100%}.mdx-ns__inner .mdx-ns__inputs>*{flex-grow:1}.mdx-event-card-list__container,.mdx-ns__inner .mdx-ns__submit-button{margin-top:40px}.mdx-ns__inner .mdx-ns__toast{margin-bottom:24px;margin-top:-16px;width:100%}.mdx-profile-card{align-items:flex-start;border-top:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:column;justify-content:space-between;padding:1.5rem 1rem 0 0}.mdx-profile-card__profile-placeholder{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:50%;display:flex;height:56px!important;justify-content:center;width:56px!important}.mdx-profile-card__profile-placeholder svg,.mdx-social-card__logo,.mdx-social-card__logo svg{height:40px!important;width:40px!important}.mdx-profile-card__profile-placeholder svg rect{fill:unset!important}.mdx-profile-card__profile-image{border-radius:50%;height:56px!important;width:56px!important}.mdx-profile-card__buttons{align-items:center;display:flex;flex-direction:row;gap:8px;height:16px;margin-top:8px}.mdx-profile-card__link{height:fit-content;position:relative;-webkit-text-decoration:none;text-decoration:none}.mdx-event-card,.mdx-event-profile,.mdx-news-card,.mdx-social-card{-webkit-text-decoration:none!important;text-decoration:none!important}.mdx-profile-card__link svg{height:16px;width:16px}.mdx-timeline-item{display:flex;flex:0 0 auto;flex-direction:column;gap:1rem;justify-content:space-between;padding-bottom:23px;scroll-snap-align:start!important;width:193px}.mdx-timeline-item__header{align-items:flex-start;display:flex;flex-direction:column;gap:1rem}.mdx-timeline-item__border{height:50%;left:0;position:absolute;top:0;width:calc(100% + 1rem);z-index:-1}.mdx-timeline-item--border-dashed .mdx-timeline-item__border{border-bottom-style:dashed}.mdx-timeline-item__period{border-radius:10rem;display:inline-block;padding:3px 12px}#__docusaurus-base-url-issue-banner-container,.docItemContainer_hrrU .tocMobile_imaF:not(:first-of-type),.groups_p1lF .divider_eGUz:last-child,.mdx-roadmap__timeline .mdx-grid-item:last-child .mdx-timeline-item__border,.mdx-timeline-item__item:last-child .mdx-timeline-item__border,.modal_kLVz .closeButton_Rr0e,.navbarSearchContainer_Bca1:empty,.toc_pP_5,.wrapper_SWrM .fullscreenButton_Bocn,[data-theme=dark] .lightToggleIcon_K4TL,[data-theme=light] .darkToggleIcon_lKkA{display:none}.mdx-timeline-item__period--filled{background-color:rgb(var(--lsd-surface-secondary));border:1px solid rgb(var(--lsd-border-secondary));color:rgb(var(--lsd-text-secondary))!important}.mdx-timeline-item__period--transparent{background-color:rgb(var(--lsd-surface-primary));border:1px solid rgb(var(--lsd-border-primary));color:rgb(var(--lsd-text-primary))!important}.mdx-timeline-item__description{margin-bottom:auto;margin-top:24px;white-space:pre-wrap}.mdx-roadmap .mdx-grid__scroll{margin-bottom:32px!important}.mdx-roadmap .mdx-cta-section__title{font-size:var(--lsd-h2-fontSize)!important;font-weight:var(--lsd-h2-fontWeight)!important;line-height:var(--lsd-h2-lineHeight)!important}.mdx-roadmap .mdx-cta-section__description{font-size:var(--lsd-h5-fontSize)!important;font-weight:var(--lsd-h5-fontWeight)!important;line-height:var(--lsd-h5-lineHeight)!important;margin-top:24px;max-width:528px}.mdx-roadmap .mdx-cta-section__container h3{font-size:var(--lsd-subtitle1-fontSize)!important;font-weight:var(--lsd-subtitle1-fontWeight)!important;line-height:var(--lsd-subtitle1-lineHeight)!important}.mdx-roadmap__timeline .mdx-roadmap__timeline-item--no-border{border:none}.mdx-roadmap__timeline-item{height:100%}.scrollToBottom_NE5w{--offset-y:-2rem;background:rgb(var(--lsd-surface-primary))!important;opacity:1;position:absolute;transform:translateY(-2rem);transition:.2s ease-in-out;z-index:100;top:min(100*var(--vh) - var(--ifm-navbar-height),var(--maxTop) - var(--ifm-navbar-height));transform:translateY(calc(-100% + var(--offset-y)))}.scrollToBottom_NE5w.hide_q_kn{opacity:0;transform:translateY(calc(-100% + var(--offset-y) - .625rem))}.mdx-section-header{border-top:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:row;gap:1rem;padding-top:24px;width:100%}.mdx-section-header>*{flex-basis:50%}.mdx-section-header__title{display:flex;flex-direction:row;gap:1.5rem}.mdx-section-header--no-border{border-top:none}.mdx-showcase-card__inner{display:flex;flex-direction:column;gap:1rem;padding-top:1.5rem}.mdx-showcase-card__logo{height:auto;width:40px}.mdx-showcase-card__index{align-items:center;background-color:rgb(var(--lsd-surface-secondary));border-radius:50%;color:rgb(var(--lsd-text-secondary))!important;display:flex;flex-direction:row;height:30px;justify-content:center;width:30px}.mdx-showcase-card__title{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.mdx-showcase-card__description{margin-top:1rem;padding-top:.5rem}.mdx-showcase-card--large .mdx-showcase-card__logo{width:40px}.mdx-showcase-card--small .mdx-showcase-card__logo{width:34px}.mdx-showcase-card--border-solid .mdx-showcase-card__description{border-top:1px solid rgb(var(--lsd-border-primary));padding-top:1rem}.mdx-showcase-card__cta{align-items:center;display:flex;font-size:14px;gap:6px;line-height:20px}.mdx-showcase-card__cta svg{transform:rotate(-90deg)}.mdx-social-card{align-items:flex-start;border:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:column;justify-content:space-between;min-height:144px;padding:1rem}.mdx-social-card__row{display:flex;justify-content:space-between;width:100%}.mdx-event-card{display:flex;flex-direction:column;gap:24px}.mdx-event-card__row,.mdx-event-profile__row,.mdx-news-card__row{display:flex;gap:8px;justify-content:space-between;width:100%}.mdx-event-card__thumbnail{border:1px solid rgba(var(--lsd-border-primary),.2);height:55px}.mdx-event-card__title{display:-webkit-box;text-overflow:ellipsis;height:48px;word-break:break-word}.mdx-event-card__info{border-top:1px solid rgb(var(--lsd-border-primary));display:flex;flex-direction:column;gap:16px;padding:16px 2px 16px 0;width:100%}.mdx-event-card__info *,.mdx-event-info__content{white-space:pre-wrap}.mdx-event-card-list__button,.mdx-news-card-list__button{display:block;margin:0 auto}.mdx-event-banner__thumbnail{aspect-ratio:5/1;border:1px solid rgba(var(--lsd-border-primary),.2);margin-bottom:32px}.mdx-event-info__container{align-self:stretch;border-top:1px solid rgba(var(--lsd-border-primary));display:flex;flex:1 0 0;flex-direction:column;gap:16px;height:100%;padding:16px 24px 0 0}.mdx-event-about__container{display:grid;gap:16px;grid-template-columns:repeat(12,1fr)}.mdx-event-about__container>p{grid-column:1/6;margin-top:0!important}.mdx-event-about__container span{grid-column:7/13}.mdx-event-profile,.mdx-news-card{display:flex;flex-direction:column;gap:16px}.mdx-event-profile__image{aspect-ratio:1/1}.mdx-event-profile__social{align-items:center;display:flex;gap:8px}.mdx-event-cta__container h2{margin-bottom:32px;margin-top:0!important}.mdx-event-cta__button{height:70px!important;width:100%!important}.mdx-event-cta__button>span{align-items:center;display:flex;height:100%;justify-content:space-between}.mdx-input-cta-section__container{border-top:1px solid rgb(var(--lsd-border-primary));padding-top:24px;position:relative}.mdx-input-cta-section__container h2{margin-bottom:16px;margin-top:0!important}.mdx-input-cta-section__title{margin-bottom:24px!important}.mdx-input-cta-section__cta{height:40px!important;width:160px!important}.input-cta-section__description{margin-bottom:32px!important;white-space:pre-wrap}.mdx-input-cta-section__form{display:flex;gap:16px}.mdx-input-cta-section__input-fields,.mdx-numbers-view{display:flex;gap:16px;width:100%}.mdx-input-cta-section__input-fields>div,.mdx-numbers-view-title,.mdx-table-view-description,.mdx-table-view-title{width:100%}.mdx-input-cta-section__message{bottom:-32px;display:block;position:absolute}form .mdx-input-cta-section__cta{width:146px!important}.mdx-event-header__container{display:flex;flex-direction:column;gap:24px}.event-details .mdx-event-header__container h1{margin-bottom:0!important}.mdx-news-card:hover .mdx-news-card__external-link-icon{display:flex!important}.mdx-news-card__thumbnail{border:1px solid rgba(var(--lsd-border-primary),.2);display:flex!important;height:144px;width:100%}.mdx-news-card__info{display:flex;gap:8px;width:100%}.mdx-news-card__info *{white-space:pre-wrap}.mdx-news-card__tags{display:flex;gap:8px;margin-top:4px}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>.mdx-video-section__item-description,.mdx-video-section__description{margin-top:1rem}.mdx-news-card-thumbnail__container{height:144px;position:relative;width:100%}.mdx-news-card__external-link-icon{align-items:center;border:1px solid #fff;bottom:8px;display:none;height:28px;justify-content:center;position:absolute;right:8px;width:28px;z-index:9999}.mdx-spec-card,.mdx-table-view-row,.mdx-video-section--list .mdx-video-section__list>:not(:first-child){border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-news-card__external-link-icon svg>path{fill:#fff}.mdx-news-card__external-link-icon>div{margin:unset}.mdx-video-section .mdx-video-section__video-container{grid-column:8/17;height:0;overflow:hidden;padding-top:56.25%;position:relative;width:100%}.mdx-video-section iframe{left:0;position:absolute;top:0}.mdx-video-section .mdx-video-section--align-center{align-items:center;display:flex;flex-direction:column;margin:auto;max-width:936px}.mdx-video-section .mdx-video-section--align-center .mdx-video-section__description{margin-top:1.5rem}.mdx-video-section .mdx-video-section--align-left *{text-align:left}.mdx-video-section .mdx-video-section--align-right *{text-align:right}.mdx-video-section__header{align-items:center;display:flex;gap:16px}.mdx-video-section__header button{padding:6px 12px!important}.mdx-video-section__header svg{height:26px!important;width:26px!important}.mdx-video-section__header svg path{fill:rgb(var(--lsd-text-secondary))}.mdx-video-section--title-only .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);font-weight:300;line-height:var(--lsd-h5-lineHeight);max-width:886px}.mdx-video-section--title-button .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-display4-fontSize);font-weight:var(--lsd-display4-fontWeight);font-weight:300;line-height:var(--lsd-display4-lineHeight);max-width:886px}.mdx-video-section--full-width .mdx-video-section__container{display:grid;gap:0 1rem;grid-template-columns:repeat(2,1fr)}.mdx-video-section--full-width .mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h3-fontSize);font-weight:var(--lsd-h3-fontWeight);line-height:var(--lsd-h3-lineHeight)}.mdx-video-section--full-width .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-video-section--simple .mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-video-section--simple .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-video-section--list{display:grid;gap:0 1rem;grid-template-columns:repeat(16,1fr)}.mdx-video-section--list .mdx-video-section__container{grid-column:1/7}.mdx-video-section--list .mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h2-fontSize);font-weight:var(--lsd-h2-fontWeight);line-height:var(--lsd-h2-lineHeight);margin-top:1.5rem}.mdx-video-section--list .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-video-section--list .mdx-video-section__list{display:flex;flex-direction:column;gap:1.5rem 0;grid-column:2/3}.mdx-video-section--list .mdx-video-section__list>a{display:block;-webkit-text-decoration:none;text-decoration:none}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>a>.mdx-video-section__item-title{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:1rem;color:rgb(var(--lsd-text-primary));display:flex;gap:12px;margin-top:1.5rem;padding:3px 11px;width:fit-content}.mdx-spec-card .mdx-spec-card__link,.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>a{-webkit-text-decoration:none;text-decoration:none}.footerLink_sh7M,.linkContent__x3v:hover,.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>a:hover{-webkit-text-decoration:underline;text-decoration:underline}.mdx-table-view-table{padding:20px;width:100%}.mdx-table-view-row{display:flex;gap:20px;padding:24px 0}.mdx-numbers-view-header{display:flex;flex-direction:column;gap:32px;width:100%}.mdx-numbers-view-content{display:flex;flex-direction:column;gap:16px;width:100%}.mdx-numbers-view-row{display:flex;gap:32px}.mdx-numbers-view-number{align-items:center;border:1px solid rgb(var(--lsd-border-primary));border-radius:50%;display:flex;font-size:14px;height:32px;justify-content:center;padding:4px 12px;width:32px}.mdx-numbers-view-description{margin-top:16px;width:100%}.nav_cMpg,.root_QACb{margin:0 auto;max-width:var(--container-max-width)}.mdx-spec-card{padding-block:16px}.mdx-spec-card .mdx-spec-card__container{display:flex;flex-direction:column;gap:16px}.mdx-spec-card .mdx-spec-card__button{height:28px;margin:0;padding-left:12px;width:fit-content}.mdx-spec-card .mdx-spec-card__button-icon{padding:7px 10px}.backdrop_Ifvc{background:rgb(var(--lsd-surface-primary));z-index:201}.backdrop_Ifvc,.navWrapper_ybYI{height:100%;left:0;opacity:0;position:fixed;top:0;visibility:hidden;width:100%}.navWrapper_ybYI{background:#0000;pointer-events:none;z-index:203}.l-modal__content,.nav_cMpg{background:rgb(var(--lsd-surface-primary))}.navWrapper_ybYI>*{pointer-events:auto}.nav_cMpg{align-items:center;display:flex;flex-direction:row;height:var(--ifm-navbar-height);justify-content:space-between;padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.visible_ynAX{opacity:1!important;visibility:visible!important}.wrapper_SWrM{position:relative}.wrapper_SWrM:not(.active_qZD5) .fullscreenButton_Bocn{background:rgb(var(--lsd-surface-primary));bottom:8px;position:absolute;right:8px;transition:.3s}.root_QACb{padding:0;width:100%}.firstRow_ar1q{border-top:1px solid rgb(var(--lsd-text-primary));margin-bottom:96px!important}.firstRow_ar1q,.secondRow__ww3{display:flex;flex-direction:row}.secondRow__ww3{border-top:1px solid rgb(var(--lsd-border-primary));padding-bottom:16px!important}.backToTop_wDfN{bottom:16px;position:absolute;width:fit-content}.l-modal,.l-modal__backdrop{position:fixed;top:0;left:0}.footerLink_sh7M{height:fit-content;width:fit-content}.toggle_K23S{border:1px solid rgb(var(--lsd-border-primary));height:32px;width:32px}.toggle_K23S svg{height:14px;width:14px}.toggleButton_dl49{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.dropdownNavbarItem_o23I,.l-modal__content{border:1px solid rgb(var(--lsd-border-primary))}.toggleButton_dl49:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_AAS_{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}.l-modal{height:100vh;opacity:0;transition:.3s;visibility:hidden;width:100%;z-index:9999}.l-modal__container{display:grid;gap:1rem;grid-template-columns:repeat(24,1fr);margin:0 auto;max-width:1376px;overflow:auto}.l-modal--open{opacity:1;visibility:visible}.l-modal__content{grid-column:8/19;height:fit-content;margin:64px 0;max-height:80vh;padding:7px;z-index:9998}.groups_p1lF,.root_ONDG{max-height:60vh;overflow-y:auto}.l-modal__backdrop{background-color:rgba(var(--lsd-surface-primary),.6);height:100%;width:100%;z-index:9997}.modal_kLVz .header_QwCa{align-items:center;display:flex;flex-direction:row;gap:.5rem}.root_EFVO{padding:32px}.root_ONDG{padding:24px}.title_uwS_{font-size:.75rem!important}.item_RHYF{align-items:center;display:flex;flex-direction:row;margin-top:1rem}.item_RHYF .itemTitle_jtAv{flex-grow:1;overflow:hidden;padding-left:1rem;text-overflow:ellipsis;white-space:nowrap}.linkContent__x3v,.root_JWD1{align-items:center;display:flex}.item_RHYF .itemTitle_jtAv mark,.root_JWD1 mark{background:none;color:inherit}.root_xZfc{padding:8px 8px 0;position:relative;width:100%}.textField_af43 button svg{height:auto;max-height:100%!important;width:14px}.root_N57j>div:first-child{color:#828285;padding:0 24px}.root_N57j>div:first-child,.root_N57j>div:first-child *{font-size:.75rem}.root_N57j ul li{margin-top:1rem}.root_JWD1{padding:0 24px}.root_JWD1>div{margin-left:1rem}.root_Ooa0.level1_fpUf{display:block;padding-left:32px}.icon_sZn2{height:auto;width:16px}.icon_sZn2.fill_fkan,.icon_sZn2.fill_fkan *{fill:currentColor}.icon_sZn2.stroke_j3wH,.icon_sZn2.stroke_j3wH *{stroke:currentColor}[data-theme=light] .icon_sZn2{color:#000}[data-theme=dark] .icon_sZn2{color:#fff}.groups_p1lF{display:flex;flex-direction:column;gap:16px}[data-theme=dark] .divider_eGUz>div{opacity:.1}[data-theme=dark] .topBar_Dtew button{background-color:var(--ifm-button-color)}.linkContent__x3v{gap:6px;-webkit-text-decoration:none;text-decoration:none}.linkContent__x3v:hover{text-decoration-color:rgba(var(--lsd-text-primary),.6);text-underline-offset:.3rem}.externalLinkIcon_Qfue{width:8px}.dropdownNavbarItem_o23I{height:28px;padding:6px 12px}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.admonition_ntHH{border:1px solid var(--ifm-alert-border-color);display:flex;gap:18px;margin-bottom:24px;padding:18px}.admonitionHeading_JPfy{font-size:1.25rem!important;font-weight:400;line-height:1.5rem!important;margin-bottom:.3rem;text-transform:capitalize}.admonitionHeading_JPfy code{text-transform:none}.admonitionIcon_BGV6{display:inline-block}.admonitionIcon_BGV6 svg{display:inline-block;height:16px;width:16px}.admonitionIcon_BGV6 svg *{fill:var(--ifm-alert-border-color);stroke:none!important}.admonitionContent_iozl{display:block;margin-top:12px}.navbarHideable_OoEf{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_zoxl{transform:translate3d(0,calc(-100% - 2px),0)}.rightSection_CLeF{align-items:center;display:flex;justify-content:flex-end;white-space:nowrap}.iconButtonGroup_ktNv button:not(:last-child){border-right:1px solid!important;margin-right:-1px!important}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{min-height:100%}#__docusaurus,.root_jG9K{display:flex;flex-direction:column}.root_jG9K{align-items:center;padding:1rem!important;width:100%}.root_jG9K>div{max-width:796px!important;width:100%}.root_jG9K>div>div{align-items:flex-start;display:flex;flex-direction:column;gap:1rem;padding:0!important}.root_UH70,.tagWithCount_gIvh{align-items:center;display:flex}.root_jG9K a{margin-top:2.5rem}.tag_dtsN{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_dtsN:hover{--docusaurus-tag-list-border:var(--ifm-link-color);-webkit-text-decoration:none;text-decoration:none}.tagRegular_SGIC{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_gIvh{border-left:0;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_gIvh:after,.tagWithCount_gIvh:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_gIvh:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_gIvh:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_gIvh span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.root_UH70{flex-direction:row}.tags_LT8x{display:inline;margin:0 0 0 1rem!important;padding:0!important}.tag_NdBD:not(:first-child){margin-left:.5rem}.tag_NdBD a{margin:0!important;padding:0!important}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.tocCollapsibleButton_dxRj{align-items:center;border:1px solid rgb(var(--lsd-border-primary));display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButtonExpanded_TSyC:after,.tocCollapsibleExpanded_zTjk{transform:none}.tocCollapsible_ROek{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_Qsjj>ul{border-left:none;border:1px solid rgb(var(--lsd-border-primary))!important;border-top:none!important;font-size:15px;padding:.2rem 0}.tocCollapsibleContent_Qsjj ul li{margin:.4rem .8rem}.tocCollapsibleContent_Qsjj a{display:block;-webkit-text-decoration:var(--ifm-link-text-decoration);text-decoration:var(--ifm-link-text-decoration)}.badge_AsjZ{background:#0000}.docItemGrid_SzoZ{display:grid;gap:16px;grid-template-columns:repeat(14,1fr)}.gap1_XuuQ{grid-column:span 1}.tocMobile_imaF{margin-bottom:2rem;margin-top:-.5rem}.tocMobile_imaF>div{display:block!important;margin:0}.docItemContainer_hrrU h1{margin-bottom:40px!important}.docItemContainer_hrrU h2,.docItemContainer_hrrU h3{margin-top:32px!important}@media (min-width:0px){.mdx-box{--mdx-box-top:var(--mdx-box-top-xs);--mdx-box-bottom:var(--mdx-box-bottom-xs)}}@media (min-width:576px){.mdx-box{--mdx-box-top:var(--mdx-box-top-sm);--mdx-box-bottom:var(--mdx-box-bottom-sm)}}@media (min-width:768px){.blog-archive-page .main-wrapper main>section .container>.row{display:grid;gap:64px 24px;grid-template-columns:repeat(24,1fr)}.blog-archive-page .main-wrapper main>section .container>.row>.col{grid-column:span 12;margin:0!important;max-width:unset;padding:0 8.3333333333% 0 0}.two-items{width:48%}.case-study-container a{display:inline-block;margin-bottom:20px;margin-right:2%;width:48%}.case-study-container a:nth-child(2n){margin-right:0}.mdx-box{--mdx-box-top:var(--mdx-box-top-md);--mdx-box-bottom:var(--mdx-box-bottom-md)}.mdx-scroll-buttons__button--with-label{gap:12px;min-width:83px;padding:5px 11px 5px 9px!important;width:auto!important}.mdx-scroll-buttons__button--with-label:first-of-type,.mdx-scroll-buttons__button--with-label:last-of-type{justify-content:flex-start}.mdx-scroll-buttons--spaced>div{gap:0 1rem;justify-content:space-between!important}.mdx-scroll-buttons--spaced>div>button:not(:last-child){border-right:1px solid rgb(var(--lsd-border-primary))!important}}@media (min-width:997px){.full-width>div .main-wrapper main>div>div{grid-template-columns:unset!important}.main-wrapper .container{padding-bottom:124px!important}.main-wrapper>div>div{display:grid;gap:1rem;grid-template-columns:repeat(16,45px);margin:auto;width:fit-content}.main-wrapper>div>div aside{border:none;grid-column:1/5;width:auto}.main-wrapper>div>div main{grid-column:6/16;margin-top:48px;max-width:none}.navbar__left{flex-basis:8.3333333333%;flex:0 1 auto}.navbar__left-items{flex:1 0;margin:auto}nav.menu{margin-top:48px;padding-top:16px}.container{padding-inline:0!important}aside a[tabindex="-1"] img{margin-left:14px}.theme-doc-sidebar-menu .menu__link{padding-left:8px}.navbar .lsd-icon-button--medium{height:28px!important;width:28px!important}.blog-wrapper>.container>.row{display:grid;gap:16px;grid-template-columns:repeat(24,1fr)}.blog-wrapper>.container>.row>aside{grid-column:1/5}.blog-wrapper>.container>.row>main{grid-column:6/20}.blog-wrapper:not(.blog-wrapper--index)>.container>.row>div:last-child{grid-column:21/25;max-width:unset}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_NjKY{flex-grow:1;padding-top:16px}@supports (scrollbar-gutter:stable){.menu_NjKY{scrollbar-gutter:stable}}.menuWithAnnouncementBar_U5pk{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_UEyd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height)}.sidebarWithHideableNavbar__00c{padding-top:0!important}.sidebarHidden_F1ZE{opacity:0;visibility:hidden}.sidebarLogo_Ydl9{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);-webkit-text-decoration:none!important;text-decoration:none!important}.sidebarLogo_Ydl9 img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;background-color:var(--docusaurus-collapse-button-bg);display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.expandButtonIcon_i1dp{transform:rotate(0)}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.mdx-box{--mdx-box-top:var(--mdx-box-top-lg);--mdx-box-bottom:var(--mdx-box-bottom-lg)}.mdx-cta-section__header__mobile-button{display:none}.mdx-feature-list--bottom-aligned .mdx-feature-list__feature{min-height:332px}.mdx-feature-list--bottom-aligned .mdx-feature-list__feature-description{display:flex;flex:1 0;flex-direction:column;justify-content:flex-end}.mdx-feature-list--top-aligned .mdx-feature-list__feature-description{margin-top:40px}.mdx-feature-list__feature{padding:1rem;position:relative}.mdx-feature-list__feature-inner{height:100%}.mdx-feature-list__feature-border{background:rgb(var(--lsd-border-primary));height:calc(100% - 2rem);position:absolute;right:0;top:1rem;width:1px}.mdx-feature-list__feature:nth-child(odd){padding-left:0}.mdx-feature-list__feature:nth-child(2n){padding-right:0}.mdx-feature-list__feature:nth-child(2n) .mdx-feature-list__feature-border,.mdx-video-section__header__mobile-button,.tocMobile_ITEo{display:none}.wrapper_SWrM:not(.active_qZD5) .fullscreenButton_Bocn{background:rgb(var(--lsd-surface-primary));bottom:8px;display:flex;opacity:0;position:absolute;right:8px;transition:.3s;visibility:hidden}.wrapper_SWrM:not(.active_qZD5):hover .fullscreenButton_Bocn{opacity:1;visibility:visible}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.docItemGrid_SzoZ{display:grid;gap:var(--doc-grid-gap);grid-template-columns:repeat(11,1fr)}.docItemCol_F52z{grid-column:span 11}}@media (min-width:997px)and (max-width:1199px){.main-wrapper .container>div>div,.navbar{padding-inline:0!important}.main-wrapper,.navbar{width:960px!important}.events .main-wrapper>div aside{grid-column:1/1}.events .main-wrapper>div main,.navbar__inner{grid-column:1/17}.plugin-id-root-pages main{grid-column:4/14!important}.main-wrapper .container{padding-bottom:96px}.main-wrapper>div{width:960px}.navbar{display:grid;gap:1rem;grid-template-columns:repeat(16,45px);margin:auto}.navbar__left-items{display:flex;justify-content:center}.main-wrapper{margin:0 auto!important}}@media (min-width:1200px){.main-wrapper>div>div main>.container,.main-wrapper>main>.row>.col,.navbar{padding-inline:0!important}.plugin-id-root-pages main{grid-column:4/16!important}.footer{padding:0!important}.main-wrapper>div>div{display:grid;gap:1rem;grid-template-columns:repeat(16,1fr);margin-inline:unset;width:unset}.main-wrapper>div>div aside{border:none;grid-column:1/4;width:auto}.main-wrapper>div>div main{grid-column:5/17;max-width:none}.theme-doc-toc-desktop{top:calc(var(--ifm-navbar-height))!important}.navbar__inner{display:grid;gap:16px;grid-template-columns:repeat(24,1fr);padding:0}.navbar__left{align-items:center;display:flex;flex-direction:row;grid-column:1/6}.navbar__left-items{grid-column:6/20}.navbar__right-items{flex-direction:row;gap:16px;grid-column:20/25;justify-content:flex-end}.blog-archive-page .main-wrapper main>section .container>.row{display:grid;gap:64px 24px;grid-template-columns:repeat(24,1fr)}.blog-archive-page .main-wrapper main>section .container>.row>.col{grid-column:span 8;margin:0!important;max-width:unset;padding:0 12.5% 0 0}.mdx-box{--mdx-box-top:var(--mdx-box-top-xl);--mdx-box-bottom:var(--mdx-box-bottom-xl)}.docItemGrid_SzoZ{display:grid;gap:var(--doc-grid-gap);grid-template-columns:repeat(12,1fr)}.docItemCol_F52z{grid-column:span 10}.tocMobile_imaF{display:none}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:1199px){.main-wrapper main>.container{padding-bottom:calc(var(--desktop-footer-gap) - var(--ifm-footer-padding-vertical) - var(--doc-grid-gap))!important}.header-github-link:before{margin-right:16px}.toc_pP_5{display:none}}@media (max-width:997px);@media (max-width:996px){.navbar-sidebar__close,.navbar__toggle{border:1px solid rgb(var(--lsd-border-primary))}.blog-wrapper h1[itemprop=headline],.mdx-cta-button .lsd-button--large,.mdx-cta-section__description,.mdx-cta-section__title,.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__link>div{font-family:var(--lsd-typography-generic-font-family)!important}.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0;padding-bottom:0!important;--ifm-footer-padding-horizontal:var(--content-padding)}.desktop,.footer__link-separator,.navbar__item,.navbar__left-items{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block;width:max-content}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid,.root_xZfc{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.mdx-numbers-view,.mdx-section-header,.pills--block,.tabs--block{flex-direction:column}:root{--ifm-background-color:rgb(var(--lsd-surface-primary))}.navbar__color-mode-toggle{display:none!important}.main-wrapper main>.container{padding-bottom:calc(var(--mobile-footer-gap) - var(--ifm-footer-padding-vertical) - var(--doc-grid-gap))!important}.grid{grid-template-columns:repeat(2,1fr)}.footer-grid,.mdx-feature-list__list,.mdx-profile-card{grid-template-columns:1fr}.navbar__toggle{align-items:center;box-sizing:border-box;display:flex;height:32px;justify-content:center;margin:0;width:32px}.navbar__toggle svg{height:14px;width:14px}.main-wrapper>div,.mdx-cta-section--full-width .mdx-cta-section__container,.mdx-cta-section--list,.mdx-video-section--full-width .mdx-video-section__container,.mdx-video-section--list,.tocMobile_imaF{display:block}.theme-admonition{display:block!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu{padding-inline:0}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__list{display:flex;flex-direction:column;gap:8px;padding:var(--content-padding)}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__link{border-left:none;padding-left:0}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .menu__link>div{font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important;-webkit-text-decoration:none;text-decoration:none}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer{margin-top:3rem;padding:0!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer>div{display:flex!important;flex-direction:column!important;gap:32px!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer>button{display:none}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer .container.container-fluid{margin-bottom:16px!important;padding-inline:var(--content-padding)}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer .container.container-fluid>.footer__links{gap:0!important}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer>div[class*=secondRow]{margin:var(--content-padding)}.navbar-sidebar:not(.navbar-sidebar--show-secondary) .footer .footer__links{gap:16px!important}.navbar-sidebar__brand{height:60px;padding-block:0}.navbar-sidebar__brand>button{height:32px;width:32px}.navbar-sidebar__brand>button:first-of-type{margin-left:auto;margin-right:0!important}.navbar-sidebar__brand>button:not(:last-of-type){border-right:none}.navbar-sidebar__close{align-items:center;display:flex;justify-content:center;margin-left:unset}.blog-divider{margin-block:32px!important}.blog-wrapper main{padding-inline:var(--content-padding)}.blog-wrapper article footer{align-items:flex-start;flex-direction:column}.blog-wrapper article footer .read-more-link{margin-top:24px}.blog-wrapper article footer .read-more-link,.blog-wrapper article footer .read-more-link button{flex-basis:100%;width:100%}.blog-wrapper h1[itemprop=headline]{font-size:var(--lsd-h2-fontSize)!important;font-weight:var(--lsd-h2-fontWeight)!important;line-height:var(--lsd-h2-lineHeight)!important}.mdx-cta-button .lsd-button--large{font-size:var(--lsd-label2-fontSize)!important;font-weight:var(--lsd-label2-fontWeight)!important;line-height:var(--lsd-label2-lineHeight)!important;padding:5px 11px}.mdx-cta-section--align-center .lsd-button--large{padding:10px 40px}.mdx-cta-section,.mdx-video-section{padding:16px 0 0}.mdx-cta-section--title-button .mdx-cta-section__description,.mdx-video-section--title-button .mdx-video-section__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight)}.mdx-cta-section--full-width .mdx-cta-section__title,.mdx-cta-section--simple .mdx-cta-section__title,.mdx-video-section--full-width .mdx-video-section__title,.mdx-video-section--simple .mdx-video-section__title{margin-top:1.5rem}.mdx-cta-section--list .mdx-cta-section__list,.mdx-roadmap__timeline{margin-top:4rem}.mdx-cta-section--list .mdx-cta-section__list>*{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>.mdx-cta-section__item-title{font-size:.875rem!important;line-height:1.25rem!important}.mdx-cta-section--list .mdx-cta-section__list .mdx-cta-section__list-item>.mdx-cta-section__item-description{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.colorModeToggle_GSaI,.dropdownNavbarItem_o23I,.l-modal__backdrop,.mdx-cta-section__header__desktop-button,.tableOfContents_bqdL{display:none}.mdx-cta-section__header__mobile-button{margin-top:24px}.mdx-cta-section__title{font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.mdx-cta-section__description{font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important}.mdx-community-feedback .mdx-community-feedback__inner,.mdx-logo-carousel .mdx-logo-carousel__inner{margin-top:64px}.mdx-community-feedback .mdx-community-feedback__description{margin-top:16px}.mdx-community-feedback .mdx-community-feedback__items{gap:0 16px;margin-left:-32px;width:calc(100% + 48px)!important}.mdx-community-feedback .mdx-community-feedback__item{padding-left:16px}.mdx-community-feedback .mdx-community-feedback__item:last-of-type{margin-right:16px}.mdx-feature-list .mdx-feature-list__title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-subtitle2-fontSize);font-weight:var(--lsd-subtitle2-fontWeight);line-height:var(--lsd-subtitle2-lineHeight);padding:1rem 0}.mdx-feature-list--cta-bottom .mdx-feature-list__extra{margin-top:2rem;padding:0}.mdx-feature-list__header h2,.mdx-roadmap .mdx-cta-section__title,.mdx-section-header h2{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.lsd-button span,.mdx-hero-description{line-height:var(--lsd-body2-lineHeight)!important}.mdx-feature-list__feature{border:none;border-top:1px solid rgb(var(--lsd-border-primary));padding:1.5rem 0}.mdx-feature-list__feature .mdx-feature-list__feature-index--circle{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-subtitle2-fontSize);font-weight:var(--lsd-subtitle2-fontWeight);height:1.625rem;line-height:var(--lsd-subtitle2-lineHeight);width:1.625rem}.mdx-feature-list__feature .mdx-feature-list__feature-title{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight);margin-top:1rem}.mdx-feature-list__feature .mdx-feature-list__feature-description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-body1-fontSize);font-weight:var(--lsd-body1-fontWeight);line-height:var(--lsd-body1-lineHeight);margin-top:3rem}.mdx-hero-description,.mdx-roadmap .mdx-cta-section__description{margin-top:16px;font-family:var(--lsd-typography-generic-font-family)!important}.mdx-feature-list__feature:nth-child(odd) .mdx-feature-list__feature-inner{border:none}.lsd-button,.mdx-hero-action button{padding:6px 12px!important}.mdx-hero-actions{align-items:center;display:flex;flex-direction:row;justify-content:stretch;width:100%;z-index:0}.mdx-hero-actions>*{flex-basis:50%}.mdx-hero-actions>a,.mdx-hero-actions>a>button{display:block;width:100%}.mdx-hero-description{font-size:var(--lsd-body2-fontSize)!important;font-weight:var(--lsd-body2-fontWeight)!important}.mdx-hero-info{padding:28px 0}.mdx-hero-title,.mdx-numbers-view-section-title{font-size:28px!important}.mdx-hero-video>*{height:var(--hero-video-height-mobile);min-height:var(--hero-video-min-height-mobile);transform:translateY(var(--hero-video-offset-y-mobile))}.mdx-hero-video img,.mdx-hero-video video{max-width:calc((100vw - 32px)*var(--hero-video-scale-mobile))}.mdx-timeline-item{width:204px}.mdx-roadmap .mdx-cta-section__description{font-size:var(--lsd-body1-fontSize)!important;font-weight:var(--lsd-body1-fontWeight)!important;line-height:var(--lsd-body1-lineHeight)!important}.scrollToBottom_NE5w{--offset-y:-1rem}.mdx-section-header__title{font-size:var(--lsd-subtitle2-fontSize)!important;font-weight:var(--lsd-subtitle2-fontWeight)!important;line-height:var(--lsd-subtitle2-lineHeight)!important;display:flex;flex-wrap:wrap}.mdx-section-header__description,.mdx-section-header__title{font-family:var(--lsd-typography-generic-font-family)!important}.mdx-section-header__description{font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.mdx-showcase{gap:1.5rem 1rem;grid-template-columns:repeat(2,1fr)}.mdx-showcase-card__name{font-size:1.375rem!important;line-height:1.75rem!important}.mdx-showcase-card__description{margin-top:1rem}.mdx-showcase-card__logo{height:auto;width:34px}.mdx-news-card-thumbnail__container,.mdx-news-card__thumbnail{height:128px}.mdx-video-section--list .mdx-cta-button{margin-bottom:40px;margin-top:24px}.mdx-video-section--list .mdx-video-section__list{margin-top:4rem}.mdx-video-section--list .mdx-video-section__list>*{border-top:1px solid rgb(var(--lsd-border-primary))}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>.mdx-video-section__item-title{font-size:.875rem!important;line-height:1.25rem!important}.mdx-video-section--list .mdx-video-section__list .mdx-video-section__list-item>.mdx-video-section__item-description{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h4-fontSize)!important;font-weight:var(--lsd-h4-fontWeight)!important;line-height:var(--lsd-h4-lineHeight)!important}.mdx-video-section__header__mobile-button{margin-top:24px}.mdx-video-section__title{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h3-fontSize)!important;font-weight:var(--lsd-h3-fontWeight)!important;line-height:var(--lsd-h3-lineHeight)!important}.mdx-table-view-table-title{font-size:28px!important;margin-bottom:24px}.mdx-table-view-row{flex-direction:column;gap:32px}.mdx-numbers-view{gap:32px}.mdx-numbers-view-row{gap:16px}.mdx-numbers-view-number{height:32px;padding:4px 12px;width:32px}.mdx-numbers-view-header{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:16px}.lsd-button span{font-size:var(--lsd-body3-fontSize)!important}.mdx-numbers-view-title{font-size:20px!important}.wrapper_SWrM>div{overflow:visible!important}.nav_cMpg{height:56px}.backToTop_wDfN{bottom:16px;left:16px;margin-top:76px!important;position:relative}.l-modal{overflow:hidden;width:100vw}.l-modal__container{display:grid;grid-template-columns:1fr;height:100vh;max-width:unset;min-height:-webkit-fill-available;width:100%}.root_ONDG,.root_ltHz{height:100%;overflow:auto}.l-modal__content{border:none;grid-column:1/2;grid-row:1/2;height:100%;margin:0;max-height:100vh;overflow:hidden}.modal_kLVz .header_QwCa{padding:12px 16px}.modal_kLVz .closeButton_Rr0e{display:block;height:2rem;width:2rem}.root_EFVO{padding:40px 24px}.root_ONDG{max-height:100%;padding:24px 24px 64px}.groups_p1lF{max-height:unset;overflow:auto}.root_ltHz{padding:24px 0 64px}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}.docItemGrid_SzoZ{display:grid;grid-template-columns:repeat(2,1fr);padding-left:0}.docItemCol_F52z{grid-column:span 2}}@media (max-width:767px){.blog-archive-page .main-wrapper main>section .container>.row{margin-top:0}.blog-archive-page .main-wrapper main>section .container>.row .col{margin-top:40px!important}.mdx-scroll-buttons>div{justify-content:flex-end}.mdx-scroll-buttons>div>button:not(:last-child){border-right:none!important}.mdx-scroll-buttons .mdx-scroll-buttons__label{display:none}.mdx-scroll-buttons--spaced>div{justify-content:space-between!important}.mdx-scroll-buttons--spaced>div>button:not(:last-child){border-right:1px solid rgb(var(--lsd-border-primary))!important}.mdx-hero{justify-content:unset}.mdx-hero h1{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h2-fontSize)!important;font-weight:var(--lsd-h2-fontWeight)!important;line-height:var(--lsd-h2-lineHeight)!important}.mdx-ns__description{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h4-fontSize);font-weight:var(--lsd-h4-fontWeight);line-height:var(--lsd-h4-lineHeight)}.mdx-ns__inner form{margin-top:40px}.mdx-ns__inner .mdx-ns__inputs{flex-direction:column;gap:24px}.mdx-ns__inner .mdx-ns__inputs>*{width:100%}.mdx-ns__inner .mdx-ns__submit-button{margin-top:24px}.mdx-profile-card{display:flex;scroll-snap-align:start!important;width:var(--mobile-width)}.mdx-profile-card__profile{display:flex;flex-direction:column;gap:16px}.mdx-profile-card__name{font-family:var(--lsd-typography-generic-font-family)!important;font-size:var(--lsd-h5-fontSize)!important;font-weight:var(--lsd-h5-fontWeight)!important;line-height:var(--lsd-h5-lineHeight)!important}.mdx-event-card__thumbnail{height:unset}.mdx-news-card-thumbnail__container,.mdx-news-card__thumbnail{height:100%}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (max-width:575px){:root{--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-button-size-multiplier:1.25;--ifm-button-padding-horizontal:calc(var(--ifm-button-size-multiplier)*var(--ifm-spacing-horizontal));--ifm-button-padding-vertical:calc(var(--ifm-button-size-multiplier)*var(--ifm-spacing-vertical));--ifm-alert-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-alert-padding-vertical:calc(var(--ifm-spacing-vertical)*2)}.markdown>h2{--ifm-h2-font-size:1.75rem}.markdown h4{--ifm-h4-font-size:1.25rem!important}.footer>div{display:flex!important;flex-direction:column;gap:40px!important;margin-inline:16px;padding-inline:0!important;width:auto}.footer__links{display:flex!important;flex-direction:column!important}.footer__links>div:first-of-type,.footer__links>div:nth-of-type(3){margin-bottom:4px!important}.footer__links>div:nth-of-type(2){margin-bottom:34px!important}.col.footer__col{margin-bottom:0!important}.navbar__left{display:flex}.bottom-cta-sections .mdx-grid__content{gap:98px!important}.bottom-cta-sections .mdx-grid__content:last-of-type>div:last-of-type>.mdx-input-cta-section__container{margin-bottom:120px}.events .main-wrapper main>.container{padding-bottom:0!important}.mdx-event-card-list__container,.mdx-news-card-list__container{margin-bottom:48px;margin-top:32px}.mdx-event-card-list__tabs .lsd-tab-item,.mdx-news-card-list__tabs .lsd-tab-item{padding:6px 14px!important}.mdx-event-about__container,.mdx-input-cta-section__input-fields{display:flex;flex-direction:column;gap:32px}.mdx-event-about__container span,.mdx-event-header__container p{font-size:14px!important;line-height:20px!important}.mdx-event-profile-list__container .mdx-grid>.mdx-grid__content{gap:24px!important}.mdx-input-cta-section__input-fields>div{width:100%!important}.mdx-input-cta-section__container{position:relative}.mdx-input-cta-section__container .mdx-input-cta-section__form{flex-direction:column;gap:40px;margin-bottom:-24px}.mdx-input-cta-section__container .input-cta-section__description--no-form{margin-bottom:32px!important}.input-cta-section__description{margin-bottom:24px!important}.event-details .mdx-event-header__container h1{font-size:24px!important;line-height:32px!important;margin-bottom:0!important}.mdx-news-card h3{font-family:var(--lsd-typography-generic-font-family);font-size:var(--lsd-h5-fontSize);font-weight:var(--lsd-h5-fontWeight);line-height:var(--lsd-h5-lineHeight)}.mdx-news-card__thumbnail{max-height:198px}.footer{--ifm-footer-padding-horizontal:0}.firstRow_ar1q{margin-bottom:64px!important;padding-inline:var(--content-padding)!important}.secondRow__ww3{margin-inline:var(--content-padding)!important}}@media (max-width:574px){.mdx-ghc__issue-content-grid{grid-template-columns:82px 1fr}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/architecture-c96184127d80feae83e3f85471c5112a.png b/assets/images/architecture-c96184127d80feae83e3f85471c5112a.png deleted file mode 100644 index 0730811..0000000 Binary files a/assets/images/architecture-c96184127d80feae83e3f85471c5112a.png and /dev/null differ diff --git a/assets/js/0444839e.b15fb3fb.js b/assets/js/0444839e.b15fb3fb.js deleted file mode 100644 index 95e0dc0..0000000 --- a/assets/js/0444839e.b15fb3fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[9990],{28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>c});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}},98286:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"guides/js-waku/manage-filter","title":"Manage Your Filter Subscriptions","description":"This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.","source":"@site/docs/guides/js-waku/manage-filter.md","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/manage-filter","permalink":"/guides/js-waku/manage-filter","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/manage-filter.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Manage Your Filter Subscriptions","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Debug Your Waku DApp and WebSocket","permalink":"/guides/js-waku/debug-waku-dapp"},"next":{"title":"Frequently Asked Questions","permalink":"/guides/js-waku/faq"}}');var s=i(74848),r=i(28453);function o(e){const n={mermaid:"mermaid",...(0,r.R)(),...e.components};return(0,s.jsx)(n.mermaid,{value:"graph TD\n A[Start Monitoring Filter Subscriptions] --\x3e B{Check Peer Connection}\n B -- Connected --\x3e C[Send Ping]\n C --\x3e D{Ping Success?}\n D -- Yes --\x3e B\n D -- No --\x3e E[Handle Error/Reinitiate Subscription]\n B -- Disconnected --\x3e F[Check Intentional Disconnection/Unsubscription]\n F -- Yes --\x3e G[Stop Monitoring]\n F -- No --\x3e B\n E --\x3e B"})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}const a={title:"Manage Your Filter Subscriptions",hide_table_of_contents:!0},d=void 0,u={},l=[{value:"Overview",id:"overview",level:2},{value:"Pinging filter subscriptions",id:"pinging-filter-subscriptions",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["This guide provides detailed steps to manage ",(0,s.jsx)(n.a,{href:"/learn/concepts/protocols#filter",children:"Filter"})," subscriptions and handle node disconnections in your application. Have a look at the ",(0,s.jsx)(n.a,{href:"/guides/js-waku/light-send-receive",children:"Send and Receive Messages Using Light Push and Filter"})," guide for using the ",(0,s.jsx)(n.code,{children:"Light Push"})," and ",(0,s.jsx)(n.code,{children:"Filter"})," protocols."]}),"\n",(0,s.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(n.p,{children:["Occasionally, your ",(0,s.jsx)(n.code,{children:"Filter"})," subscriptions might disconnect from the Waku Network, resulting in messages not being received by your application. To manage your subscriptions, periodically ping peers to check for an active connection. The error message ",(0,s.jsx)(n.code,{children:'"peer has no subscriptions"'})," indicates a failed ping due to disconnection. You can stop the pings if the disconnection/unsubscription is deliberate."]}),"\n","\n",(0,s.jsx)(c,{}),"\n",(0,s.jsx)(n.h2,{id:"pinging-filter-subscriptions",children:"Pinging filter subscriptions"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"@waku/sdk"})," package provides a ",(0,s.jsx)(n.code,{children:"Filter.ping()"})," function to ping subscriptions and check for an active connection. To begin, create a ",(0,s.jsx)(n.code,{children:"Filter"})," subscription:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"// Create a Filter subscription\nconst { error, subscription } = await node.filter.createSubscription({ contentTopics: [contentTopic] });\n\nif (error) {\n // handle errors if happens\n throw Error(error);\n}\n\n// Subscribe to content topics and process new messages\nawait subscription.subscribe([decoder], callback);\n"})}),"\n",(0,s.jsx)(n.p,{children:"Next, create a function to ping and reinitiate the subscription:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'const pingAndReinitiateSubscription = async () => {\n\ttry {\n\t\t// Ping the subscription\n\t\tawait subscription.ping();\n\t} catch (error) {\n\t\tif (\n\t\t\t// Check if the error message includes "peer has no subscriptions"\n\t\t\terror instanceof Error &&\n\t\t\terror.message.includes("peer has no subscriptions")\n\t\t) {\n\t\t\t// Reinitiate the subscription if the ping fails\n\t\t\tawait subscription.subscribe([decoder], callback);\n\t\t} else {\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n// Periodically ping the subscription\nawait pingAndReinitiateSubscription();\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Pings will fail when there are temporary network degradations or reachability issues. This does not mean that the underlying connection has been closed."})}),"\n",(0,s.jsx)(n.admonition,{title:"Congratulations!",type:"success",children:(0,s.jsxs)(n.p,{children:["You have successfully managed your ",(0,s.jsx)(n.code,{children:"Filter"})," subscriptions to handle node disconnections in your application."]})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/0a561899.34180100.js b/assets/js/0a561899.34180100.js new file mode 100644 index 0000000..3a92a29 --- /dev/null +++ b/assets/js/0a561899.34180100.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[7370],{4865:(e,n,s)=>{s.d(n,{A:()=>y});var t=s(96540),r=s(34164),a=s(23104),i=s(47751),c=s(92303);const o={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var l=s(74848);function d({className:e,block:n,selectedValue:s,selectValue:t,tabValues:i}){const c=[],{blockElementScrollPositionUntilNextRender:d}=(0,a.a_)(),m=e=>{const n=e.currentTarget,r=c.indexOf(n),a=i[r].value;a!==s&&(d(n),t(a))},p=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const s=c.indexOf(e.currentTarget)+1;n=c[s]??c[0];break}case"ArrowLeft":{const s=c.indexOf(e.currentTarget)-1;n=c[s]??c[c.length-1];break}}n?.focus()};return(0,l.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:t})=>(0,l.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{c.push(e)},onKeyDown:p,onClick:m,...t,className:(0,r.A)("tabs__item",o.tabItem,t?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function m({lazy:e,children:n,selectedValue:s}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find(e=>e.props.value===s);return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,l.jsx)("div",{className:"margin-top--md",children:a.map((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function p(e){const n=(0,i.u)(e);return(0,l.jsxs)("div",{className:(0,r.A)("tabs-container",o.tabList),children:[(0,l.jsx)(d,{...n,...e}),(0,l.jsx)(m,{...n,...e})]})}function y(e){const n=(0,c.default)();return(0,l.jsx)(p,{...e,children:(0,i.v)(e.children)},String(n))}},19365:(e,n,s)=>{s.d(n,{A:()=>i});s(96540);var t=s(34164);const r={tabItem:"tabItem_Ymn6"};var a=s(74848);function i({children:e,hidden:n,className:s}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,s),hidden:n,children:e})}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var t=s(96540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}},50044:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>y,frontMatter:()=>o,metadata:()=>t,toc:()=>m});const t=JSON.parse('{"id":"build/javascript/message-encryption","title":"Encrypt, Decrypt, and Sign Your Messages","description":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.","source":"@site/docs/build/javascript/message-encryption.mdx","sourceDirName":"build/javascript","slug":"/build/javascript/message-encryption","permalink":"/build/javascript/message-encryption","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/build/javascript/message-encryption.mdx","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Encrypt, Decrypt, and Sign Your Messages","hide_table_of_contents":true},"sidebar":"build","previous":{"title":"Retrieve Messages Using Store Protocol","permalink":"/build/javascript/store-retrieve-messages"},"next":{"title":"Build React DApps Using @waku/react","permalink":"/build/javascript/use-waku-react"}}');var r=s(74848),a=s(28453),i=s(4865),c=s(19365);const o={title:"Encrypt, Decrypt, and Sign Your Messages",hide_table_of_contents:!0},l=void 0,d={},m=[{value:"Installation",id:"installation",level:2},{value:"Symmetric encryption",id:"symmetric-encryption",level:2},{value:"ECIES encryption",id:"ecies-encryption",level:2},{value:"Signing encrypted messages",id:"signing-encrypted-messages",level:2},{value:"Storing encryption keys",id:"storing-encryption-keys",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["This guide provides detailed steps to use the ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@waku/message-encryption",children:"@waku/message-encryption"})," package to encrypt, decrypt, and sign your messages using ",(0,r.jsx)(n.a,{href:"/learn/glossary#waku-message-payload-encryption",children:"Waku message payload encryption"})," methods."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to freely use custom protocols or ",(0,r.jsx)(n.a,{href:"/learn/glossary#waku-message-payload-encryption",children:"Waku message payload encryption"})," methods."]})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(n.p,{children:["Install the required packages for integrating ",(0,r.jsx)(n.code,{children:"@waku/message-encryption"})," using your preferred package manager:"]}),"\n","\n",(0,r.jsxs)(i.A,{groupId:"package-manager",children:[(0,r.jsx)(c.A,{value:"npm",label:"NPM",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"npm install @waku/message-encryption @waku/utils\n"})})}),(0,r.jsx)(c.A,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"yarn add @waku/message-encryption @waku/utils\n"})})})]}),"\n",(0,r.jsx)(n.h2,{id:"symmetric-encryption",children:"Symmetric encryption"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Symmetric"})," encryption uses a single, shared key for message encryption and decryption. Use the ",(0,r.jsx)(n.code,{children:"generateSymmetricKey()"})," function to generate a random symmetric key:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { generateSymmetricKey } from "@waku/message-encryption";\n\n// Generate a random symmetric key\nconst symmetricKey = generateSymmetricKey();\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To send encrypted messages, create a ",(0,r.jsx)(n.code,{children:"Symmetric"})," message ",(0,r.jsx)(n.code,{children:"encoder"})," and send the message as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Sender client"',children:'import { createEncoder } from "@waku/message-encryption/symmetric";\n\n// Create a symmetric message encoder\nconst encoder = createEncoder({\n contentTopic: contentTopic, // message content topic\n symKey: symmetricKey, // symmetric key for encrypting messages\n});\n\n// Send the message using Light Push\nawait node.lightPush.send(encoder, { payload });\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To decrypt the messages you receive, create a symmetric message ",(0,r.jsx)(n.code,{children:"decoder"})," and process the messages as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Receiver client"',children:'import { createDecoder } from "@waku/message-encryption/symmetric";\n\n// Create a symmetric message decoder\nconst decoder = createDecoder(contentTopic, symmetricKey);\n\n// Receive messages from a Filter subscription\nawait subscription.subscribe([decoder], callback);\n\n// Retrieve messages from Store peers\nawait node.store.queryWithOrderedCallback([decoder], callback);\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["The symmetric key exchange between users can happen through an ",(0,r.jsx)(n.a,{href:"/learn/glossary#out-of-band",children:"out-of-band method"}),". For example, where the key is embedded within the URL shared by a user to access a specific resource."]})}),"\n",(0,r.jsx)(n.h2,{id:"ecies-encryption",children:"ECIES encryption"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"ECIES"})," encryption uses a public key for encryption and a private key for decryption. Use the ",(0,r.jsx)(n.code,{children:"generatePrivateKey()"})," function to generate a random ",(0,r.jsx)(n.code,{children:"ECDSA"})," private key:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { generatePrivateKey, getPublicKey } from "@waku/message-encryption";\n\n// Generate a random ECDSA private key, keep secure\nconst privateKey = generatePrivateKey();\n\n// Generate a public key from the private key, provide to the sender\nconst publicKey = getPublicKey(privateKey);\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To send encrypted messages, create an ",(0,r.jsx)(n.code,{children:"ECIES"})," message ",(0,r.jsx)(n.code,{children:"encoder"})," with the public key and send the message as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Sender client"',children:'import { createEncoder } from "@waku/message-encryption/ecies";\n\n// Create an ECIES message encoder\nconst encoder = createEncoder({\n contentTopic: contentTopic, // message content topic\n publicKey: publicKey, // ECIES public key for encrypting messages\n});\n\n// Send the message using Light Push\nawait node.lightPush.send(encoder, { payload });\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To decrypt the messages you receive, create an ",(0,r.jsx)(n.code,{children:"ECIES"})," message ",(0,r.jsx)(n.code,{children:"decoder"})," with the private key and process the messages as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Receiver client"',children:'import { createDecoder } from "@waku/message-encryption/ecies";\n\n// Create an ECIES message decoder\nconst decoder = createDecoder(contentTopic, privateKey);\n\n// Receive messages from a Filter subscription\nawait subscription.subscribe([decoder], callback);\n\n// Retrieve messages from Store peers\nawait node.store.queryWithOrderedCallback([decoder], callback);\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Users can share their public key through broadcasting or ",(0,r.jsx)(n.a,{href:"/learn/glossary#out-of-band",children:"out-of-band methods"}),", such as embedding it in a URL or sending an unencrypted message on another content topic for others to retrieve."]})}),"\n",(0,r.jsx)(n.h2,{id:"signing-encrypted-messages",children:"Signing encrypted messages"}),"\n",(0,r.jsx)(n.p,{children:"Message signing helps in proving the authenticity of received messages. By attaching a signature to a message, you can verify its origin and integrity with absolute certainty."}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Signing messages is only possible when encrypted, but if your application does not require encryption, you can generate a symmetric key through hardcoded or deterministic methods using information available to all users."})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"sigPrivKey"})," parameter allows the ",(0,r.jsx)(n.code,{children:"Symmetric"})," and ",(0,r.jsx)(n.code,{children:"ECIES"})," message ",(0,r.jsx)(n.code,{children:"encoders"})," to sign the message before encryption using an ",(0,r.jsx)(n.code,{children:"ECDSA"})," private key:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Alice (sender) client"',children:'import { generatePrivateKey, getPublicKey } from "@waku/message-encryption";\nimport { createEncoder as createSymmetricEncoder } from "@waku/message-encryption/symmetric";\nimport { createEncoder as createECIESEncoder } from "@waku/message-encryption/ecies";\n\n// Generate a random ECDSA private key for signing messages\n// ECIES encryption and message signing both use ECDSA keys\n// For this example, we\'ll call the sender of the message Alice\nconst alicePrivateKey = generatePrivateKey();\nconst alicePublicKey = getPublicKey(alicePrivateKey);\n\n// Create a symmetric encoder that signs messages\nconst symmetricEncoder = createSymmetricEncoder({\n contentTopic: contentTopic, // message content topic\n symKey: symmetricKey, // symmetric key for encrypting messages\n sigPrivKey: alicePrivateKey, // private key for signing messages before encryption\n});\n\n// Create an ECIES encoder that signs messages\nconst ECIESEncoder = createECIESEncoder({\n contentTopic: contentTopic, // message content topic\n publicKey: publicKey, // ECIES public key for encrypting messages\n sigPrivKey: alicePrivateKey, // private key for signing messages before encryption\n});\n\n// Send and receive your messages as usual with Light Push and Filter\nawait subscription.subscribe([symmetricEncoder], callback);\nawait node.lightPush.send(symmetricEncoder, { payload });\n\nawait subscription.subscribe([ECIESEncoder], callback);\nawait node.lightPush.send(ECIESEncoder, { payload });\n'})}),"\n",(0,r.jsxs)(n.p,{children:["You can extract the ",(0,r.jsx)(n.code,{children:"signature"})," and its public key (",(0,r.jsx)(n.code,{children:"signaturePublicKey"}),") from the ",(0,r.jsx)(n.a,{href:"https://js.waku.org/classes/_waku_message_encryption.DecodedMessage.html",children:"DecodedMessage"})," and compare it with the expected public key or use the ",(0,r.jsx)(n.code,{children:"verifySignature()"})," function to verify the message origin:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Bob (receiver) client"',children:'import { generatePrivateKey } from "@waku/message-encryption";\nimport { createEncoder } from "@waku/message-encryption/symmetric";\n\n// Generate a random private key for signing messages\n// For this example, we\'ll call the receiver of the message Bob\nconst bobPrivateKey = generatePrivateKey();\n\n// Create an encoder that signs messages\nconst encoder = createEncoder({\n contentTopic: contentTopic,\n symKey: symmetricKey,\n sigPrivKey: bobPrivateKey,\n});\n\n// Modify the callback function to verify message signature\nconst callback = (wakuMessage) => {\n // Extract the message signature and public key of the signature\n // You can compare the signaturePublicKey with Alice public key\n const signature = wakuMessage.signature;\n const signaturePublicKey = wakuMessage.signaturePublicKey;\n\n // Verify the message was actually signed and sent by Alice\n // Alice\'s public key can be gotten from broadcasting or out-of-band methods\n if (wakuMessage.verifySignature(alicePublicKey)) {\n console.log("This message was signed by Alice");\n } else {\n console.log("This message was NOT signed by Alice");\n }\n};\n\nawait subscription.subscribe([encoder], callback);\n'})}),"\n",(0,r.jsx)(n.h2,{id:"storing-encryption-keys",children:"Storing encryption keys"}),"\n",(0,r.jsxs)(n.p,{children:["We used randomly generated keys for encryption and message signing in the provided examples, but real-world applications require consistent keys among client restarts. Have a look at the ",(0,r.jsx)(n.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/eth-pm/src/key_pair_handling",children:"Key Pair Handling"})," example, which demonstrates the secure storage and retrieval of key information from local storage using ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto",children:"Subtle Crypto"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you need a simple way to store your keys in hexadecimal format across your application, you can use the ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@waku/utils",children:"@waku/utils"})," package:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { bytesToHex, hexToBytes } from "@waku/utils/bytes";\n\n// Generate random symmetric and private keys\nconst symmetricKey = generateSymmetricKey();\nconst privateKey = generatePrivateKey();\n\n// Store the keys in hexadecimal format\nconst symmetricKeyHex = bytesToHex(symmetricKey);\nconst privateKeyHex = bytesToHex(privateKey);\n\n// Restore the keys from hexadecimal format\nconst restoredSymmetricKey = hexToBytes(symmetricKeyHex);\nconst restoredPrivateKey = hexToBytes(privateKeyHex);\n'})}),"\n",(0,r.jsx)(n.admonition,{title:"Congratulations!",type:"tip",children:(0,r.jsxs)(n.p,{children:["You have successfully encrypted, decrypted, and signed your messages using ",(0,r.jsx)(n.code,{children:"Symmetric"})," and ",(0,r.jsx)(n.code,{children:"ECIES"})," encryption methods. Have a look at the ",(0,r.jsx)(n.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/eth-pm",children:"eth-pm"})," example for a working demo."]})})]})}function y(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/0ad55de1.4ad786c1.js b/assets/js/0ad55de1.4ad786c1.js new file mode 100644 index 0000000..966923d --- /dev/null +++ b/assets/js/0ad55de1.4ad786c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1218],{20748:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"build/javascript/store-retrieve-messages","title":"Retrieve Messages Using Store Protocol","description":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","source":"@site/docs/build/javascript/store-retrieve-messages.md","sourceDirName":"build/javascript","slug":"/build/javascript/store-retrieve-messages","permalink":"/build/javascript/store-retrieve-messages","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/build/javascript/store-retrieve-messages.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Retrieve Messages Using Store Protocol","hide_table_of_contents":true,"displayed_sidebar":"build"},"sidebar":"build","previous":{"title":"Send and Receive Messages Using Light Push and Filter","permalink":"/build/javascript/light-send-receive"},"next":{"title":"Encrypt, Decrypt, and Sign Your Messages","permalink":"/build/javascript/message-encryption"}}');var n=r(74848),o=r(28453);const i={title:"Retrieve Messages Using Store Protocol",hide_table_of_contents:!0,displayed_sidebar:"build"},a=void 0,c={},d=[{value:"Create a light node",id:"create-a-light-node",level:2},{value:"Connect to store peers",id:"connect-to-store-peers",level:2},{value:"Choose a content topic",id:"choose-a-content-topic",level:2},{value:"Retrieve messages",id:"retrieve-messages",level:2},{value:"queryWithOrderedCallback",id:"querywithorderedcallback",level:3},{value:"queryGenerator",id:"querygenerator",level:3},{value:"Store query options",id:"store-query-options",level:2},{value:"pageDirection",id:"pagedirection",level:3},{value:"cursor",id:"cursor",level:3},{value:"timeFilter",id:"timefilter",level:3}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the ",(0,n.jsx)(s.a,{href:"/learn/concepts/protocols#store",children:"Store protocol"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"create-a-light-node",children:"Create a light node"}),"\n",(0,n.jsxs)(s.p,{children:["Use the ",(0,n.jsx)(s.code,{children:"createLightNode()"})," function to create a Light Node and interact with the Waku Network:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\n\n// Create and start a Light Node\nconst node = await createLightNode({ defaultBootstrap: true });\nawait node.start();\n'})}),"\n",(0,n.jsx)(s.h2,{id:"connect-to-store-peers",children:"Connect to store peers"}),"\n",(0,n.jsxs)(s.p,{children:["Use the ",(0,n.jsx)(s.code,{children:"node.waitForPeers()"})," method to wait for the node to connect with Store peers:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { Protocols } from "@waku/sdk";\n\n// Wait for a successful peer connection\nawait node.waitForPeers([Protocols.Store]);\n'})}),"\n",(0,n.jsx)(s.p,{children:"You can also specify a dedicated Store peer to use for queries when creating the node. This is particularly useful when running your own Store node or when you want to use a specific Store node in the network:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'const node = await createLightNode({ \n defaultBootstrap: true,\n store: {\n peer: "/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm..." // multiaddr or PeerId of your Store node\n }\n});\n'})}),"\n",(0,n.jsx)(s.p,{children:"If the specified Store peer is not available, the node will fall back to using random Store peers in the network."}),"\n",(0,n.jsx)(s.h2,{id:"choose-a-content-topic",children:"Choose a content topic"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/learn/concepts/content-topics",children:"Choose a content topic"})," for filtering the messages to retrieve and create a message ",(0,n.jsx)(s.code,{children:"decoder"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { createDecoder } from "@waku/sdk";\n\n// Choose a content topic\nconst contentTopic = "/store-guide/1/message/proto";\n\n// Create a message decoder\nconst decoder = createDecoder(contentTopic);\n'})}),"\n",(0,n.jsx)(s.h2,{id:"retrieve-messages",children:"Retrieve messages"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"@waku/sdk"})," provides the ",(0,n.jsx)(s.code,{children:"queryWithOrderedCallback()"})," and ",(0,n.jsx)(s.code,{children:"queryGenerator()"})," functions for querying ",(0,n.jsx)(s.code,{children:"Store"})," nodes and retrieving historical or missed messages. The responses from ",(0,n.jsx)(s.code,{children:"Store"})," nodes are paginated and require you to process each page sequentially."]}),"\n",(0,n.jsx)(s.h3,{id:"querywithorderedcallback",children:(0,n.jsx)(s.code,{children:"queryWithOrderedCallback"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"store.queryWithOrderedCallback()"})," function provides a straightforward method for querying ",(0,n.jsx)(s.code,{children:"Store"})," nodes and processing messages in chronological order through a callback function. It accepts these parameters:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"decoders"}),": List of ",(0,n.jsx)(s.code,{children:"decoders"})," that specify the ",(0,n.jsx)(s.code,{children:"content topic"})," to query for and their ",(0,n.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/application/26/payload",children:"message decryption"})," methods."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"callback"}),": The callback function for processing the retrieved messages."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"options"})," (optional): ",(0,n.jsx)(s.a,{href:"/build/javascript/store-retrieve-messages#store-query-options",children:"Query options"})," to filter the retrieved messages."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// Create the callback function\nconst callback = (wakuMessage) => {\n // Render the message/payload in your application\n console.log(wakuMessage);\n};\n\n// Query the Store peer\nawait node.store.queryWithOrderedCallback([decoder], callback);\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"queryWithOrderedCallback()"})," function always returns the most recent messages in a page first."]})}),"\n",(0,n.jsx)(s.h3,{id:"querygenerator",children:(0,n.jsx)(s.code,{children:"queryGenerator"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"store.queryGenerator()"})," function provides more control and flexibility over processing messages retrieved from ",(0,n.jsx)(s.code,{children:"Store"})," nodes through ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator",children:"Async Generators"}),". It accepts these parameters:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"decoders"}),": List of ",(0,n.jsx)(s.code,{children:"decoders"})," that specify the ",(0,n.jsx)(s.code,{children:"content topic"})," to query for and their ",(0,n.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/application/26/payload",children:"message decryption"})," methods."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"options"})," (optional): ",(0,n.jsx)(s.a,{href:"/build/javascript/store-retrieve-messages#store-query-options",children:"Query options"})," to filter the retrieved messages."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// Create the store query\nconst storeQuery = node.store.queryGenerator([decoder]);\n\n// Process the messages\nfor await (const messagesPromises of storeQuery) {\n // Fulfil the messages promises\n const messages = await Promise.all(\n messagesPromises.map(async (p) => {\n const msg = await p;\n // Render the message/payload in your application\n console.log(msg);\n })\n );\n}\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"queryGenerator()"})," function always returns the oldest messages in a page first."]})}),"\n",(0,n.jsx)(s.h2,{id:"store-query-options",children:"Store query options"}),"\n",(0,n.jsx)(s.h3,{id:"pagedirection",children:(0,n.jsx)(s.code,{children:"pageDirection"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"pageDirection"})," option specifies the direction in which pages are retrieved:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"BACKWARD"})," (default): Most recent page first."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"FORWARD"}),": Oldest page first."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { PageDirection } from "@waku/sdk";\n\n// Retrieve recent messages first\nconst queryOptions = {\n pageDirection: PageDirection.BACKWARD,\n};\n\n// Retrieve oldest messages first\nconst queryOptions = {\n pageDirection: PageDirection.FORWARD,\n};\n\n// Query the Store peer with options\nawait node.store.queryWithOrderedCallback([decoder], callback, options);\nconst storeQuery = node.store.queryGenerator([decoder, options]);\n'})}),"\n",(0,n.jsx)(s.h3,{id:"cursor",children:(0,n.jsx)(s.code,{children:"cursor"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"cursor"})," option specifies the starting index for retrieving messages. For example, consider a query that retrieves the first page messages and then continues with the next page:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { waku } from "@waku/sdk";\n\n// Create the callback function\nconst messages = [];\nconst callback = (wakuMessage) => {\n messages.push(wakuMessage);\n // Return "true" to stop retrieving pages\n // Here, it retrieves only the first page\n return true;\n};\n\n// Retrieve the first page of messages\n// This retrieves all the messages if "return true" is not present\nawait node.store.queryWithOrderedCallback([decoder], callback);\n\n// Create the cursor\nconst lastMessage = messages[messages.length - 1];\nconst cursor = await waku.createCursor(lastMessage);\n\n// Retrieve the next page of messages\n// The message at the cursor index is excluded from the result\nawait node.store.queryWithOrderedCallback([decoder], callback, {\n cursor: cursor,\n});\nconsole.log(messages);\n'})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["If you omit the ",(0,n.jsx)(s.code,{children:"cursor"})," option, the query will start from the beginning or end of the history, depending on the ",(0,n.jsx)(s.a,{href:"#pagedirection",children:"page direction"}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"timefilter",children:(0,n.jsx)(s.code,{children:"timeFilter"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"timeFilter"})," option specifies a time frame to retrieve messages from. For example, consider a query that retrieves messages from the previous week:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// Get the time frame\nconst endTime = new Date();\nconst startTime = new Date();\nstartTime.setDate(endTime.getDate() - 7);\n\n// Retrieve a week of messages\nconst queryOptions = {\n timeFilter: {\n startTime,\n endTime,\n },\n};\n\n// Query the Store peer with options\nawait node.store.queryWithOrderedCallback([decoder], callback, options);\nconst storeQuery = node.store.queryGenerator([decoder, options]);\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"timeFilter"})," option significantly reduces message retrieval performance. To optimise it, consider resuming message retrieval using a ",(0,n.jsx)(s.a,{href:"#cursor",children:"cursor"})," that starts from the last seen message."]})}),"\n",(0,n.jsx)(s.admonition,{title:"Congratulations!",type:"tip",children:(0,n.jsxs)(s.p,{children:["You have successfully retrieved and filtered historical messages on a Light Node using the ",(0,n.jsx)(s.code,{children:"Store"})," protocol. Have a look at the ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/store-js",children:"store-js"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/store-reactjs-chat",children:"store-reactjs-chat"})," examples for working demos."]})})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>i,x:()=>a});var t=r(96540);const n={},o=t.createContext(n);function i(e){const s=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f1b9a4a.e4f483b3.js b/assets/js/0f1b9a4a.e4f483b3.js deleted file mode 100644 index ec14edf..0000000 --- a/assets/js/0f1b9a4a.e4f483b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1291],{28453:(e,i,n)=>{n.d(i,{R:()=>r,x:()=>a});var o=n(96540);const s={},t=o.createContext(s);function r(e){const i=o.useContext(t);return o.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(t.Provider,{value:i},e.children)}},45242:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"guides/js-waku/run-waku-nodejs","title":"Run @waku/sdk in a NodeJS Application","description":"While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.","source":"@site/docs/guides/js-waku/run-waku-nodejs.md","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/run-waku-nodejs","permalink":"/guides/js-waku/run-waku-nodejs","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/run-waku-nodejs.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Run @waku/sdk in a NodeJS Application","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Bootstrap Nodes and Discover Peers","permalink":"/guides/js-waku/configure-discovery"},"next":{"title":"Debug Your Waku DApp and WebSocket","permalink":"/guides/js-waku/debug-waku-dapp"}}');var s=n(74848),t=n(28453);const r={title:"Run @waku/sdk in a NodeJS Application",hide_table_of_contents:!0},a=void 0,d={},c=[{value:"Limitations",id:"limitations",level:2},{value:"API compatibility",id:"api-compatibility",level:3},{value:"Protocol implementation",id:"protocol-implementation",level:3},{value:"Codebase complexity",id:"codebase-complexity",level:3},{value:"Browser-specific protocols",id:"browser-specific-protocols",level:3},{value:"Recommendations",id:"recommendations",level:2},{value:"Future developments",id:"future-developments",level:2}];function l(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(i.p,{children:["While the ",(0,s.jsx)(i.code,{children:"@waku/sdk"})," package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using ",(0,s.jsx)(i.code,{children:"@waku/sdk"})," in NodeJS."]}),"\n",(0,s.jsx)(i.h2,{id:"limitations",children:"Limitations"}),"\n",(0,s.jsx)(i.h3,{id:"api-compatibility",children:"API compatibility"}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"@waku/sdk"})," prioritises browser compatibility, avoiding NodeJS APIs for simpler bundling. This design choice enhances browser API compatibility but sacrifices NodeJS optimisation. While many browser APIs work in NodeJS, they might need better optimisation."]}),"\n",(0,s.jsx)(i.h3,{id:"protocol-implementation",children:"Protocol implementation"}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"@waku/sdk"})," focuses on the client side of the ",(0,s.jsx)(i.a,{href:"/learn/concepts/network-domains#requestresponse-domain",children:"Request/Response protocol"}),". We'll have to replicate all the functionalities added to ",(0,s.jsx)(i.a,{href:"/guides/nwaku/run-node",children:"nwaku"})," to implement extra features."]}),"\n",(0,s.jsx)(i.h3,{id:"codebase-complexity",children:"Codebase complexity"}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"@waku/sdk"})," aims to provide optimal default for the browser, striking a balance between browser and NodeJS compatibility while ensuring simplicity will add complexity."]}),"\n",(0,s.jsx)(i.h3,{id:"browser-specific-protocols",children:"Browser-specific protocols"}),"\n",(0,s.jsxs)(i.p,{children:["Certain features in ",(0,s.jsx)(i.code,{children:"@waku/sdk"})," are tailored for browsers and might not translate seamlessly to NodeJS. For example, only ",(0,s.jsx)(i.code,{children:"WebSocket"})," is supported in the browser, whereas a NodeJS application can benefit from using ",(0,s.jsx)(i.a,{href:"/learn/concepts/transports",children:"transport methods"})," like ",(0,s.jsx)(i.code,{children:"TCP"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.code,{children:"@waku/sdk"})," default peer management caters to the browser's ephemeral nature, which is different for NodeJS. This is why ",(0,s.jsx)(i.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"})," and ",(0,s.jsx)(i.a,{href:"/learn/concepts/peer-exchange",children:"Peer Exchange"})," are the default discovery mechanisms for the browser but not for NodeJS and desktop applications."]}),"\n",(0,s.jsx)(i.h2,{id:"recommendations",children:"Recommendations"}),"\n",(0,s.jsxs)(i.p,{children:["Before using ",(0,s.jsx)(i.code,{children:"@waku/sdk"})," in a NodeJS environment, take into account these limitations. For a more optimised solution, we recommend ",(0,s.jsx)(i.a,{href:"/guides/nwaku/run-docker-compose",children:"running nwaku in a Docker container"})," and consuming its ",(0,s.jsx)(i.a,{href:"https://waku-org.github.io/waku-rest-api/",children:"REST API"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"future-developments",children:"Future developments"}),"\n",(0,s.jsxs)(i.p,{children:["There are plans to release a NodeJS package based on ",(0,s.jsx)(i.a,{href:"/guides/nwaku/run-node",children:"nwaku"})," to streamline the process of using Waku Network features in NodeJS applications. You can track the progress and updates here: ",(0,s.jsx)(i.a,{href:"https://github.com/waku-org/nwaku/issues/1332",children:"https://github.com/waku-org/nwaku/issues/1332"}),"."]})]})}function u(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}}}]); \ No newline at end of file diff --git a/assets/js/102f9e17.589918fe.js b/assets/js/102f9e17.589918fe.js new file mode 100644 index 0000000..467efcb --- /dev/null +++ b/assets/js/102f9e17.589918fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4490],{28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>o});var s=n(96540);const i={},a=s.createContext(i);function r(e){const t=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:t},e.children)}},81277:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"learn/research/research-and-studies/capped-bandwidth","title":"Capped Bandwidth in Waku","description":"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.","source":"@site/docs/learn/research/research-and-studies/capped-bandwidth.md","sourceDirName":"learn/research/research-and-studies","slug":"/learn/research/research-and-studies/capped-bandwidth","permalink":"/learn/research/research-and-studies/capped-bandwidth","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/research/research-and-studies/capped-bandwidth.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Capped Bandwidth in Waku"},"sidebar":"learn","previous":{"title":"Performance Benchmarks and Test Reports","permalink":"/learn/research/benchmarks/test-results-summary"},"next":{"title":"Incentivisation","permalink":"/learn/research/research-and-studies/incentivisation"}}');var i=n(74848),a=n(28453);const r={title:"Capped Bandwidth in Waku"},o=void 0,d={},h=[{value:"Problem",id:"problem",level:2},{value:"Previous Work",id:"previous-work",level:2},{value:"Current Solution (RLN v2)",id:"current-solution-rln-v2",level:2}];function l(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2."}),"\n",(0,i.jsx)(t.h2,{id:"problem",children:"Problem"}),"\n",(0,i.jsx)(t.p,{children:'First of all, let\'s begin with the terminology. We have talked in the past about "predictable" bandwidth, but a better name would be "capped" bandwidth. This is because it is totally fine that the waku traffic is not predictable, as long as it is capped. And it has to be capped because otherwise, no one will be able to run a node.'}),"\n",(0,i.jsx)(t.p,{children:"Since we aim that everyone can run a full waku node (at least subscribed to a single shard) it is of paramount importance that the bandwidth requirements (up/down) are i) reasonable to run with a residential internet connection in every country and ii) limited to an upper value, aka capped. If the required bandwidth to stay up to date with a topic is higher than what the node has available, then it will start losing messages and won't be able to stay up to date with the topic messages. And not to mention the problems this will cause to other services and applications being used by the user."}),"\n",(0,i.jsxs)(t.p,{children:["The main problem is that one can't just choose the bandwidth it allocates to ",(0,i.jsx)(t.code,{children:"relay"}),". One could set the maximum bandwidth willing to allocate to ",(0,i.jsx)(t.code,{children:"store"})," but this is not how ",(0,i.jsx)(t.code,{children:"relay"})," works. The required bandwidth is not set by the node, but by the network. If a pubsub topic ",(0,i.jsx)(t.code,{children:"a"}),' has a traffic of 50 Mbps (which is the sum of all messages being sent multiplied by its size, times the D_out degree), then if a node wants to stay up to date in that topic, and relay traffic in it, then it will require 50 Mbps. There is no thing such as "partially contributing" to the topic (with eg 25Mbps) because then you will be losing messages, becoming an unreliable peer and potentially be disconnected. The network sets the pace.']}),"\n",(0,i.jsx)(t.p,{children:"So waku needs an upper boundary on the in/out bandwidth (mbps) it consumes. Just like apps have requirements on cpu and memory, we should set a requirement on bandwidth, and then guarantee that if you have that bandwidth, you will be able to run a node without any problem. And this is the tricky part. This metric is Waku's constraint, similar to the gas-per-block limit in blockchains."}),"\n",(0,i.jsx)(t.h2,{id:"previous-work",children:"Previous Work"}),"\n",(0,i.jsx)(t.p,{children:"Quick summary of the evolution to solve this problem:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Waku started with no rate-limiting mechanism. The network was subject to DoS attacks."}),"\n",(0,i.jsxs)(t.li,{children:["RLN v1 was introduced, which allowed to rate-limit in a privacy-preserving and anonymous way. The rate limit can be configured to 1 message every ",(0,i.jsx)(t.code,{children:"y"})," seconds. However, this didn't offer much granularity. A low ",(0,i.jsx)(t.code,{children:"y"})," would allow too many messages and a high ",(0,i.jsx)(t.code,{children:"y"})," would make the protocol unusable (impossible to send two messages in a row)."]}),"\n",(0,i.jsxs)(t.li,{children:["RLN v2 was introduced, which allows to rate-limit each user to ",(0,i.jsx)(t.code,{children:"x"})," messages every ",(0,i.jsx)(t.code,{children:"y"})," seconds. This offers the granularity we need. It is the current solution deployed in The Waku Network."]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"current-solution-rln-v2",children:"Current Solution (RLN v2)"}),"\n",(0,i.jsxs)(t.p,{children:["The current solution to this problem is the usage of RLN v2, which allows to rate-limit ",(0,i.jsx)(t.code,{children:"x"})," messages every ",(0,i.jsx)(t.code,{children:"y"})," seconds. On top of this, the introduction of ",(0,i.jsx)(t.a,{href:"https://github.com/waku-org/specs/blob/master/standards/core/rln-contract.md",children:"WAKU2-RLN-CONTRACT"})," enforces a maximum amount of messages that can be sent to the network per ",(0,i.jsx)(t.code,{children:"epoch"}),". This is achieved by limiting the amount of memberships that can be registered. The current values are:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"R_{max}"}),": 160000 mgs/epoch"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"r_{max}"}),": 600 msgs/epoch"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"r_{min}"}),": 20 msgs/epoch"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["In other words, the contract limits the amount of memberships that can be registered from ",(0,i.jsx)(t.code,{children:"266"})," to ",(0,i.jsx)(t.code,{children:"8000"})," depending on which rate limit users choose."]}),"\n",(0,i.jsxs)(t.p,{children:["On the other hand ",(0,i.jsx)(t.a,{href:"https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/64/network.md",children:"64/WAKU2-NETWORK"})," states that:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"rlnEpochSizeSec"}),": 600. Meaning the epoch size is 600 seconds."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"maxMessageSize"}),": 150KB. Meaning the maximum message size that is allowed. Note: recommended average of 4KB."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Putting this all together and assuming:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Messages are sent uniformly distributed."}),"\n",(0,i.jsx)(t.li,{children:"All users totally consumes its rate-limit."}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"We can expect the following message rate and bandwidth for the whole network:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["A traffic of ",(0,i.jsx)(t.code,{children:"266 msg/second"})," on average (",(0,i.jsx)(t.code,{children:"160000/600"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["A traffic of ",(0,i.jsx)(t.code,{children:"6 MBps"})," on average (266 * 4KB * 6), where ",(0,i.jsx)(t.code,{children:"4KB"})," is the average message size and ",(0,i.jsx)(t.code,{children:"6"})," is the average gossipsub D-out degree."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"And assuming a uniform distribution of traffic among 8 shards:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"33 msg/second"})," per shard."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"0.75 MBps"})," per shard."]}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}}}]); \ No newline at end of file diff --git a/assets/js/1039.c793c2f5.js b/assets/js/1039.c793c2f5.js deleted file mode 100644 index 96a8954..0000000 --- a/assets/js/1039.c793c2f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1039],{21039:(t,e,a)=>{a.d(e,{diagram:()=>Nt});var n=a(95237),i=a(46792),r=a(41750),s=a(70451),l=a(16750),o=function(){var t=(0,r.K2)(function(t,e,a,n){for(a=a||{},n=t.length;n--;a[t[n]]=e);return a},"o"),e=[1,24],a=[1,25],n=[1,26],i=[1,27],s=[1,28],l=[1,63],o=[1,64],h=[1,65],d=[1,66],u=[1,67],p=[1,68],y=[1,69],g=[1,29],f=[1,30],b=[1,31],x=[1,32],_=[1,33],m=[1,34],E=[1,35],S=[1,36],A=[1,37],C=[1,38],w=[1,39],k=[1,40],O=[1,41],T=[1,42],v=[1,43],R=[1,44],D=[1,45],N=[1,46],P=[1,47],B=[1,48],I=[1,50],M=[1,51],j=[1,52],K=[1,53],L=[1,54],Y=[1,55],U=[1,56],F=[1,57],X=[1,58],z=[1,59],W=[1,60],Q=[14,42],$=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],H=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[1,82],V=[1,83],G=[1,84],J=[1,85],Z=[12,14,42],tt=[12,14,33,42],et=[12,14,33,42,76,77,79,80],at=[12,33],nt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],it={trace:(0,r.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:(0,r.K2)(function(t,e,a,n,i,r,s){var l=r.length-1;switch(i){case 3:n.setDirection("TB");break;case 4:n.setDirection("BT");break;case 5:n.setDirection("RL");break;case 6:n.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:n.setC4Type(r[l-3]);break;case 19:n.setTitle(r[l].substring(6)),this.$=r[l].substring(6);break;case 20:n.setAccDescription(r[l].substring(15)),this.$=r[l].substring(15);break;case 21:this.$=r[l].trim(),n.setTitle(this.$);break;case 22:case 23:this.$=r[l].trim(),n.setAccDescription(this.$);break;case 28:r[l].splice(2,0,"ENTERPRISE"),n.addPersonOrSystemBoundary(...r[l]),this.$=r[l];break;case 29:r[l].splice(2,0,"SYSTEM"),n.addPersonOrSystemBoundary(...r[l]),this.$=r[l];break;case 30:n.addPersonOrSystemBoundary(...r[l]),this.$=r[l];break;case 31:r[l].splice(2,0,"CONTAINER"),n.addContainerBoundary(...r[l]),this.$=r[l];break;case 32:n.addDeploymentNode("node",...r[l]),this.$=r[l];break;case 33:n.addDeploymentNode("nodeL",...r[l]),this.$=r[l];break;case 34:n.addDeploymentNode("nodeR",...r[l]),this.$=r[l];break;case 35:n.popBoundaryParseStack();break;case 39:n.addPersonOrSystem("person",...r[l]),this.$=r[l];break;case 40:n.addPersonOrSystem("external_person",...r[l]),this.$=r[l];break;case 41:n.addPersonOrSystem("system",...r[l]),this.$=r[l];break;case 42:n.addPersonOrSystem("system_db",...r[l]),this.$=r[l];break;case 43:n.addPersonOrSystem("system_queue",...r[l]),this.$=r[l];break;case 44:n.addPersonOrSystem("external_system",...r[l]),this.$=r[l];break;case 45:n.addPersonOrSystem("external_system_db",...r[l]),this.$=r[l];break;case 46:n.addPersonOrSystem("external_system_queue",...r[l]),this.$=r[l];break;case 47:n.addContainer("container",...r[l]),this.$=r[l];break;case 48:n.addContainer("container_db",...r[l]),this.$=r[l];break;case 49:n.addContainer("container_queue",...r[l]),this.$=r[l];break;case 50:n.addContainer("external_container",...r[l]),this.$=r[l];break;case 51:n.addContainer("external_container_db",...r[l]),this.$=r[l];break;case 52:n.addContainer("external_container_queue",...r[l]),this.$=r[l];break;case 53:n.addComponent("component",...r[l]),this.$=r[l];break;case 54:n.addComponent("component_db",...r[l]),this.$=r[l];break;case 55:n.addComponent("component_queue",...r[l]),this.$=r[l];break;case 56:n.addComponent("external_component",...r[l]),this.$=r[l];break;case 57:n.addComponent("external_component_db",...r[l]),this.$=r[l];break;case 58:n.addComponent("external_component_queue",...r[l]),this.$=r[l];break;case 60:n.addRel("rel",...r[l]),this.$=r[l];break;case 61:n.addRel("birel",...r[l]),this.$=r[l];break;case 62:n.addRel("rel_u",...r[l]),this.$=r[l];break;case 63:n.addRel("rel_d",...r[l]),this.$=r[l];break;case 64:n.addRel("rel_l",...r[l]),this.$=r[l];break;case 65:n.addRel("rel_r",...r[l]),this.$=r[l];break;case 66:n.addRel("rel_b",...r[l]),this.$=r[l];break;case 67:r[l].splice(0,1),n.addRel("rel",...r[l]),this.$=r[l];break;case 68:n.updateElStyle("update_el_style",...r[l]),this.$=r[l];break;case 69:n.updateRelStyle("update_rel_style",...r[l]),this.$=r[l];break;case 70:n.updateLayoutConfig("update_layout_config",...r[l]),this.$=r[l];break;case 71:this.$=[r[l]];break;case 72:r[l].unshift(r[l-1]),this.$=r[l];break;case 73:case 75:this.$=r[l].trim();break;case 74:let t={};t[r[l-1].trim()]=r[l].trim(),this.$=t;break;case 76:this.$=""}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:a,24:n,26:i,28:s,29:49,30:61,32:62,34:l,36:o,37:h,38:d,39:u,40:p,41:y,43:23,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W},{13:70,19:20,20:21,21:22,22:e,23:a,24:n,26:i,28:s,29:49,30:61,32:62,34:l,36:o,37:h,38:d,39:u,40:p,41:y,43:23,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W},{13:71,19:20,20:21,21:22,22:e,23:a,24:n,26:i,28:s,29:49,30:61,32:62,34:l,36:o,37:h,38:d,39:u,40:p,41:y,43:23,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W},{13:72,19:20,20:21,21:22,22:e,23:a,24:n,26:i,28:s,29:49,30:61,32:62,34:l,36:o,37:h,38:d,39:u,40:p,41:y,43:23,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W},{13:73,19:20,20:21,21:22,22:e,23:a,24:n,26:i,28:s,29:49,30:61,32:62,34:l,36:o,37:h,38:d,39:u,40:p,41:y,43:23,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W},{14:[1,74]},t(Q,[2,13],{43:23,29:49,30:61,32:62,20:75,34:l,36:o,37:h,38:d,39:u,40:p,41:y,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W}),t(Q,[2,14]),t($,[2,16],{12:[1,76]}),t(Q,[2,36],{12:[1,77]}),t(H,[2,19]),t(H,[2,20]),{25:[1,78]},{27:[1,79]},t(H,[2,23]),{35:80,75:81,76:q,77:V,79:G,80:J},{35:86,75:81,76:q,77:V,79:G,80:J},{35:87,75:81,76:q,77:V,79:G,80:J},{35:88,75:81,76:q,77:V,79:G,80:J},{35:89,75:81,76:q,77:V,79:G,80:J},{35:90,75:81,76:q,77:V,79:G,80:J},{35:91,75:81,76:q,77:V,79:G,80:J},{35:92,75:81,76:q,77:V,79:G,80:J},{35:93,75:81,76:q,77:V,79:G,80:J},{35:94,75:81,76:q,77:V,79:G,80:J},{35:95,75:81,76:q,77:V,79:G,80:J},{35:96,75:81,76:q,77:V,79:G,80:J},{35:97,75:81,76:q,77:V,79:G,80:J},{35:98,75:81,76:q,77:V,79:G,80:J},{35:99,75:81,76:q,77:V,79:G,80:J},{35:100,75:81,76:q,77:V,79:G,80:J},{35:101,75:81,76:q,77:V,79:G,80:J},{35:102,75:81,76:q,77:V,79:G,80:J},{35:103,75:81,76:q,77:V,79:G,80:J},{35:104,75:81,76:q,77:V,79:G,80:J},t(Z,[2,59]),{35:105,75:81,76:q,77:V,79:G,80:J},{35:106,75:81,76:q,77:V,79:G,80:J},{35:107,75:81,76:q,77:V,79:G,80:J},{35:108,75:81,76:q,77:V,79:G,80:J},{35:109,75:81,76:q,77:V,79:G,80:J},{35:110,75:81,76:q,77:V,79:G,80:J},{35:111,75:81,76:q,77:V,79:G,80:J},{35:112,75:81,76:q,77:V,79:G,80:J},{35:113,75:81,76:q,77:V,79:G,80:J},{35:114,75:81,76:q,77:V,79:G,80:J},{35:115,75:81,76:q,77:V,79:G,80:J},{20:116,29:49,30:61,32:62,34:l,36:o,37:h,38:d,39:u,40:p,41:y,43:23,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W},{12:[1,118],33:[1,117]},{35:119,75:81,76:q,77:V,79:G,80:J},{35:120,75:81,76:q,77:V,79:G,80:J},{35:121,75:81,76:q,77:V,79:G,80:J},{35:122,75:81,76:q,77:V,79:G,80:J},{35:123,75:81,76:q,77:V,79:G,80:J},{35:124,75:81,76:q,77:V,79:G,80:J},{35:125,75:81,76:q,77:V,79:G,80:J},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(Q,[2,15]),t($,[2,17],{21:22,19:130,22:e,23:a,24:n,26:i,28:s}),t(Q,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:a,24:n,26:i,28:s,34:l,36:o,37:h,38:d,39:u,40:p,41:y,44:g,45:f,46:b,47:x,48:_,49:m,50:E,51:S,52:A,53:C,54:w,55:k,56:O,57:T,58:v,59:R,60:D,61:N,62:P,63:B,64:I,65:M,66:j,67:K,68:L,69:Y,70:U,71:F,72:X,73:z,74:W}),t(H,[2,21]),t(H,[2,22]),t(Z,[2,39]),t(tt,[2,71],{75:81,35:132,76:q,77:V,79:G,80:J}),t(et,[2,73]),{78:[1,133]},t(et,[2,75]),t(et,[2,76]),t(Z,[2,40]),t(Z,[2,41]),t(Z,[2,42]),t(Z,[2,43]),t(Z,[2,44]),t(Z,[2,45]),t(Z,[2,46]),t(Z,[2,47]),t(Z,[2,48]),t(Z,[2,49]),t(Z,[2,50]),t(Z,[2,51]),t(Z,[2,52]),t(Z,[2,53]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),t(Z,[2,57]),t(Z,[2,58]),t(Z,[2,60]),t(Z,[2,61]),t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,64]),t(Z,[2,65]),t(Z,[2,66]),t(Z,[2,67]),t(Z,[2,68]),t(Z,[2,69]),t(Z,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(at,[2,28]),t(at,[2,29]),t(at,[2,30]),t(at,[2,31]),t(at,[2,32]),t(at,[2,33]),t(at,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t($,[2,18]),t(Q,[2,38]),t(tt,[2,72]),t(et,[2,74]),t(Z,[2,24]),t(Z,[2,35]),t(nt,[2,25]),t(nt,[2,26],{12:[1,138]}),t(nt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:(0,r.K2)(function(t,e){if(!e.recoverable){var a=new Error(t);throw a.hash=e,a}this.trace(t)},"parseError"),parse:(0,r.K2)(function(t){var e=this,a=[0],n=[],i=[null],s=[],l=this.table,o="",c=0,h=0,d=0,u=s.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var f=p.yylloc;s.push(f);var b=p.options&&p.options.ranges;function x(){var t;return"number"!=typeof(t=n.pop()||p.lex()||1)&&(t instanceof Array&&(t=(n=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,r.K2)(function(t){a.length=a.length-2*t,i.length=i.length-t,s.length=s.length-t},"popStack"),(0,r.K2)(x,"lex");for(var _,m,E,S,A,C,w,k,O,T={};;){if(E=a[a.length-1],this.defaultActions[E]?S=this.defaultActions[E]:(null==_&&(_=x()),S=l[E]&&l[E][_]),void 0===S||!S.length||!S[0]){var v="";for(C in O=[],l[E])this.terminals_[C]&&C>2&&O.push("'"+this.terminals_[C]+"'");v=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+O.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(v,{text:p.match,token:this.terminals_[_]||_,line:p.yylineno,loc:f,expected:O})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+_);switch(S[0]){case 1:a.push(_),i.push(p.yytext),s.push(p.yylloc),a.push(S[1]),_=null,m?(_=m,m=null):(h=p.yyleng,o=p.yytext,c=p.yylineno,f=p.yylloc,d>0&&d--);break;case 2:if(w=this.productions_[S[1]][1],T.$=i[i.length-w],T._$={first_line:s[s.length-(w||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(w||1)].first_column,last_column:s[s.length-1].last_column},b&&(T._$.range=[s[s.length-(w||1)].range[0],s[s.length-1].range[1]]),void 0!==(A=this.performAction.apply(T,[o,h,c,y.yy,S[1],i,s].concat(u))))return A;w&&(a=a.slice(0,-1*w*2),i=i.slice(0,-1*w),s=s.slice(0,-1*w)),a.push(this.productions_[S[1]][0]),i.push(T.$),s.push(T._$),k=l[a[a.length-2]][a[a.length-1]],a.push(k);break;case 3:return!0}}return!0},"parse")},rt=function(){return{EOF:1,parseError:(0,r.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,r.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,r.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,r.K2)(function(t){var e=t.length,a=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===n.length?this.yylloc.first_column:0)+n[n.length-a.length].length-a[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,r.K2)(function(){return this._more=!0,this},"more"),reject:(0,r.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,r.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,r.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,r.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,r.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,r.K2)(function(t,e){var a,n,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],a=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var r in i)this[r]=i[r];return!1}return!1},"test_match"),next:(0,r.K2)(function(){if(this.done)return this.EOF;var t,e,a,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),r=0;re[0].length)){if(e=a,n=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,i[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,r.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,r.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,r.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,r.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,r.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,r.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,r.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:(0,r.K2)(function(t,e,a,n){switch(a){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 73:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 16:case 70:break;case 14:c;break;case 15:return 12;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:case 53:return this.begin("rel_u"),66;case 54:case 55:return this.begin("rel_d"),67;case 56:case 57:return this.begin("rel_l"),68;case 58:case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:case 79:this.popState(),this.popState();break;case 69:case 71:return 80;case 72:this.begin("string");break;case 74:case 80:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}}}();function st(){this.yy={}}return it.lexer=rt,(0,r.K2)(st,"Parser"),st.prototype=it,it.Parser=st,new st}();o.parser=o;var h,d=o,u=[],p=[""],y="global",g="",f=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],b=[],x="",_=!1,m=4,E=2,S=(0,r.K2)(function(){return h},"getC4Type"),A=(0,r.K2)(function(t){let e=(0,r.jZ)(t,(0,r.D7)());h=e},"setC4Type"),C=(0,r.K2)(function(t,e,a,n,i,r,s,l,o){if(null==t||null==e||null==a||null==n)return;let c={};const h=b.find(t=>t.from===e&&t.to===a);if(h?c=h:b.push(c),c.type=t,c.from=e,c.to=a,c.label={text:n},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};if(null==r)c.descr={text:""};else if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]={text:e}}else c.descr={text:r};if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]=e}else c.sprite=s;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.tags=l;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=$()},"addRel"),w=(0,r.K2)(function(t,e,a,n,i,r,s){if(null===e||null===a)return;let l={};const o=u.find(t=>t.alias===e);if(o&&e===o.alias?l=o:(l.alias=e,u.push(l)),l.label=null==a?{text:""}:{text:a},null==n)l.descr={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];l[t]={text:e}}else l.descr={text:n};if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.sprite=i;if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=e}else l.tags=r;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=y,l.wrap=$()},"addPersonOrSystem"),k=(0,r.K2)(function(t,e,a,n,i,r,s,l){if(null===e||null===a)return;let o={};const c=u.find(t=>t.alias===e);if(c&&e===c.alias?o=c:(o.alias=e,u.push(o)),o.label=null==a?{text:""}:{text:a},null==n)o.techn={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.techn={text:n};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.sprite=r;if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.tags=s;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=$(),o.typeC4Shape={text:t},o.parentBoundary=y},"addContainer"),O=(0,r.K2)(function(t,e,a,n,i,r,s,l){if(null===e||null===a)return;let o={};const c=u.find(t=>t.alias===e);if(c&&e===c.alias?o=c:(o.alias=e,u.push(o)),o.label=null==a?{text:""}:{text:a},null==n)o.techn={text:""};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.techn={text:n};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.sprite=r;if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.tags=s;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=$(),o.typeC4Shape={text:t},o.parentBoundary=y},"addComponent"),T=(0,r.K2)(function(t,e,a,n,i){if(null===t||null===e)return;let r={};const s=f.find(e=>e.alias===t);if(s&&t===s.alias?r=s:(r.alias=t,f.push(r)),r.label=null==e?{text:""}:{text:e},null==a)r.type={text:"system"};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];r[t]={text:e}}else r.type={text:a};if("object"==typeof n){let[t,e]=Object.entries(n)[0];r[t]=e}else r.tags=n;if("object"==typeof i){let[t,e]=Object.entries(i)[0];r[t]=e}else r.link=i;r.parentBoundary=y,r.wrap=$(),g=y,y=t,p.push(g)},"addPersonOrSystemBoundary"),v=(0,r.K2)(function(t,e,a,n,i){if(null===t||null===e)return;let r={};const s=f.find(e=>e.alias===t);if(s&&t===s.alias?r=s:(r.alias=t,f.push(r)),r.label=null==e?{text:""}:{text:e},null==a)r.type={text:"container"};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];r[t]={text:e}}else r.type={text:a};if("object"==typeof n){let[t,e]=Object.entries(n)[0];r[t]=e}else r.tags=n;if("object"==typeof i){let[t,e]=Object.entries(i)[0];r[t]=e}else r.link=i;r.parentBoundary=y,r.wrap=$(),g=y,y=t,p.push(g)},"addContainerBoundary"),R=(0,r.K2)(function(t,e,a,n,i,r,s,l){if(null===e||null===a)return;let o={};const c=f.find(t=>t.alias===e);if(c&&e===c.alias?o=c:(o.alias=e,f.push(o)),o.label=null==a?{text:""}:{text:a},null==n)o.type={text:"node"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];o[t]={text:e}}else o.type={text:n};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.tags=s;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.nodeType=t,o.parentBoundary=y,o.wrap=$(),g=y,y=e,p.push(g)},"addDeploymentNode"),D=(0,r.K2)(function(){y=g,p.pop(),g=p.pop(),p.push(g)},"popBoundaryParseStack"),N=(0,r.K2)(function(t,e,a,n,i,r,s,l,o,c,h){let d=u.find(t=>t.alias===e);if(void 0!==d||(d=f.find(t=>t.alias===e),void 0!==d)){if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];d[t]=e}else d.bgColor=a;if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];d[t]=e}else d.fontColor=n;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];d[t]=e}else d.borderColor=i;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];d[t]=e}else d.shadowing=r;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];d[t]=e}else d.shape=s;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];d[t]=e}else d.sprite=l;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];d[t]=e}else d.techn=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];d[t]=e}else d.legendText=c;if(null!=h)if("object"==typeof h){let[t,e]=Object.entries(h)[0];d[t]=e}else d.legendSprite=h}},"updateElStyle"),P=(0,r.K2)(function(t,e,a,n,i,r,s){const l=b.find(t=>t.from===e&&t.to===a);if(void 0!==l){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];l[t]=e}else l.textColor=n;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.lineColor=i;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=parseInt(e)}else l.offsetX=parseInt(r);if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=parseInt(e)}else l.offsetY=parseInt(s)}},"updateRelStyle"),B=(0,r.K2)(function(t,e,a){let n=m,i=E;if("object"==typeof e){const t=Object.values(e)[0];n=parseInt(t)}else n=parseInt(e);if("object"==typeof a){const t=Object.values(a)[0];i=parseInt(t)}else i=parseInt(a);n>=1&&(m=n),i>=1&&(E=i)},"updateLayoutConfig"),I=(0,r.K2)(function(){return m},"getC4ShapeInRow"),M=(0,r.K2)(function(){return E},"getC4BoundaryInRow"),j=(0,r.K2)(function(){return y},"getCurrentBoundaryParse"),K=(0,r.K2)(function(){return g},"getParentBoundaryParse"),L=(0,r.K2)(function(t){return null==t?u:u.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),Y=(0,r.K2)(function(t){return u.find(e=>e.alias===t)},"getC4Shape"),U=(0,r.K2)(function(t){return Object.keys(L(t))},"getC4ShapeKeys"),F=(0,r.K2)(function(t){return null==t?f:f.filter(e=>e.parentBoundary===t)},"getBoundaries"),X=F,z=(0,r.K2)(function(){return b},"getRels"),W=(0,r.K2)(function(){return x},"getTitle"),Q=(0,r.K2)(function(t){_=t},"setWrap"),$=(0,r.K2)(function(){return _},"autoWrap"),H=(0,r.K2)(function(){u=[],f=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],g="",y="global",p=[""],b=[],p=[""],x="",_=!1,m=4,E=2},"clear"),q=(0,r.K2)(function(t){let e=(0,r.jZ)(t,(0,r.D7)());x=e},"setTitle"),V={addPersonOrSystem:w,addPersonOrSystemBoundary:T,addContainer:k,addContainerBoundary:v,addComponent:O,addDeploymentNode:R,popBoundaryParseStack:D,addRel:C,updateElStyle:N,updateRelStyle:P,updateLayoutConfig:B,autoWrap:$,setWrap:Q,getC4ShapeArray:L,getC4Shape:Y,getC4ShapeKeys:U,getBoundaries:F,getBoundarys:X,getCurrentBoundaryParse:j,getParentBoundaryParse:K,getRels:z,getTitle:W,getC4Type:S,getC4ShapeInRow:I,getC4BoundaryInRow:M,setAccTitle:r.SV,getAccTitle:r.iN,getAccDescription:r.m7,setAccDescription:r.EI,getConfig:(0,r.K2)(()=>(0,r.D7)().c4,"getConfig"),clear:H,LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:q,setC4Type:A},G=(0,r.K2)(function(t,e){return(0,n.tk)(t,e)},"drawRect"),J=(0,r.K2)(function(t,e,a,n,i,r){const s=t.append("image");s.attr("width",e),s.attr("height",a),s.attr("x",n),s.attr("y",i);let o=r.startsWith("data:image/png;base64")?r:(0,l.J)(r);s.attr("xlink:href",o)},"drawImage"),Z=(0,r.K2)((t,e,a)=>{const n=t.append("g");let i=0;for(let r of e){let t=r.textColor?r.textColor:"#444444",e=r.lineColor?r.lineColor:"#444444",s=r.offsetX?parseInt(r.offsetX):0,l=r.offsetY?parseInt(r.offsetY):0,o="";if(0===i){let t=n.append("line");t.attr("x1",r.startPoint.x),t.attr("y1",r.startPoint.y),t.attr("x2",r.endPoint.x),t.attr("y2",r.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==r.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==r.type&&"rel_b"!==r.type||t.attr("marker-start","url("+o+"#arrowend)"),i=-1}else{let t=n.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",r.startPoint.x).replaceAll("starty",r.startPoint.y).replaceAll("controlx",r.startPoint.x+(r.endPoint.x-r.startPoint.x)/2-(r.endPoint.x-r.startPoint.x)/4).replaceAll("controly",r.startPoint.y+(r.endPoint.y-r.startPoint.y)/2).replaceAll("stopx",r.endPoint.x).replaceAll("stopy",r.endPoint.y)),"rel_b"!==r.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==r.type&&"rel_b"!==r.type||t.attr("marker-start","url("+o+"#arrowend)")}let c=a.messageFont();dt(a)(r.label.text,n,Math.min(r.startPoint.x,r.endPoint.x)+Math.abs(r.endPoint.x-r.startPoint.x)/2+s,Math.min(r.startPoint.y,r.endPoint.y)+Math.abs(r.endPoint.y-r.startPoint.y)/2+l,r.label.width,r.label.height,{fill:t},c),r.techn&&""!==r.techn.text&&(c=a.messageFont(),dt(a)("["+r.techn.text+"]",n,Math.min(r.startPoint.x,r.endPoint.x)+Math.abs(r.endPoint.x-r.startPoint.x)/2+s,Math.min(r.startPoint.y,r.endPoint.y)+Math.abs(r.endPoint.y-r.startPoint.y)/2+a.messageFontSize+5+l,Math.max(r.label.width,r.techn.width),r.techn.height,{fill:t,"font-style":"italic"},c))}},"drawRels"),tt=(0,r.K2)(function(t,e,a){const n=t.append("g");let i=e.bgColor?e.bgColor:"none",r=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let o={x:e.x,y:e.y,fill:i,stroke:r,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};G(n,o);let c=a.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=s,dt(a)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=a.boundaryFont(),c.fontColor=s,dt(a)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},c)),e.descr&&""!==e.descr.text&&(c=a.boundaryFont(),c.fontSize=c.fontSize-2,c.fontColor=s,dt(a)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},"drawBoundary"),et=(0,r.K2)(function(t,e,a){let i=e.bgColor?e.bgColor:a[e.typeC4Shape.text+"_bg_color"],r=e.borderColor?e.borderColor:a[e.typeC4Shape.text+"_border_color"],s=e.fontColor?e.fontColor:"#FFFFFF",l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const o=t.append("g");o.attr("class","person-man");const c=(0,n.PB)();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":c.x=e.x,c.y=e.y,c.fill=i,c.width=e.width,c.height=e.height,c.stroke=r,c.rx=2.5,c.ry=2.5,c.attrs={"stroke-width":.5},G(o,c);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":o.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),o.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":o.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),o.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let h=ht(a,e.typeC4Shape.text);switch(o.append("text").attr("fill",s).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":J(o,48,48,e.x+e.width/2-24,e.y+e.image.Y,l)}let d=a[e.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=s,dt(a)(e.label.text,o,e.x,e.y+e.label.Y,e.width,e.height,{fill:s},d),d=a[e.typeC4Shape.text+"Font"](),d.fontColor=s,e.techn&&""!==e.techn?.text?dt(a)(e.techn.text,o,e.x,e.y+e.techn.Y,e.width,e.height,{fill:s,"font-style":"italic"},d):e.type&&""!==e.type.text&&dt(a)(e.type.text,o,e.x,e.y+e.type.Y,e.width,e.height,{fill:s,"font-style":"italic"},d),e.descr&&""!==e.descr.text&&(d=a.personFont(),d.fontColor=s,dt(a)(e.descr.text,o,e.x,e.y+e.descr.Y,e.width,e.height,{fill:s},d)),e.height},"drawC4Shape"),at=(0,r.K2)(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),nt=(0,r.K2)(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),it=(0,r.K2)(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),rt=(0,r.K2)(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),st=(0,r.K2)(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),lt=(0,r.K2)(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),ot=(0,r.K2)(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),ct=(0,r.K2)(function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),ht=(0,r.K2)((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),dt=function(){function t(t,e,a,i,r,s,l){n(e.append("text").attr("x",a+r/2).attr("y",i+s/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,a,i,s,l,o,c){const{fontSize:h,fontFamily:d,fontWeight:u}=c,p=t.split(r.Y2.lineBreakRegex);for(let r=0;r=this.data.widthLimit||a>=this.data.widthLimit||this.nextData.cnt>gt)&&(e=this.nextData.startx+t.margin+bt.nextLinePaddingX,n=this.nextData.stopy+2*t.margin,this.nextData.stopx=a=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=n+t.height,this.nextData.cnt=1),t.x=e,t.y=n,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",n,Math.min),this.updateVal(this.data,"stopx",a,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",n,Math.min),this.updateVal(this.nextData,"stopx",a,Math.max),this.updateVal(this.nextData,"stopy",i,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},_t(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}},_t=(0,r.K2)(function(t){(0,r.hH)(bt,t),t.fontFamily&&(bt.personFontFamily=bt.systemFontFamily=bt.messageFontFamily=t.fontFamily),t.fontSize&&(bt.personFontSize=bt.systemFontSize=bt.messageFontSize=t.fontSize),t.fontWeight&&(bt.personFontWeight=bt.systemFontWeight=bt.messageFontWeight=t.fontWeight)},"setConf"),mt=(0,r.K2)((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),Et=(0,r.K2)(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),St=(0,r.K2)(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");function At(t,e,a,n,s){if(!e[t].width)if(a)e[t].text=(0,i.bH)(e[t].text,s,n),e[t].textLines=e[t].text.split(r.Y2.lineBreakRegex).length,e[t].width=s,e[t].height=(0,i.ru)(e[t].text,n);else{let a=e[t].text.split(r.Y2.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(const r of a)e[t].width=Math.max((0,i.Un)(r,n),e[t].width),s=(0,i.ru)(r,n),e[t].height=e[t].height+s}}(0,r.K2)(At,"calcC4ShapeTextWH");var Ct=(0,r.K2)(function(t,e,a){e.x=a.data.startx,e.y=a.data.starty,e.width=a.data.stopx-a.data.startx,e.height=a.data.stopy-a.data.starty,e.label.y=bt.c4ShapeMargin-35;let n=e.wrap&&bt.wrap,r=Et(bt);r.fontSize=r.fontSize+2,r.fontWeight="bold",At("label",e,n,r,(0,i.Un)(e.label.text,r)),ut.drawBoundary(t,e,bt)},"drawBoundary"),wt=(0,r.K2)(function(t,e,a,n){let r=0;for(const s of n){r=0;const n=a[s];let l=mt(bt,n.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,n.typeC4Shape.width=(0,i.Un)("\xab"+n.typeC4Shape.text+"\xbb",l),n.typeC4Shape.height=l.fontSize+2,n.typeC4Shape.Y=bt.c4ShapePadding,r=n.typeC4Shape.Y+n.typeC4Shape.height-4,n.image={width:0,height:0,Y:0},n.typeC4Shape.text){case"person":case"external_person":n.image.width=48,n.image.height=48,n.image.Y=r,r=n.image.Y+n.image.height}n.sprite&&(n.image.width=48,n.image.height=48,n.image.Y=r,r=n.image.Y+n.image.height);let o=n.wrap&&bt.wrap,c=bt.width-2*bt.c4ShapePadding,h=mt(bt,n.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",At("label",n,o,h,c),n.label.Y=r+8,r=n.label.Y+n.label.height,n.type&&""!==n.type.text){n.type.text="["+n.type.text+"]",At("type",n,o,mt(bt,n.typeC4Shape.text),c),n.type.Y=r+5,r=n.type.Y+n.type.height}else if(n.techn&&""!==n.techn.text){n.techn.text="["+n.techn.text+"]",At("techn",n,o,mt(bt,n.techn.text),c),n.techn.Y=r+5,r=n.techn.Y+n.techn.height}let d=r,u=n.label.width;if(n.descr&&""!==n.descr.text){At("descr",n,o,mt(bt,n.typeC4Shape.text),c),n.descr.Y=r+20,r=n.descr.Y+n.descr.height,u=Math.max(n.label.width,n.descr.width),d=r-5*n.descr.textLines}u+=bt.c4ShapePadding,n.width=Math.max(n.width||bt.width,u,bt.width),n.height=Math.max(n.height||bt.height,d,bt.height),n.margin=n.margin||bt.c4ShapeMargin,t.insert(n),ut.drawC4Shape(e,n,bt)}t.bumpLastMargin(bt.c4ShapeMargin)},"drawC4ShapeArray"),kt=class{static{(0,r.K2)(this,"Point")}constructor(t,e){this.x=t,this.y=e}},Ot=(0,r.K2)(function(t,e){let a=t.x,n=t.y,i=e.x,r=e.y,s=a+t.width/2,l=n+t.height/2,o=Math.abs(a-i),c=Math.abs(n-r),h=c/o,d=t.height/t.width,u=null;return n==r&&ai?u=new kt(a,l):a==i&&nr&&(u=new kt(s,n)),a>i&&n=h?new kt(a,l+h*t.width/2):new kt(s-o/c*t.height/2,n+t.height):a=h?new kt(a+t.width,l+h*t.width/2):new kt(s+o/c*t.height/2,n+t.height):ar?u=d>=h?new kt(a+t.width,l-h*t.width/2):new kt(s+t.height/2*o/c,n):a>i&&n>r&&(u=d>=h?new kt(a,l-t.width/2*h):new kt(s-t.height/2*o/c,n)),u},"getIntersectPoint"),Tt=(0,r.K2)(function(t,e){let a={x:0,y:0};a.x=e.x+e.width/2,a.y=e.y+e.height/2;let n=Ot(t,a);return a.x=t.x+t.width/2,a.y=t.y+t.height/2,{startPoint:n,endPoint:Ot(e,a)}},"getIntersectPoints"),vt=(0,r.K2)(function(t,e,a,n){let r=0;for(let s of e){r+=1;let t=s.wrap&&bt.wrap,e=St(bt);"C4Dynamic"===n.db.getC4Type()&&(s.label.text=r+": "+s.label.text);let l=(0,i.Un)(s.label.text,e);At("label",s,t,e,l),s.techn&&""!==s.techn.text&&(l=(0,i.Un)(s.techn.text,e),At("techn",s,t,e,l)),s.descr&&""!==s.descr.text&&(l=(0,i.Un)(s.descr.text,e),At("descr",s,t,e,l));let o=a(s.from),c=a(s.to),h=Tt(o,c);s.startPoint=h.startPoint,s.endPoint=h.endPoint}ut.drawRels(t,e,bt)},"drawRels");function Rt(t,e,a,n,i){let r=new xt(i);r.data.widthLimit=a.data.widthLimit/Math.min(ft,n.length);for(let[s,l]of n.entries()){let n=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=n,n=l.image.Y+l.image.height);let o=l.wrap&&bt.wrap,c=Et(bt);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",At("label",l,o,c,r.data.widthLimit),l.label.Y=n+8,n=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",At("type",l,o,Et(bt),r.data.widthLimit),l.type.Y=n+5,n=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=Et(bt);t.fontSize=t.fontSize-2,At("descr",l,o,t,r.data.widthLimit),l.descr.Y=n+20,n=l.descr.Y+l.descr.height}if(0==s||s%ft===0){let t=a.data.startx+bt.diagramMarginX,e=a.data.stopy+bt.diagramMarginY+n;r.setData(t,t,e,e)}else{let t=r.data.stopx!==r.data.startx?r.data.stopx+bt.diagramMarginX:r.data.startx,e=r.data.starty;r.setData(t,t,e,e)}r.name=l.alias;let h=i.db.getC4ShapeArray(l.alias),d=i.db.getC4ShapeKeys(l.alias);d.length>0&&wt(r,t,h,d),e=l.alias;let u=i.db.getBoundaries(e);u.length>0&&Rt(t,e,r,u,i),"global"!==l.alias&&Ct(t,l,r),a.data.stopy=Math.max(r.data.stopy+bt.c4ShapeMargin,a.data.stopy),a.data.stopx=Math.max(r.data.stopx+bt.c4ShapeMargin,a.data.stopx),pt=Math.max(pt,a.data.stopx),yt=Math.max(yt,a.data.stopy)}}(0,r.K2)(Rt,"drawInsideBoundary");var Dt={drawPersonOrSystemArray:wt,drawBoundary:Ct,setConf:_t,draw:(0,r.K2)(function(t,e,a,n){bt=(0,r.D7)().c4;const i=(0,r.D7)().securityLevel;let l;"sandbox"===i&&(l=(0,s.Ltv)("#i"+e));const o="sandbox"===i?(0,s.Ltv)(l.nodes()[0].contentDocument.body):(0,s.Ltv)("body");let c=n.db;n.db.setWrap(bt.wrap),gt=c.getC4ShapeInRow(),ft=c.getC4BoundaryInRow(),r.Rm.debug(`C:${JSON.stringify(bt,null,2)}`);const h="sandbox"===i?o.select(`[id="${e}"]`):(0,s.Ltv)(`[id="${e}"]`);ut.insertComputerIcon(h),ut.insertDatabaseIcon(h),ut.insertClockIcon(h);let d=new xt(n);d.setData(bt.diagramMarginX,bt.diagramMarginX,bt.diagramMarginY,bt.diagramMarginY),d.data.widthLimit=screen.availWidth,pt=bt.diagramMarginX,yt=bt.diagramMarginY;const u=n.db.getTitle();Rt(h,"",d,n.db.getBoundaries(""),n),ut.insertArrowHead(h),ut.insertArrowEnd(h),ut.insertArrowCrossHead(h),ut.insertArrowFilledHead(h),vt(h,n.db.getRels(),n.db.getC4Shape,n),d.data.stopx=pt,d.data.stopy=yt;const p=d.data;let y=p.stopy-p.starty+2*bt.diagramMarginY;const g=p.stopx-p.startx+2*bt.diagramMarginX;u&&h.append("text").text(u).attr("x",(p.stopx-p.startx)/2-4*bt.diagramMarginX).attr("y",p.starty+bt.diagramMarginY),(0,r.a$)(h,y,g,bt.useMaxWidth);const f=u?60:0;h.attr("viewBox",p.startx-bt.diagramMarginX+" -"+(bt.diagramMarginY+f)+" "+g+" "+(y+f)),r.Rm.debug("models:",p)},"draw")},Nt={parser:d,db:V,renderer:Dt,styles:(0,r.K2)(t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,"getStyles"),init:(0,r.K2)(({c4:t,wrap:e})=>{Dt.setConf(t),V.setWrap(e)},"init")}},95237:(t,e,a)=>{a.d(e,{CP:()=>c,HT:()=>d,PB:()=>h,aC:()=>o,lC:()=>s,m:()=>l,tk:()=>r});var n=a(41750),i=a(16750),r=(0,n.K2)((t,e)=>{const a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),e.name&&a.attr("name",e.name),e.rx&&a.attr("rx",e.rx),e.ry&&a.attr("ry",e.ry),void 0!==e.attrs)for(const n in e.attrs)a.attr(n,e.attrs[n]);return e.class&&a.attr("class",e.class),a},"drawRect"),s=(0,n.K2)((t,e)=>{const a={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};r(t,a).lower()},"drawBackgroundRect"),l=(0,n.K2)((t,e)=>{const a=e.text.replace(n.H1," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),e.class&&i.attr("class",e.class);const r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(a),i},"drawText"),o=(0,n.K2)((t,e,a,n)=>{const r=t.append("image");r.attr("x",e),r.attr("y",a);const s=(0,i.J)(n);r.attr("xlink:href",s)},"drawImage"),c=(0,n.K2)((t,e,a,n)=>{const r=t.append("use");r.attr("x",e),r.attr("y",a);const s=(0,i.J)(n);r.attr("xlink:href",`#${s}`)},"drawEmbeddedImage"),h=(0,n.K2)(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),d=(0,n.K2)(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")}}]); \ No newline at end of file diff --git a/assets/js/1067bd84.70ad3d7c.js b/assets/js/1067bd84.70ad3d7c.js new file mode 100644 index 0000000..c1b2b23 --- /dev/null +++ b/assets/js/1067bd84.70ad3d7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4283],{39018:(e,o,t)=>{var s=t(98941);t.o(s,"AccordionItem")&&t.d(o,{AccordionItem:function(){return s.AccordionItem}})},92384:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"learn/faq","title":"Waku FAQ","description":"Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.","source":"@site/docs/learn/faq.md","sourceDirName":"learn","slug":"/learn/faq","permalink":"/learn/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/faq.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Waku FAQ","hide_table_of_contents":true,"sidebar_label":"Frequently Asked Questions","displayed_sidebar":"learn"},"sidebar":"learn","previous":{"title":"Glossary","permalink":"/learn/glossary"}}');var n=t(74848),r=t(28453),a=t(39018);const i={title:"Waku FAQ",hide_table_of_contents:!0,sidebar_label:"Frequently Asked Questions",displayed_sidebar:"learn"},l=void 0,d={},c=[];function u(e){const o={p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.AccordionItem,{title:"How can I start building my application using Waku?",children:(0,n.jsxs)(o.p,{children:["Check out the ",(0,n.jsx)("a",{href:"/",children:"Getting Started"})," guide to explore our numerous SDKs and learn how to run a Waku node."]})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"Does messaging on Waku require a gas fee?",children:(0,n.jsx)(o.p,{children:"No, sending and receiving messages on Waku involves no gas fee."})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"What encryption does Waku use?",children:(0,n.jsx)(o.p,{children:"Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to use custom protocols or Waku message payload encryption methods freely."})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"Where does Waku store the messages?",children:(0,n.jsxs)(o.p,{children:["Waku's ",(0,n.jsx)("a",{href:"/learn/concepts/protocols#store",children:"Store protocol"})," is designed to temporarily store messages within the network. However, Waku does not guarantee the message's availability and recommends using ",(0,n.jsx)("a",{href:"https://codex.storage/",children:"Codex"})," for long-term storage."]})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"Can Waku only be used for wallet-to-wallet messaging?",children:(0,n.jsx)(o.p,{children:"No, Waku is flexible and imposes no specific rules on identifiers."})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"How does Waku differ from IPFS?",children:(0,n.jsx)(o.p,{children:"Waku focuses on short, ephemeral, real-time messages, while IPFS focuses on large, long-term data storage. Although there's an overlap between the two technologies, Waku does not currently support large data for privacy reasons."})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"What are Rate Limiting Nullifiers (RLN)?",children:(0,n.jsxs)(o.p,{children:[(0,n.jsx)("a",{href:"/learn/concepts/protocols#rln-relay",children:"Rate Limiting Nullifier"})," is a zero-knowledge (ZK) protocol enabling spam protection in a decentralized network while preserving privacy. Each message must be accompanied by a ZK proof, which ",(0,n.jsx)("a",{href:"/learn/concepts/protocols#relay",children:"Relay"})," nodes verify to ensure the publishers do not send more messages than they are allowed. The ZK proof does not leak any private information about message publishers - it only proves they are members of a set of users allowed to publish a certain number of messages per given time frame."]})}),"\n",(0,n.jsx)(a.AccordionItem,{title:"How to start a Waku node?",children:(0,n.jsxs)(o.p,{children:["Follow the README instructions at ",(0,n.jsx)("a",{href:"https://docs.waku.org/guides/nwaku/run-node",children:"nwaku-compose"}),"."]})})]})}function h(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}}}]); \ No newline at end of file diff --git a/assets/js/1067bd84.948223b4.js b/assets/js/1067bd84.948223b4.js deleted file mode 100644 index 8815376..0000000 --- a/assets/js/1067bd84.948223b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4283],{39018:(e,o,t)=>{var n=t(98941);t.o(n,"AccordionItem")&&t.d(o,{AccordionItem:function(){return n.AccordionItem}})},92384:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"learn/faq","title":"Waku FAQ","description":"Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.","source":"@site/docs/learn/faq.md","sourceDirName":"learn","slug":"/learn/faq","permalink":"/learn/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/faq.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Waku FAQ","hide_table_of_contents":true,"sidebar_label":"Frequently Asked Questions"},"sidebar":"learn","previous":{"title":"Glossary","permalink":"/learn/glossary"}}');var s=t(74848),r=t(28453),a=t(39018);const i={title:"Waku FAQ",hide_table_of_contents:!0,sidebar_label:"Frequently Asked Questions"},l=void 0,c={},d=[];function u(e){const o={p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.AccordionItem,{title:"How can I start building my application using Waku?",children:(0,s.jsxs)(o.p,{children:["Check out the ",(0,s.jsx)("a",{href:"/",children:"Getting Started"})," guide to explore our numerous SDKs and learn how to run a Waku node."]})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"Does messaging on Waku require a gas fee?",children:(0,s.jsx)(o.p,{children:"No, sending and receiving messages on Waku involves no gas fee."})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"What encryption does Waku use?",children:(0,s.jsx)(o.p,{children:"Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to use custom protocols or Waku message payload encryption methods freely."})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"Where does Waku store the messages?",children:(0,s.jsxs)(o.p,{children:["Waku's ",(0,s.jsx)("a",{href:"/learn/concepts/protocols#store",children:"Store protocol"})," is designed to temporarily store messages within the network. However, Waku does not guarantee the message's availability and recommends using ",(0,s.jsx)("a",{href:"https://codex.storage/",children:"Codex"})," for long-term storage."]})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"Can Waku only be used for wallet-to-wallet messaging?",children:(0,s.jsx)(o.p,{children:"No, Waku is flexible and imposes no specific rules on identifiers."})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"How does Waku differ from IPFS?",children:(0,s.jsx)(o.p,{children:"Waku focuses on short, ephemeral, real-time messages, while IPFS focuses on large, long-term data storage. Although there's an overlap between the two technologies, Waku does not currently support large data for privacy reasons."})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"What are Rate Limiting Nullifiers (RLN)?",children:(0,s.jsxs)(o.p,{children:[(0,s.jsx)("a",{href:"/learn/concepts/protocols#rln-relay",children:"Rate Limiting Nullifier"})," is a zero-knowledge (ZK) protocol enabling spam protection in a decentralized network while preserving privacy. Each message must be accompanied by a ZK proof, which ",(0,s.jsx)("a",{href:"/learn/concepts/protocols#relay",children:"Relay"})," nodes verify to ensure the publishers do not send more messages than they are allowed. The ZK proof does not leak any private information about message publishers - it only proves they are members of a set of users allowed to publish a certain number of messages per given time frame."]})}),"\n",(0,s.jsx)(a.AccordionItem,{title:"How to start a Waku node?",children:(0,s.jsxs)(o.p,{children:["Follow the README instructions at ",(0,s.jsx)("a",{href:"https://docs.waku.org/guides/nwaku/run-node",children:"nwaku-compose"}),"."]})})]})}function h(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}}}]); \ No newline at end of file diff --git a/assets/js/1203.07e3b41f.js b/assets/js/1203.07e3b41f.js new file mode 100644 index 0000000..31d69cf --- /dev/null +++ b/assets/js/1203.07e3b41f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1203],{51203:(t,e,i)=>{i.d(e,{diagram:()=>I});var a=i(67633),n=i(40797),s=i(70451),r=function(){var t=(0,n.K2)(function(t,e,i,a){for(i=i||{},a=t.length;a--;i[t[a]]=e);return i},"o"),e=[1,3],i=[1,4],a=[1,5],s=[1,6],r=[1,7],o=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],h=[55,56,57],c=[2,36],d=[1,37],u=[1,36],x=[1,38],g=[1,35],f=[1,43],p=[1,41],y=[1,14],T=[1,23],m=[1,18],q=[1,19],A=[1,20],_=[1,21],b=[1,22],S=[1,24],k=[1,25],F=[1,26],P=[1,27],C=[1,28],L=[1,29],v=[1,32],I=[1,33],E=[1,34],D=[1,39],z=[1,40],w=[1,42],K=[1,44],U=[1,62],N=[1,61],R=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],B=[1,65],W=[1,66],$=[1,67],Q=[1,68],O=[1,69],X=[1,70],H=[1,71],M=[1,72],Y=[1,73],j=[1,74],G=[1,75],V=[1,76],Z=[4,5,6,7,8,9,10,11,12,13,14,15,18],J=[1,90],tt=[1,91],et=[1,92],it=[1,99],at=[1,93],nt=[1,96],st=[1,94],rt=[1,95],ot=[1,97],lt=[1,98],ht=[1,102],ct=[10,55,56,57],dt=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ut={trace:(0,n.K2)(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:(0,n.K2)(function(t,e,i,a,n,s,r){var o=s.length-1;switch(n){case 23:case 68:this.$=s[o];break;case 24:case 69:this.$=s[o-1]+""+s[o];break;case 26:this.$=s[o-1]+s[o];break;case 27:this.$=[s[o].trim()];break;case 28:s[o-2].push(s[o].trim()),this.$=s[o-2];break;case 29:this.$=s[o-4],a.addClass(s[o-2],s[o]);break;case 37:this.$=[];break;case 42:this.$=s[o].trim(),a.setDiagramTitle(this.$);break;case 43:this.$=s[o].trim(),a.setAccTitle(this.$);break;case 44:case 45:this.$=s[o].trim(),a.setAccDescription(this.$);break;case 46:a.addSection(s[o].substr(8)),this.$=s[o].substr(8);break;case 47:a.addPoint(s[o-3],"",s[o-1],s[o],[]);break;case 48:a.addPoint(s[o-4],s[o-3],s[o-1],s[o],[]);break;case 49:a.addPoint(s[o-4],"",s[o-2],s[o-1],s[o]);break;case 50:a.addPoint(s[o-5],s[o-4],s[o-2],s[o-1],s[o]);break;case 51:a.setXAxisLeftText(s[o-2]),a.setXAxisRightText(s[o]);break;case 52:s[o-1].text+=" \u27f6 ",a.setXAxisLeftText(s[o-1]);break;case 53:a.setXAxisLeftText(s[o]);break;case 54:a.setYAxisBottomText(s[o-2]),a.setYAxisTopText(s[o]);break;case 55:s[o-1].text+=" \u27f6 ",a.setYAxisBottomText(s[o-1]);break;case 56:a.setYAxisBottomText(s[o]);break;case 57:a.setQuadrant1Text(s[o]);break;case 58:a.setQuadrant2Text(s[o]);break;case 59:a.setQuadrant3Text(s[o]);break;case 60:a.setQuadrant4Text(s[o]);break;case 64:case 66:this.$={text:s[o],type:"text"};break;case 65:this.$={text:s[o-1].text+""+s[o],type:s[o-1].type};break;case 67:this.$={text:s[o],type:"markdown"}}},"anonymous"),table:[{18:e,26:1,27:2,28:i,55:a,56:s,57:r},{1:[3]},{18:e,26:8,27:2,28:i,55:a,56:s,57:r},{18:e,26:9,27:2,28:i,55:a,56:s,57:r},t(o,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(h,c,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:d,5:u,10:x,12:g,13:f,14:p,18:y,25:T,35:m,37:q,39:A,41:_,42:b,48:S,50:k,51:F,52:P,53:C,54:L,60:v,61:I,63:E,64:D,65:z,66:w,67:K}),t(o,[2,34]),{27:45,55:a,56:s,57:r},t(h,[2,37]),t(h,c,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:d,5:u,10:x,12:g,13:f,14:p,18:y,25:T,35:m,37:q,39:A,41:_,42:b,48:S,50:k,51:F,52:P,53:C,54:L,60:v,61:I,63:E,64:D,65:z,66:w,67:K}),t(h,[2,39]),t(h,[2,40]),t(h,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(h,[2,45]),t(h,[2,46]),{18:[1,50]},{4:d,5:u,10:x,12:g,13:f,14:p,43:51,58:31,60:v,61:I,63:E,64:D,65:z,66:w,67:K},{4:d,5:u,10:x,12:g,13:f,14:p,43:52,58:31,60:v,61:I,63:E,64:D,65:z,66:w,67:K},{4:d,5:u,10:x,12:g,13:f,14:p,43:53,58:31,60:v,61:I,63:E,64:D,65:z,66:w,67:K},{4:d,5:u,10:x,12:g,13:f,14:p,43:54,58:31,60:v,61:I,63:E,64:D,65:z,66:w,67:K},{4:d,5:u,10:x,12:g,13:f,14:p,43:55,58:31,60:v,61:I,63:E,64:D,65:z,66:w,67:K},{4:d,5:u,10:x,12:g,13:f,14:p,43:56,58:31,60:v,61:I,63:E,64:D,65:z,66:w,67:K},{4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,44:[1,57],47:[1,58],58:60,59:59,63:E,64:D,65:z,66:w,67:K},t(R,[2,64]),t(R,[2,66]),t(R,[2,67]),t(R,[2,70]),t(R,[2,71]),t(R,[2,72]),t(R,[2,73]),t(R,[2,74]),t(R,[2,75]),t(R,[2,76]),t(R,[2,77]),t(R,[2,78]),t(R,[2,79]),t(R,[2,80]),t(o,[2,35]),t(h,[2,38]),t(h,[2,42]),t(h,[2,43]),t(h,[2,44]),{3:64,4:B,5:W,6:$,7:Q,8:O,9:X,10:H,11:M,12:Y,13:j,14:G,15:V,21:63},t(h,[2,53],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,49:[1,77],63:E,64:D,65:z,66:w,67:K}),t(h,[2,56],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,49:[1,78],63:E,64:D,65:z,66:w,67:K}),t(h,[2,57],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,63:E,64:D,65:z,66:w,67:K}),t(h,[2,58],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,63:E,64:D,65:z,66:w,67:K}),t(h,[2,59],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,63:E,64:D,65:z,66:w,67:K}),t(h,[2,60],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,63:E,64:D,65:z,66:w,67:K}),{45:[1,79]},{44:[1,80]},t(R,[2,65]),t(R,[2,81]),t(R,[2,82]),t(R,[2,83]),{3:82,4:B,5:W,6:$,7:Q,8:O,9:X,10:H,11:M,12:Y,13:j,14:G,15:V,18:[1,81]},t(Z,[2,23]),t(Z,[2,1]),t(Z,[2,2]),t(Z,[2,3]),t(Z,[2,4]),t(Z,[2,5]),t(Z,[2,6]),t(Z,[2,7]),t(Z,[2,8]),t(Z,[2,9]),t(Z,[2,10]),t(Z,[2,11]),t(Z,[2,12]),t(h,[2,52],{58:31,43:83,4:d,5:u,10:x,12:g,13:f,14:p,60:v,61:I,63:E,64:D,65:z,66:w,67:K}),t(h,[2,55],{58:31,43:84,4:d,5:u,10:x,12:g,13:f,14:p,60:v,61:I,63:E,64:D,65:z,66:w,67:K}),{46:[1,85]},{45:[1,86]},{4:J,5:tt,6:et,8:it,11:at,13:nt,16:89,17:st,18:rt,19:ot,20:lt,22:88,23:87},t(Z,[2,24]),t(h,[2,51],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,63:E,64:D,65:z,66:w,67:K}),t(h,[2,54],{59:59,58:60,4:d,5:u,8:U,10:x,12:g,13:f,14:p,18:N,63:E,64:D,65:z,66:w,67:K}),t(h,[2,47],{22:88,16:89,23:100,4:J,5:tt,6:et,8:it,11:at,13:nt,17:st,18:rt,19:ot,20:lt}),{46:[1,101]},t(h,[2,29],{10:ht}),t(ct,[2,27],{16:103,4:J,5:tt,6:et,8:it,11:at,13:nt,17:st,18:rt,19:ot,20:lt}),t(dt,[2,25]),t(dt,[2,13]),t(dt,[2,14]),t(dt,[2,15]),t(dt,[2,16]),t(dt,[2,17]),t(dt,[2,18]),t(dt,[2,19]),t(dt,[2,20]),t(dt,[2,21]),t(dt,[2,22]),t(h,[2,49],{10:ht}),t(h,[2,48],{22:88,16:89,23:104,4:J,5:tt,6:et,8:it,11:at,13:nt,17:st,18:rt,19:ot,20:lt}),{4:J,5:tt,6:et,8:it,11:at,13:nt,16:89,17:st,18:rt,19:ot,20:lt,22:105},t(dt,[2,26]),t(h,[2,50],{10:ht}),t(ct,[2,28],{16:103,4:J,5:tt,6:et,8:it,11:at,13:nt,17:st,18:rt,19:ot,20:lt})],defaultActions:{8:[2,30],9:[2,31]},parseError:(0,n.K2)(function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},"parseError"),parse:(0,n.K2)(function(t){var e=this,i=[0],a=[],s=[null],r=[],o=this.table,l="",h=0,c=0,d=0,u=r.slice.call(arguments,1),x=Object.create(this.lexer),g={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(g.yy[f]=this.yy[f]);x.setInput(t,g.yy),g.yy.lexer=x,g.yy.parser=this,void 0===x.yylloc&&(x.yylloc={});var p=x.yylloc;r.push(p);var y=x.options&&x.options.ranges;function T(){var t;return"number"!=typeof(t=a.pop()||x.lex()||1)&&(t instanceof Array&&(t=(a=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,n.K2)(function(t){i.length=i.length-2*t,s.length=s.length-t,r.length=r.length-t},"popStack"),(0,n.K2)(T,"lex");for(var m,q,A,_,b,S,k,F,P,C={};;){if(A=i[i.length-1],this.defaultActions[A]?_=this.defaultActions[A]:(null==m&&(m=T()),_=o[A]&&o[A][m]),void 0===_||!_.length||!_[0]){var L="";for(S in P=[],o[A])this.terminals_[S]&&S>2&&P.push("'"+this.terminals_[S]+"'");L=x.showPosition?"Parse error on line "+(h+1)+":\n"+x.showPosition()+"\nExpecting "+P.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(h+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(L,{text:x.match,token:this.terminals_[m]||m,line:x.yylineno,loc:p,expected:P})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+m);switch(_[0]){case 1:i.push(m),s.push(x.yytext),r.push(x.yylloc),i.push(_[1]),m=null,q?(m=q,q=null):(c=x.yyleng,l=x.yytext,h=x.yylineno,p=x.yylloc,d>0&&d--);break;case 2:if(k=this.productions_[_[1]][1],C.$=s[s.length-k],C._$={first_line:r[r.length-(k||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(k||1)].first_column,last_column:r[r.length-1].last_column},y&&(C._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply(C,[l,c,h,g.yy,_[1],s,r].concat(u))))return b;k&&(i=i.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),i.push(this.productions_[_[1]][0]),s.push(C.$),r.push(C._$),F=o[i[i.length-2]][i[i.length-1]],i.push(F);break;case 3:return!0}}return!0},"parse")},xt=function(){return{EOF:1,parseError:(0,n.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,n.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,n.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,n.K2)(function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===a.length?this.yylloc.first_column:0)+a[a.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,n.K2)(function(){return this._more=!0,this},"more"),reject:(0,n.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,n.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,n.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,n.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,n.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,n.K2)(function(t,e){var i,a,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in n)this[s]=n[s];return!1}return!1},"test_match"),next:(0,n.K2)(function(){if(this.done)return this.EOF;var t,e,i,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),s=0;se[0].length)){if(e=i,a=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,n[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,n.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,n.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,n.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,n.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,n.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,n.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,n.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,n.K2)(function(t,e,i,a){switch(i){case 0:case 1:case 3:break;case 2:return 55;case 4:return this.begin("title"),35;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),37;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),39;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 23:case 25:case 31:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 24:this.begin("string");break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;case 29:return this.begin("point_start"),44;case 30:return this.begin("point_x"),45;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}}}();function gt(){this.yy={}}return ut.lexer=xt,(0,n.K2)(gt,"Parser"),gt.prototype=ut,ut.Parser=gt,new gt}();r.parser=r;var o=r,l=(0,a.P$)(),h=class{constructor(){this.classes=new Map,this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{(0,n.K2)(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:a.UI.quadrantChart?.chartWidth||500,chartWidth:a.UI.quadrantChart?.chartHeight||500,titlePadding:a.UI.quadrantChart?.titlePadding||10,titleFontSize:a.UI.quadrantChart?.titleFontSize||20,quadrantPadding:a.UI.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:a.UI.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:a.UI.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:a.UI.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:a.UI.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:a.UI.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:a.UI.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:a.UI.quadrantChart?.pointTextPadding||5,pointLabelFontSize:a.UI.quadrantChart?.pointLabelFontSize||12,pointRadius:a.UI.quadrantChart?.pointRadius||5,xAxisPosition:a.UI.quadrantChart?.xAxisPosition||"top",yAxisPosition:a.UI.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:a.UI.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:a.UI.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:l.quadrant1Fill,quadrant2Fill:l.quadrant2Fill,quadrant3Fill:l.quadrant3Fill,quadrant4Fill:l.quadrant4Fill,quadrant1TextFill:l.quadrant1TextFill,quadrant2TextFill:l.quadrant2TextFill,quadrant3TextFill:l.quadrant3TextFill,quadrant4TextFill:l.quadrant4TextFill,quadrantPointFill:l.quadrantPointFill,quadrantPointTextFill:l.quadrantPointTextFill,quadrantXAxisTextFill:l.quadrantXAxisTextFill,quadrantYAxisTextFill:l.quadrantYAxisTextFill,quadrantTitleFill:l.quadrantTitleFill,quadrantInternalBorderStrokeFill:l.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:l.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,n.Rm.info("clear called")}setData(t){this.data={...this.data,...t}}addPoints(t){this.data.points=[...t,...this.data.points]}addClass(t,e){this.classes.set(t,e)}setConfig(t){n.Rm.trace("setConfig called with: ",t),this.config={...this.config,...t}}setThemeConfig(t){n.Rm.trace("setThemeConfig called with: ",t),this.themeConfig={...this.themeConfig,...t}}calculateSpace(t,e,i,a){const n=2*this.config.xAxisLabelPadding+this.config.xAxisLabelFontSize,s={top:"top"===t&&e?n:0,bottom:"bottom"===t&&e?n:0},r=2*this.config.yAxisLabelPadding+this.config.yAxisLabelFontSize,o={left:"left"===this.config.yAxisPosition&&i?r:0,right:"right"===this.config.yAxisPosition&&i?r:0},l=this.config.titleFontSize+2*this.config.titlePadding,h={top:a?l:0},c=this.config.quadrantPadding+o.left,d=this.config.quadrantPadding+s.top+h.top,u=this.config.chartWidth-2*this.config.quadrantPadding-o.left-o.right,x=this.config.chartHeight-2*this.config.quadrantPadding-s.top-s.bottom-h.top;return{xAxisSpace:s,yAxisSpace:o,titleSpace:h,quadrantSpace:{quadrantLeft:c,quadrantTop:d,quadrantWidth:u,quadrantHalfWidth:u/2,quadrantHeight:x,quadrantHalfHeight:x/2}}}getAxisLabels(t,e,i,a){const{quadrantSpace:n,titleSpace:s}=a,{quadrantHalfHeight:r,quadrantHeight:o,quadrantLeft:l,quadrantHalfWidth:h,quadrantTop:c,quadrantWidth:d}=n,u=Boolean(this.data.xAxisRightText),x=Boolean(this.data.yAxisTopText),g=[];return this.data.xAxisLeftText&&e&&g.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:l+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+c+o+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&e&&g.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:l+h+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+c+o+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&i&&g.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+l+d+this.config.quadrantPadding,y:c+o-(x?r/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&i&&g.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+l+d+this.config.quadrantPadding,y:c+r-(x?r/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),g}getQuadrants(t){const{quadrantSpace:e}=t,{quadrantHalfHeight:i,quadrantLeft:a,quadrantHalfWidth:n,quadrantTop:s}=e,r=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:s,width:n,height:i,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:s,width:n,height:i,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:s+i,width:n,height:i,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:s+i,width:n,height:i,fill:this.themeConfig.quadrant4Fill}];for(const o of r)o.text.x=o.x+o.width/2,0===this.data.points.length?(o.text.y=o.y+o.height/2,o.text.horizontalPos="middle"):(o.text.y=o.y+this.config.quadrantTextTopPadding,o.text.horizontalPos="top");return r}getQuadrantPoints(t){const{quadrantSpace:e}=t,{quadrantHeight:i,quadrantLeft:a,quadrantTop:n,quadrantWidth:r}=e,o=(0,s.m4Y)().domain([0,1]).range([a,r+a]),l=(0,s.m4Y)().domain([0,1]).range([i+n,n]);return this.data.points.map(t=>{const e=this.classes.get(t.className);e&&(t={...e,...t});return{x:o(t.x),y:l(t.y),fill:t.color??this.themeConfig.quadrantPointFill,radius:t.radius??this.config.pointRadius,text:{text:t.text,fill:this.themeConfig.quadrantPointTextFill,x:o(t.x),y:l(t.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:t.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:t.strokeWidth??"0px"}})}getBorders(t){const e=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:i}=t,{quadrantHalfHeight:a,quadrantHeight:n,quadrantLeft:s,quadrantHalfWidth:r,quadrantTop:o,quadrantWidth:l}=i;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-e,y1:o,x2:s+l+e,y2:o},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+l,y1:o+e,x2:s+l,y2:o+n-e},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-e,y1:o+n,x2:s+l+e,y2:o+n},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:o+e,x2:s,y2:o+n-e},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:o+e,x2:s+r,y2:o+n-e},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+e,y1:o+a,x2:s+l-e,y2:o+a}]}getTitle(t){if(t)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const t=this.config.showXAxis&&!(!this.data.xAxisLeftText&&!this.data.xAxisRightText),e=this.config.showYAxis&&!(!this.data.yAxisTopText&&!this.data.yAxisBottomText),i=this.config.showTitle&&!!this.data.titleText,a=this.data.points.length>0?"bottom":this.config.xAxisPosition,n=this.calculateSpace(a,t,e,i);return{points:this.getQuadrantPoints(n),quadrants:this.getQuadrants(n),axisLabels:this.getAxisLabels(a,t,e,n),borderLines:this.getBorders(n),title:this.getTitle(i)}}},c=class extends Error{static{(0,n.K2)(this,"InvalidStyleError")}constructor(t,e,i){super(`value for ${t} ${e} is invalid, please use a valid ${i}`),this.name="InvalidStyleError"}};function d(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function u(t){return!/^\d+$/.test(t)}function x(t){return!/^\d+px$/.test(t)}(0,n.K2)(d,"validateHexCode"),(0,n.K2)(u,"validateNumber"),(0,n.K2)(x,"validateSizeInPixels");var g=(0,a.D7)();function f(t){return(0,a.jZ)(t.trim(),g)}(0,n.K2)(f,"textSanitizer");var p=new h;function y(t){p.setData({quadrant1Text:f(t.text)})}function T(t){p.setData({quadrant2Text:f(t.text)})}function m(t){p.setData({quadrant3Text:f(t.text)})}function q(t){p.setData({quadrant4Text:f(t.text)})}function A(t){p.setData({xAxisLeftText:f(t.text)})}function _(t){p.setData({xAxisRightText:f(t.text)})}function b(t){p.setData({yAxisTopText:f(t.text)})}function S(t){p.setData({yAxisBottomText:f(t.text)})}function k(t){const e={};for(const i of t){const[t,a]=i.trim().split(/\s*:\s*/);if("radius"===t){if(u(a))throw new c(t,a,"number");e.radius=parseInt(a)}else if("color"===t){if(d(a))throw new c(t,a,"hex code");e.color=a}else if("stroke-color"===t){if(d(a))throw new c(t,a,"hex code");e.strokeColor=a}else{if("stroke-width"!==t)throw new Error(`style named ${t} is not supported.`);if(x(a))throw new c(t,a,"number of pixels (eg. 10px)");e.strokeWidth=a}}return e}function F(t,e,i,a,n){const s=k(n);p.addPoints([{x:i,y:a,text:f(t.text),className:e,...s}])}function P(t,e){p.addClass(t,k(e))}function C(t){p.setConfig({chartWidth:t})}function L(t){p.setConfig({chartHeight:t})}function v(){const t=(0,a.D7)(),{themeVariables:e,quadrantChart:i}=t;return i&&p.setConfig(i),p.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),p.setData({titleText:(0,a.ab)()}),p.build()}(0,n.K2)(y,"setQuadrant1Text"),(0,n.K2)(T,"setQuadrant2Text"),(0,n.K2)(m,"setQuadrant3Text"),(0,n.K2)(q,"setQuadrant4Text"),(0,n.K2)(A,"setXAxisLeftText"),(0,n.K2)(_,"setXAxisRightText"),(0,n.K2)(b,"setYAxisTopText"),(0,n.K2)(S,"setYAxisBottomText"),(0,n.K2)(k,"parseStyles"),(0,n.K2)(F,"addPoint"),(0,n.K2)(P,"addClass"),(0,n.K2)(C,"setWidth"),(0,n.K2)(L,"setHeight"),(0,n.K2)(v,"getQuadrantData");var I={parser:o,db:{setWidth:C,setHeight:L,setQuadrant1Text:y,setQuadrant2Text:T,setQuadrant3Text:m,setQuadrant4Text:q,setXAxisLeftText:A,setXAxisRightText:_,setYAxisTopText:b,setYAxisBottomText:S,parseStyles:k,addPoint:F,addClass:P,getQuadrantData:v,clear:(0,n.K2)(function(){p.clear(),(0,a.IU)()},"clear"),setAccTitle:a.SV,getAccTitle:a.iN,setDiagramTitle:a.ke,getDiagramTitle:a.ab,getAccDescription:a.m7,setAccDescription:a.EI},renderer:{draw:(0,n.K2)((t,e,i,r)=>{function o(t){return"top"===t?"hanging":"middle"}function l(t){return"left"===t?"start":"middle"}function h(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}(0,n.K2)(o,"getDominantBaseLine"),(0,n.K2)(l,"getTextAnchor"),(0,n.K2)(h,"getTransformation");const c=(0,a.D7)();n.Rm.debug("Rendering quadrant chart\n"+t);const d=c.securityLevel;let u;"sandbox"===d&&(u=(0,s.Ltv)("#i"+e));const x=("sandbox"===d?(0,s.Ltv)(u.nodes()[0].contentDocument.body):(0,s.Ltv)("body")).select(`[id="${e}"]`),g=x.append("g").attr("class","main"),f=c.quadrantChart?.chartWidth??500,p=c.quadrantChart?.chartHeight??500;(0,a.a$)(x,p,f,c.quadrantChart?.useMaxWidth??!0),x.attr("viewBox","0 0 "+f+" "+p),r.db.setHeight(p),r.db.setWidth(f);const y=r.db.getQuadrantData(),T=g.append("g").attr("class","quadrants"),m=g.append("g").attr("class","border"),q=g.append("g").attr("class","data-points"),A=g.append("g").attr("class","labels"),_=g.append("g").attr("class","title");y.title&&_.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",o(y.title.horizontalPos)).attr("text-anchor",l(y.title.verticalPos)).attr("transform",h(y.title)).text(y.title.text),y.borderLines&&m.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",t=>t.x1).attr("y1",t=>t.y1).attr("x2",t=>t.x2).attr("y2",t=>t.y2).style("stroke",t=>t.strokeFill).style("stroke-width",t=>t.strokeWidth);const b=T.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");b.append("rect").attr("x",t=>t.x).attr("y",t=>t.y).attr("width",t=>t.width).attr("height",t=>t.height).attr("fill",t=>t.fill),b.append("text").attr("x",0).attr("y",0).attr("fill",t=>t.text.fill).attr("font-size",t=>t.text.fontSize).attr("dominant-baseline",t=>o(t.text.horizontalPos)).attr("text-anchor",t=>l(t.text.verticalPos)).attr("transform",t=>h(t.text)).text(t=>t.text.text);A.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(t=>t.text).attr("fill",t=>t.fill).attr("font-size",t=>t.fontSize).attr("dominant-baseline",t=>o(t.horizontalPos)).attr("text-anchor",t=>l(t.verticalPos)).attr("transform",t=>h(t));const S=q.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");S.append("circle").attr("cx",t=>t.x).attr("cy",t=>t.y).attr("r",t=>t.radius).attr("fill",t=>t.fill).attr("stroke",t=>t.strokeColor).attr("stroke-width",t=>t.strokeWidth),S.append("text").attr("x",0).attr("y",0).text(t=>t.text.text).attr("fill",t=>t.text.fill).attr("font-size",t=>t.text.fontSize).attr("dominant-baseline",t=>o(t.text.horizontalPos)).attr("text-anchor",t=>l(t.text.verticalPos)).attr("transform",t=>h(t.text))},"draw")},styles:(0,n.K2)(()=>"","styles")}}}]); \ No newline at end of file diff --git a/assets/js/1236ce69.5eb3a6b6.js b/assets/js/1236ce69.5eb3a6b6.js deleted file mode 100644 index 73ebc50..0000000 --- a/assets/js/1236ce69.5eb3a6b6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[158],{16360:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/connected-peers-50221f227e3d94be5aeae45193cc04ea.png"},21451:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"research/research-and-studies/rln-key-benchmarks","title":"RLN Key Benchmarks","description":"Introduction","source":"@site/docs/research/research-and-studies/rln-key-benchmarks.md","sourceDirName":"research/research-and-studies","slug":"/research/research-and-studies/rln-key-benchmarks","permalink":"/research/research-and-studies/rln-key-benchmarks","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/research/research-and-studies/rln-key-benchmarks.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"RLN Key Benchmarks"},"sidebar":"research","previous":{"title":"Message Propagation Times With Waku-RLN","permalink":"/research/research-and-studies/message-propagation"}}');var t=s(74848),r=s(28453);const a={title:"RLN Key Benchmarks"},o=void 0,c={},l=[{value:"Introduction",id:"introduction",level:2},{value:"TLDR:",id:"tldr",level:2},{value:"Proof generation times",id:"proof-generation-times",level:2},{value:"Proof verification times",id:"proof-verification-times",level:2},{value:"Spam protection",id:"spam-protection",level:2},{value:"RLN tree sync",id:"rln-tree-sync",level:2},{value:"Performance relay vs. rln-relay",id:"performance-relay-vs-rln-relay",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsxs)(n.p,{children:["Since RLN has been chosen as the spamming protection mechanism for waku, we must understand the practical implications of using it. This issue explains the main differences between ",(0,t.jsx)(n.code,{children:"relay"})," and ",(0,t.jsx)(n.code,{children:"rln-relay"})," and gives some benchmarks after running simulations using ",(0,t.jsx)(n.code,{children:"waku-simulator"}),", in a network with the following characteristics:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"100 nwaku nodes, each one with a valid rln membership and publishing a message every 10 seconds to a common topic."}),"\n",(0,t.jsx)(n.li,{children:"rln contract deployed in Ethereum Sepolia"}),"\n",(0,t.jsx)(n.li,{children:"10.000 memberships registered in the contract"}),"\n",(0,t.jsx)(n.li,{children:"pure relay (store and light protocols disabled)"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The main deltas ",(0,t.jsx)(n.code,{children:"rln"})," vs ",(0,t.jsx)(n.code,{children:"rln-relay"})," are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["New ",(0,t.jsx)(n.code,{children:"proof "})," field in ",(0,t.jsx)(n.code,{children:"WakuMessage"})," containing 384 extra bytes. This field must be generated and attached to each message."]}),"\n",(0,t.jsxs)(n.li,{children:["New validator, that uses ",(0,t.jsx)(n.code,{children:"proof"})," to ",(0,t.jsx)(n.code,{children:"Accept"})," or ",(0,t.jsx)(n.code,{children:"Reject"})," the message. The proof has to be verified."]}),"\n",(0,t.jsx)(n.li,{children:"New dependency on a blockchain, Ethereum, or any EVM chain, to keep track of the members allowed to publish."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"But what are the practical implications of these?"}),"\n",(0,t.jsx)(n.h2,{id:"tldr",children:"TLDR:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Proof generation is constant-ish. 0.15 second for each proof"}),"\n",(0,t.jsx)(n.li,{children:"Proof verification is constant-ish, 0.012 seconds. In a network with 10k nodes and D=6 this would add an overhead delay of 0.06 seconds."}),"\n",(0,t.jsx)(n.li,{children:"Gossipsub scoring drops connections from spammer peers, which acts as the punishment (instead of slashing). Validated in the simulation."}),"\n",(0,t.jsx)(n.li,{children:"Rln doesn't have any impact on memory consumption."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"proof-generation-times",children:"Proof generation times"}),"\n",(0,t.jsxs)(n.p,{children:["Seems that proof generation times stay constant no matter the size of the message. In the following simulation it was increased from: ",(0,t.jsx)(n.code,{children:"1kB"}),", ",(0,t.jsx)(n.code,{children:"10kB"}),", ",(0,t.jsx)(n.code,{children:"50kB"}),", ",(0,t.jsx)(n.code,{children:"150kB"}),". On average it takes ",(0,t.jsx)(n.code,{children:"0.15 seconds"})," to calculate the message proof. This means that when a node wants to send a message, it will need to spend this time generating the proof. It seems very reasonable and it actually acts as a mini proof of work, where a consumer computer won't be able to publish a really high number of messages per second."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"proof-generation-times",src:s(74405).A+"",width:"1547",height:"1096"})}),"\n",(0,t.jsx)(n.h2,{id:"proof-verification-times",children:"Proof verification times"}),"\n",(0,t.jsxs)(n.p,{children:["On the other hand, rln also adds an overhead in the gossipsub validation process. On average it takes ",(0,t.jsx)(n.code,{children:"0.012 seconds"})," to verify the proof. It seems that when we increase the message size, validation time seems to increase a bit, which can be for any other reason besides rln itself (eg deserializing the message might take longer)."]}),"\n",(0,t.jsxs)(n.p,{children:["This number seems reasonable and shouldn't affect that much the average delay of a message. Assuming a d-regular graph, with ",(0,t.jsx)(n.code,{children:"10k"})," nodes and ",(0,t.jsx)(n.code,{children:"D=6"}),", we can have up to ",(0,t.jsx)(n.code,{children:"log(total_nodes)/log(D)=5"})," hops. So in the worst case, rln will add a network latency of ",(0,t.jsx)(n.code,{children:"0.012*5 = 0.06 seconds"})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"proof-verification-times",src:s(32194).A+"",width:"1564",height:"1214"})}),"\n",(0,t.jsx)(n.h2,{id:"spam-protection",children:"Spam protection"}),"\n",(0,t.jsx)(n.p,{children:"For the initial release of RLN, slashing won't be implemented and it still remains unclear if it will be implemented in the future. Luckily, even if slashing is not implemented rln can be used to detect spam and punish the sender off-chain (instead of slashing an onchain collateral). This is done with gossipsub scoring."}),"\n",(0,t.jsxs)(n.p,{children:["In the following simulation, we can see ",(0,t.jsx)(n.code,{children:"100"})," nwaku interconnected nodes, where one of them suddenly starts spamming the network with multiple valid rln messages ",(0,t.jsx)(n.code,{children:"3000 messages/minute"}),". Since its rate limited to 1msg/10 seconds, we can see that in almost no time, every node in the network disconnects from the spammer peer (see red node), leaving it with ",(0,t.jsx)(n.code,{children:"0 peers"}),", which disincentivise such attacks and without requiring a financial slashing."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"connected-peers",src:s(16360).A+"",width:"1574",height:"1108"})}),"\n",(0,t.jsx)(n.h2,{id:"rln-tree-sync",children:"RLN tree sync"}),"\n",(0,t.jsx)(n.p,{children:"Using RLN implies that waku should now piggyback on a blockchain (the case study uses Ethereum Sepolia) and has to stay up to date with the latest events emitted by the rln smart contract. These events are used to locally construct a tree that contains all members allowed to create valid proofs to send messages. Some numbers:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A tree with 10k members takes ",(0,t.jsx)(n.code,{children:"2Mbytes"})," of space. Negligible."]}),"\n",(0,t.jsxs)(n.li,{children:["A tree with 10k members takes ",(0,t.jsx)(n.code,{children:"<4"})," minutes to synchronize. Assumable since it's done just once."]}),"\n",(0,t.jsxs)(n.li,{children:["With a block range of 5000 blocks for each request, we would need ",(0,t.jsx)(n.code,{children:"520 requests"})," to synchronize 1 year of historical data from the tree. Assumable since most of the free endpoints out there allow 100k/day."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"performance-relay-vs-rln-relay",children:"Performance relay vs. rln-relay"}),"\n",(0,t.jsxs)(n.p,{children:["Same simulation with 100 nodes was executed ",(0,t.jsx)(n.code,{children:"with rln"})," and ",(0,t.jsx)(n.code,{children:"without rln"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Memory consumption is almost identical"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"with rln"}),"\n",(0,t.jsx)(n.img,{alt:"with-rln",src:s(31994).A+"",width:"3000",height:"1180"})]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"without rln"}),"\n",(0,t.jsx)(n.img,{alt:"without-rln",src:s(70950).A+"",width:"2988",height:"1180"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Couldn't capture cpu metrics"}),"\n",(0,t.jsx)(n.li,{children:"Minor differences in messages per seconds is due to injection technique, nothing related to rln itself."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>o});var i=s(96540);const t={},r=i.createContext(t);function a(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},31994:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/with-rln-65a7cb7bd5c4469c66ca32316d38e320.png"},32194:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/proof-verification-times-c95708ef2a4fc0470114fbceebc6bc30.png"},70950:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/without-rln-8c4f5d9f060feccbadb651f77e9750ca.png"},74405:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/proof-generation-times-195632e4864fa4c5f883895f2ea9e9e3.png"}}]); \ No newline at end of file diff --git a/assets/js/165.6a8a8b13.js b/assets/js/165.6a8a8b13.js deleted file mode 100644 index a3406f2..0000000 --- a/assets/js/165.6a8a8b13.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 165.6a8a8b13.js.LICENSE.txt */ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[165],{90165:(e,t,n)=>{function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function s(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,s=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||h(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function h(e,t){if(e){if("string"==typeof e)return r(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}n.d(t,{A:()=>Hh});var f="undefined"==typeof window?null:window,p=f?f.navigator:null;f&&f.document;var v,g,y,m,b,x,w,E,k,T,C,P,S,B,D,_,A,M,R,I,N,L,z,O,V,F,j,X,q=d(""),Y=d({}),W=d(function(){}),U="undefined"==typeof HTMLElement?"undefined":d(HTMLElement),H=function(e){return e&&e.instanceString&&G(e.instanceString)?e.instanceString():null},K=function(e){return null!=e&&d(e)==q},G=function(e){return null!=e&&d(e)===W},Z=function(e){return!ee(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},$=function(e){return null!=e&&d(e)===Y&&!Z(e)&&e.constructor===Object},Q=function(e){return null!=e&&d(e)===d(1)&&!isNaN(e)},J=function(e){return"undefined"===U?void 0:null!=e&&e instanceof HTMLElement},ee=function(e){return te(e)||ne(e)},te=function(e){return"collection"===H(e)&&e._private.single},ne=function(e){return"collection"===H(e)&&!e._private.single},re=function(e){return"core"===H(e)},ae=function(e){return"stylesheet"===H(e)},ie=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},oe=function(e){return function(e){return null!=e&&d(e)===Y}(e)&&G(e.then)},se=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;tt?1:0},be=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(i))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,a,i,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+ge+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(a=parseFloat(c[3]))<0||a>100)return;if(a/=100,void 0!==(i=c[4])&&((i=parseFloat(i))<0||i>1))return;if(0===r)o=s=l=Math.round(255*a);else{var d=a<.5?a*(1+r):a+r-a*r,h=2*a-d;o=Math.round(255*u(h,d,n+1/3)),s=Math.round(255*u(h,d,n)),l=Math.round(255*u(h,d,n-1/3))}t=[o,s,l,i]}return t}(e)},we={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ee=function(e){for(var t=e.map,n=e.keys,r=n.length,a=0;a=o||t<0||g&&e-p>=c}function x(){var e=t();if(b(e))return w(e);h=setTimeout(x,function(e){var t=o-(e-f);return g?a(t,c-(e-p)):t}(e))}function w(e){return h=void 0,y&&l?m(e):(l=u=void 0,d)}function E(){var e=t(),n=b(e);if(l=arguments,u=this,f=e,n){if(void 0===h)return function(e){return p=e,h=setTimeout(x,o),v?m(e):d}(f);if(g)return clearTimeout(h),h=setTimeout(x,o),m(f)}return void 0===h&&(h=setTimeout(x,o)),d}return o=n(o)||0,e(s)&&(v=!!s.leading,c=(g="maxWait"in s)?r(n(s.maxWait)||0,o):c,y="trailing"in s?!!s.trailing:y),E.cancel=function(){void 0!==h&&clearTimeout(h),p=0,l=f=u=h=void 0},E.flush=function(){return void 0===h?d:w(t())},E}}()),Re=f?f.performance:null,Ie=Re&&Re.now?function(){return Re.now()}:function(){return Date.now()},Ne=function(){if(f){if(f.requestAnimationFrame)return function(e){f.requestAnimationFrame(e)};if(f.mozRequestAnimationFrame)return function(e){f.mozRequestAnimationFrame(e)};if(f.webkitRequestAnimationFrame)return function(e){f.webkitRequestAnimationFrame(e)};if(f.msRequestAnimationFrame)return function(e){f.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout(function(){e(Ie())},1e3/60)}}(),Le=function(e){return Ne(e)},ze=Ie,Oe=9261,Ve=5381,Fe=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Oe;!(t=e.next()).done;)n=65599*n+t.value|0;return n},je=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:Oe)+e|0},Xe=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ve;return(t<<5)+t+e|0},qe=function(e){return 2097152*e[0]+e[1]},Ye=function(e,t){return[je(e[0],t[0]),Xe(e[1],t[1])]},We=function(e,t){var n={value:0,done:!1},r=0,a=e.length;return Fe({next:function(){return r=0;r--)e[r]===t&&e.splice(r,1)},ht=function(e){e.splice(0,e.length)},ft=function(e,t,n){return n&&(t=ce(n,t)),e[t]},pt=function(e,t,n,r){n&&(t=ce(n,t)),e[t]=r},vt="undefined"!=typeof Map?Map:function(){return i(function e(){a(this,e),this._obj={}},[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}])}(),gt=function(){return i(function e(t){if(a(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&re(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new yt,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==a.position.x&&(a.position.x=0),null==a.position.y&&(a.position.y=0),t.renderedPosition){var i=t.renderedPosition,o=e.pan(),s=e.zoom();a.position={x:(i.x-o.x)/s,y:(i.y-o.y)/s}}var l=[];Z(t.classes)?l=t.classes:K(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;ut?1:0},u=function(e,t,a,i,o){var s;if(null==a&&(a=0),null==o&&(o=n),a<0)throw new Error("lo must be non-negative");for(null==i&&(i=e.length);an;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;iv;0<=v?++h:--h)g.push(i(e,r));return g},p=function(e,t,r,a){var i,o,s;for(null==a&&(a=n),i=e[r];r>t&&a(i,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=i},v=function(e,t,r){var a,i,o,s,l;for(null==r&&(r=n),i=e.length,l=t,o=e[t],a=2*t+1;a0;){var w=y.pop(),E=v(w),k=w.id();if(d[k]=E,E!==1/0)for(var T=w.neighborhood().intersect(f),C=0;C0)for(n.unshift(t);c[a];){var i=c[a];n.unshift(i.edge),n.unshift(i.node),a=(r=i.node).id()}return o.spawn(n)}}}},At={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,a=n.length,i=new Array(a),o=n,s=function(e){for(var t=0;t0;){if(x(),E++,u===d){for(var k=[],T=a,C=d,P=m[C];k.unshift(T),null!=P&&k.unshift(P),null!=(T=y[C]);)P=m[C=T.id()];return{found:!0,distance:h[u],path:this.spawn(k),steps:E}}p[u]=!0;for(var S=l._private.edges,B=0;BP&&(f[C]=P,y[C]=T,m[C]=x),!a){var S=T*u+k;!a&&f[S]>P&&(f[S]=P,y[S]=k,m[S]=x)}}}for(var B=0;B1&&void 0!==arguments[1]?arguments[1]:i,r=[],a=m(e);;){if(null==a)return t.spawn();var o=y(a),l=o.edge,u=o.pred;if(r.unshift(a[0]),a.same(n)&&r.length>0)break;null!=l&&r.unshift(l),a=u}return s.spawn(r)},hasNegativeWeightCycle:p,negativeWeightCycles:v}}},Ot=Math.sqrt(2),Vt=function(e,t,n){0===n.length&&rt("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],a=r[1],i=r[2],o=t[a],s=t[i],l=n,u=l.length-1;u>=0;u--){var c=l[u],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&l.splice(u,1)}for(var f=0;fr;){var a=Math.floor(Math.random()*t.length);t=Vt(a,e,t),n--}return t},jt={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy(function(e){return e.isLoop()});var a=n.length,i=r.length,o=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),s=Math.floor(a/Ot);if(!(a<2)){for(var l=[],u=0;u0?1:e<0?-1:0},Kt=function(e,t){return Math.sqrt(Gt(e,t))},Gt=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},Zt=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},tn=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},nn=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},rn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},an=function(e){var t,n,r,a,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===i.length)t=n=r=a=i[0];else if(2===i.length)t=r=i[0],a=n=i[1];else if(4===i.length){var o=l(i,4);t=o[0],n=o[1],r=o[2],a=o[3]}return e.x1-=a,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},on=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},sn=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},ln=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},un=function(e,t){return ln(e,t.x,t.y)},cn=function(e,t){return ln(e,t.x1,t.y1)&&ln(e,t.x2,t.y2)},dn=null!==(St=Math.hypot)&&void 0!==St?St:function(e,t){return Math.sqrt(e*e+t*t)};function hn(e,t,n,r,a,i){var o=function(e,t){if(e.length<3)throw new Error("Need at least 3 vertices");var n=function(e,t){return{x:e.x+t.x,y:e.y+t.y}},r=function(e,t){return{x:e.x-t.x,y:e.y-t.y}},a=function(e,t){return{x:e.x*t,y:e.y*t}},i=function(e,t){return e.x*t.y-e.y*t.x},o=function(e){var t=dn(e.x,e.y);return 0===t?{x:0,y:0}:{x:e.x/t,y:e.y/t}},s=function(e,t,o,s){var l=r(t,e),u=r(s,o),c=i(l,u);if(Math.abs(c)<1e-9)return n(e,a(l,.5));var d=i(r(o,e),u)/c;return n(e,a(l,d))},l=e.map(function(e){return{x:e.x,y:e.y}});(function(e){for(var t=0,n=0;n7&&void 0!==arguments[7]?arguments[7]:"auto",c="auto"===u?Mn(a,i):u,d=a/2,h=i/2,f=(c=Math.min(c,d,h))!==d,p=c!==h;if(f){var v=r-h-o;if((s=Cn(e,t,n,r,n-d+c-o,v,n+d-c+o,v,!1)).length>0)return s}if(p){var g=n+d+o;if((s=Cn(e,t,n,r,g,r-h+c-o,g,r+h-c+o,!1)).length>0)return s}if(f){var y=r+h+o;if((s=Cn(e,t,n,r,n-d+c-o,y,n+d-c+o,y,!1)).length>0)return s}if(p){var m=n-d-o;if((s=Cn(e,t,n,r,m,r-h+c-o,m,r+h-c+o,!1)).length>0)return s}var b=n-d+c,x=r-h+c;if((l=kn(e,t,n,r,b,x,c+o)).length>0&&l[0]<=b&&l[1]<=x)return[l[0],l[1]];var w=n+d-c,E=r-h+c;if((l=kn(e,t,n,r,w,E,c+o)).length>0&&l[0]>=w&&l[1]<=E)return[l[0],l[1]];var k=n+d-c,T=r+h-c;if((l=kn(e,t,n,r,k,T,c+o)).length>0&&l[0]>=k&&l[1]>=T)return[l[0],l[1]];var C=n-d+c,P=r+h-c;return(l=kn(e,t,n,r,C,P,c+o)).length>0&&l[0]<=C&&l[1]>=P?[l[0],l[1]]:[]},pn=function(e,t,n,r,a,i,o){var s=o,l=Math.min(n,a),u=Math.max(n,a),c=Math.min(r,i),d=Math.max(r,i);return l-s<=e&&e<=u+s&&c-s<=t&&t<=d+s},vn=function(e,t,n,r,a,i,o,s,l){var u=Math.min(n,o,a)-l,c=Math.max(n,o,a)+l,d=Math.min(r,s,i)-l,h=Math.max(r,s,i)+l;return!(ec||th)},gn=function(e,t,n,r,a,i,o,s){var l=[];!function(e,t,n,r,a){var i,o,s,l,u,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),i=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,a[1]=0,d=t/3,i>0?(u=(u=s+Math.sqrt(i))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(i))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),a[0]=-d+u+c,d+=(u+c)/2,a[4]=a[2]=-d,d=Math.sqrt(3)*(-c+u)/2,a[3]=d,a[5]=-d):(a[5]=a[3]=0,0===i?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),a[0]=2*h-d,a[4]=a[2]=-(h+d)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),h=2*Math.sqrt(o),a[0]=-d+h*Math.cos(l/3),a[2]=-d+h*Math.cos((l+2*Math.PI)/3),a[4]=-d+h*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*a+2*n*o+4*a*a-4*a*o+o*o+r*r-4*r*i+2*r*s+4*i*i-4*i*s+s*s,9*n*a-3*n*n-3*n*o-6*a*a+3*a*o+9*r*i-3*r*r-3*r*s-6*i*i+3*i*s,3*n*n-6*n*a+n*o-n*e+2*a*a+2*a*e-o*e+3*r*r-6*r*i+r*s-r*t+2*i*i+2*i*t-s*t,1*n*a-n*n+n*e-a*e+r*i-r*r+r*t-i*t,l);for(var u=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var d,h,f,p=-1,v=0;v=0?fl?(e-a)*(e-a)+(t-i)*(t-i):u-d},mn=function(e,t,n){for(var r,a,i,o,s=0,l=0;l=e&&e>=i||r<=e&&e<=i))continue;(e-r)/(i-r)*(o-a)+a>t&&s++}return s%2!=0},bn=function(e,t,n,r,a,i,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var d,h=Math.cos(-u),f=Math.sin(-u),p=0;p0){var v=wn(c,-l);d=xn(v)}else d=c;return mn(e,t,d)},xn=function(e){for(var t,n,r,a,i,o,s,l,u=new Array(e.length/2),c=0;c=0&&p<=1&&g.push(p),v>=0&&v<=1&&g.push(v),0===g.length)return[];var y=g[0]*s[0]+e,m=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[y,m]:[y,m,g[1]*s[0]+e,g[1]*s[1]+t]:[y,m]},Tn=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Cn=function(e,t,n,r,a,i,o,s,l){var u=e-a,c=n-e,d=o-a,h=t-i,f=r-t,p=s-i,v=d*h-p*u,g=c*h-f*u,y=p*c-d*f;if(0!==y){var m=v/y,b=g/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*f]:[]}return 0===v||0===g?Tn(e,n,o)===o?[o,s]:Tn(e,n,a)===a?[a,i]:Tn(a,o,n)===n?[n,r]:[]:[]},Pn=function(e,t,n,r,a){var i=[],o=r/2,s=a/2,l=t,u=n;i.push({x:l+o*e[0],y:u+s*e[1]});for(var c=1;c0){var m=wn(v,-s);u=xn(m)}else u=v}else u=n;for(var b=0;bu&&(u=t)},d=function(e){return l[e]},h=0;h0?b.edgesTo(m)[0]:m.edgesTo(b)[0];var w=r(x);m=m.id(),u[m]>u[v]+w&&(u[m]=u[v]+w,h.nodes.indexOf(m)<0?h.push(m):h.updateItem(m),l[m]=0,n[m]=[]),u[m]==u[v]+w&&(l[m]=l[m]+l[v],n[m].push(v))}else for(var E=0;E0;){for(var P=t.pop(),S=0;S0&&o.push(n[s]);0!==o.length&&a.push(r.collection(o))}return a}(c,l,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:er,o=r,s=0;s=2?or(e,t,n,0,rr,ar):or(e,t,n,0,nr)},squaredEuclidean:function(e,t,n){return or(e,t,n,0,rr)},manhattan:function(e,t,n){return or(e,t,n,0,nr)},max:function(e,t,n){return or(e,t,n,-1/0,ir)}};function lr(e,t,n,r,a,i){var o;return o=G(e)?e:sr[e]||sr.euclidean,0===t&&G(e)?o(a,i):o(t,n,r,a,i)}sr["squared-euclidean"]=sr.squaredEuclidean,sr.squaredeuclidean=sr.squaredEuclidean;var ur=ct({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),cr=function(e){return ur(e)},dr=function(e,t,n,r,a){var i="kMedoids"!==a?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return lr(e,r.length,i,function(e){return r[e](t)},o,s)},hr=function(e,t,n){for(var r=n.length,a=new Array(r),i=new Array(r),o=new Array(t),s=null,l=0;ln)return!1}return!0},yr=function(e,t,n){for(var r=0;ra&&(a=t[l][u],i=u);o[i].push(e[l])}for(var c=0;c=a.threshold||"dendrogram"===a.mode&&1===e.length)return!1;var f,p=t[o],v=t[r[o]];f="dendrogram"===a.mode?{left:p,right:v,key:p.key}:{value:p.value.concat(v.value),key:p.key},e[p.index]=f,e.splice(v.index,1),t[p.key]=f;for(var g=0;gn[v.key][y.key]&&(i=n[v.key][y.key])):"max"===a.linkage?(i=n[p.key][y.key],n[p.key][y.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n0&&e.splice(0,t)):e=e.slice(t,n);for(var i=0,o=e.length-1;o>=0;o--){var s=e[o];a?isFinite(s)||(e[o]=-1/0,i++):e.splice(o,1)}r&&e.sort(function(e,t){return e-t});var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+i]:(e[u-1+i]+e[u+i])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,a=0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,a=t;ao&&(i=l,o=t[a*e+l])}i>0&&r.push(i)}for(var u=0;u=P?(S=P,P=D,B=_):D>S&&(S=D);for(var A=0;A0?1:0;k[E%u.minIterations*t+z]=O,L+=O}if(L>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var V=0,F=0;F0&&r.push(a);return r}(t,i,o),q=function(e,t,n){for(var r=Nr(e,t,n),a=0;al&&(s=u,l=c)}n[a]=i[s]}return Nr(e,t,n)}(t,r,X),Y={},W=0;W1)}});var l=Object.keys(t).filter(function(e){return t[e].cutVertex}).map(function(t){return e.getElementById(t)});return{cut:e.spawn(l),components:a}},Fr=function(){var e=this,t={},n=0,r=[],a=[],i=e.spawn(e),o=function(s){if(a.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach(function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))}),t[s].index===t[s].low){for(var l=e.spawn();;){var u=a.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),d=l.merge(c);r.push(d),i=i.difference(d)}};return e.forEach(function(e){if(e.isNode()){var n=e.id();n in t||o(n)}}),{cut:i,components:r}},jr={};[xt,_t,At,Rt,Nt,zt,jt,zn,Vn,jn,qn,Jn,kr,Ar,zr,{hierholzer:function(e){if(!$(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,a,i=Or(e),o=i.root,s=i.directed,l=this,u=!1;o&&(a=K(o)?this.filter(o)[0].id():o[0].id());var c={},d={};s?l.forEach(function(e){var t=e.id();if(e.isNode()){var a=e.indegree(!0),i=e.outdegree(!0),o=a-i,s=i-a;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach(function(e){e.isEdge()&&c[t].push(e.id())})}else d[t]=[void 0,e.target().id()]}):l.forEach(function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach(function(e){return c[t].push(e.id())})):d[t]=[e.source().id(),e.target().id()]});var h={found:!1,trail:void 0};if(u)return h;if(r&&n)if(s){if(a&&r!=a)return h;a=r}else{if(a&&r!=a&&n!=a)return h;a||(a=r)}else a||(a=l[0].id());var f=function(e){for(var t,n,r,a=e,i=[e];c[a].length;)t=c[a].shift(),n=d[t][0],a!=(r=d[t][1])?(c[r]=c[r].filter(function(e){return e!=t}),a=r):s||a==n||(c[n]=c[n].filter(function(e){return e!=t}),a=n),i.unshift(t),i.unshift(a);return i},p=[],v=[];for(v=f(a);1!=v.length;)0==c[v[0]].length?(p.unshift(l.getElementById(v.shift())),p.unshift(l.getElementById(v.shift()))):v=f(v.shift()).concat(v);for(var g in p.unshift(l.getElementById(v.shift())),c)if(c[g].length)return h;return h.found=!0,h.trail=this.spawn(p,!0),h}},{hopcroftTarjanBiconnected:Vr,htbc:Vr,htb:Vr,hopcroftTarjanBiconnectedComponents:Vr},{tarjanStronglyConnected:Fr,tsc:Fr,tscc:Fr,tarjanStronglyConnectedComponents:Fr}].forEach(function(e){be(jr,e)});var Xr=function(e){if(!(this instanceof Xr))return new Xr(e);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof e&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Xr.prototype={fulfill:function(e){return qr(this,1,"fulfillValue",e)},reject:function(e){return qr(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Xr;return n.onFulfilled.push(Ur(e,r,"fulfill")),n.onRejected.push(Ur(t,r,"reject")),Yr(n),r.proxy}};var qr=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Yr(e)),e},Yr=function(e){1===e.state?Wr(e,"onFulfilled",e.fulfillValue):2===e.state&&Wr(e,"onRejected",e.rejectReason)},Wr=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var a=function(){for(var e=0;e0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n-1}}(),a=function(){if(Xa)return ja;Xa=1;var e=zi();return ja=function(t,n){var r=this.__data__,a=e(r,t);return a<0?(++this.size,r.push([t,n])):r[a][1]=n,this},ja}();function i(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&t%1==0&&t0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){Z(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,a=[],i=0,o=n.length;i0&&this.spawn(a).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},t),n}};ko.className=ko.classNames=ko.classes;var To={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:fe,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};To.variable="(?:[\\w-.]|(?:\\\\"+To.metaChar+"))+",To.className="(?:[\\w-]|(?:\\\\"+To.metaChar+"))+",To.value=To.string+"|"+To.number,To.id=To.variable,function(){var e,t,n;for(e=To.comparatorOp.split("|"),n=0;n=0||"="!==t&&(To.comparatorOp+="|\\!"+t)}();var Co=0,Po=1,So=2,Bo=3,Do=4,_o=5,Ao=6,Mo=7,Ro=8,Io=9,No=10,Lo=11,zo=12,Oo=13,Vo=14,Fo=15,jo=16,Xo=17,qo=18,Yo=19,Wo=20,Uo=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort(function(e,t){return function(e,t){return-1*me(e,t)}(e.selector,t.selector)}),Ho=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return it("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return it("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&it("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return K(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,i){var o=r.type,s=r.value;switch(o){case Co:var l=e(s);return l.substring(0,l.length-1);case Bo:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case _o:var d=r.operator,h=r.field;return"["+e(d)+h+"]";case Do:return"["+r.field+"]";case Ao:var f=r.operator;return"[["+r.field+n(e(f))+t(s)+"]]";case Mo:return s;case Ro:return"#"+s;case Io:return"."+s;case Xo:case Fo:return a(r.parent,i)+n(">")+a(r.child,i);case qo:case jo:return a(r.ancestor,i)+" "+a(r.descendant,i);case Yo:var p=a(r.left,i),v=a(r.subject,i),g=a(r.right,i);return p+(p.length>0?" ":"")+v+g;case Wo:return""}},a=function(e,t){return e.checks.reduce(function(n,a,i){return n+(t===e&&0===i?"$":"")+r(a,t)},"")},i="",o=0;o1&&o=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(a=o||s?""+e:"",i=""+n),u&&(e=a=a.toLowerCase(),n=i=i.toLowerCase()),t){case"*=":r=a.indexOf(i)>=0;break;case"$=":r=a.indexOf(i,a.length-i.length)>=0;break;case"^=":r=0===a.indexOf(i);break;case"=":r=e===n;break;case">":d=!0,r=e>n;break;case">=":d=!0,r=e>=n;break;case"<":d=!0,r=e0;){var u=a.shift();t(u),i.add(u.id()),o&&r(a,i,u)}return e}function fs(e,t,n){if(n.isParent())for(var r=n._private.children,a=0;a1&&void 0!==arguments[1])||arguments[1],fs)},ds.forEachUp=function(e){return hs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ps)},ds.forEachUpAndDown=function(e){return hs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],vs)},ds.ancestors=ds.parents,(ls=us={data:wo.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:wo.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:wo.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:wo.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:wo.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:wo.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=ls.data,ls.removeAttr=ls.removeData;var gs,ys,ms=us,bs={};function xs(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,a=n[0],i=a._private.edges,o=0;ot}),minIndegree:ws("indegree",function(e,t){return et}),minOutdegree:ws("outdegree",function(e,t){return et})}),be(bs,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,c=u;u&&(l=l[0]);var d=c?l.position():{x:0,y:0};return a={x:s.x-d.x,y:s.y-d.y},void 0===e?a:a[e]}for(var h=0;h0,g=v;v&&(p=p[0]);var y=g?p.position():{x:0,y:0};void 0!==t?f.position(e,t+y[e]):void 0!==a&&f.position({x:a.x+y.x,y:a.y+y.y})}}else if(!i)return;return this}},gs.modelPosition=gs.point=gs.position,gs.modelPositions=gs.points=gs.positions,gs.renderedPoint=gs.renderedPosition,gs.relativePoint=gs.relativePosition;var Ts,Cs,Ps=ys;Ts=Cs={},Cs.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),a=n.pan(),i=t.x1*r+a.x,o=t.x2*r+a.x,s=t.y1*r+a.y,l=t.y2*r+a.y;return{x1:i,x2:o,y1:s,y2:l,w:o-i,h:l-s}},Cs.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp(function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}}),this):this},Cs.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,a={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},i=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==i.w&&0!==i.h||((i={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-i.w/2,i.x2=o.x+i.w/2,i.y1=o.y-i.h/2,i.y2=o.y+i.h/2);var s=a.width.left.value;"px"===a.width.left.units&&a.width.val>0&&(s=100*s/a.width.val);var l=a.width.right.value;"px"===a.width.right.units&&a.width.val>0&&(l=100*l/a.width.val);var u=a.height.top.value;"px"===a.height.top.units&&a.height.val>0&&(u=100*u/a.height.val);var c=a.height.bottom.value;"px"===a.height.bottom.units&&a.height.val>0&&(c=100*c/a.height.val);var d=y(a.width.val-i.w,s,l),h=d.biasDiff,f=d.biasComplementDiff,p=y(a.height.val-i.h,u,c),v=p.biasDiff,g=p.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(i.w,i.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(i.w,a.width.val),o.x=(-h+i.x1+i.x2+f)/2,t.autoHeight=Math.max(i.h,a.height.val),o.y=(-v+i.y1+i.y2+g)/2}function y(e,t,n){var r=0,a=0,i=t+n;return e>0&&i>0&&(r=t/i*e,a=n/i*e),{biasDiff:r,biasComplementDiff:a}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},Ds=function(e,t){return null==t?e:Bs(e,t.x1,t.y1,t.x2,t.y2)},_s=function(e,t,n){return ft(e,t,n)},As=function(e,t,n){if(!t.cy().headless()){var r,a,i=t._private,o=i.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,a=o.srcY):"target"===n?(r=o.tgtX,a=o.tgtY):(r=o.midX,a=o.midY);var l=i.arrowBounds=i.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=a-s,u.x2=r+s,u.y2=a+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,rn(u,1),Bs(e,u.x1,u.y1,u.x2,u.y2)}}},Ms=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var a=t._private,i=a.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),d=t.pstyle("text-valign"),h=_s(i,"labelWidth",n),f=_s(i,"labelHeight",n),p=_s(i,"labelX",n),v=_s(i,"labelY",n),g=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,k=f,T=h,C=T/2,P=k/2;if(m)o=p-C,s=p+C,l=v-P,u=v+P;else{switch(c.value){case"left":o=p-T,s=p;break;case"center":o=p-C,s=p+C;break;case"right":o=p,s=p+T}switch(d.value){case"top":l=v-k,u=v;break;case"center":l=v-P,u=v+P;break;case"bottom":l=v,u=v+k}}var S=g-Math.max(x,w)-E-2,B=g+Math.max(x,w)+E+2,D=y-Math.max(x,w)-E-2,_=y+Math.max(x,w)+E+2;o+=S,s+=B,l+=D,u+=_;var A=n||"main",M=a.labelBounds,R=M[A]=M[A]||{};R.x1=o,R.y1=l,R.x2=s,R.y2=u,R.w=s-o,R.h=u-l,R.leftPad=S,R.rightPad=B,R.topPad=D,R.botPad=_;var I=m&&"autorotate"===b.strValue,N=null!=b.pfValue&&0!==b.pfValue;if(I||N){var L=I?_s(a.rstyle,"labelAngle",n):b.pfValue,z=Math.cos(L),O=Math.sin(L),V=(o+s)/2,F=(l+u)/2;if(!m){switch(c.value){case"left":V=s;break;case"right":V=o}switch(d.value){case"top":F=u;break;case"bottom":F=l}}var j=function(e,t){return{x:(e-=V)*z-(t-=F)*O+V,y:e*O+t*z+F}},X=j(o,l),q=j(o,u),Y=j(s,l),W=j(s,u);o=Math.min(X.x,q.x,Y.x,W.x),s=Math.max(X.x,q.x,Y.x,W.x),l=Math.min(X.y,q.y,Y.y,W.y),u=Math.max(X.y,q.y,Y.y,W.y)}var U=A+"Rot",H=M[U]=M[U]||{};H.x1=o,H.y1=l,H.x2=s,H.y2=u,H.w=s-o,H.h=u-l,Bs(e,o,l,s,u),Bs(a.labelBounds.all,o,l,s,u)}return e}},Rs=function(e,t){if(!t.cy().headless()){var n=t.pstyle("outline-opacity").value,r=t.pstyle("outline-width").value+t.pstyle("outline-offset").value;Is(e,t,n,r,"outside",r/2)}},Is=function(e,t,n,r,a,i){if(!(0===n||r<=0||"inside"===a)){var o=t.cy(),s=t.pstyle("shape").value,l=o.renderer().nodeShapes[s],u=t.position(),c=u.x,d=u.y,h=t.width(),f=t.height();if(l.hasMiterBounds){"center"===a&&(r/=2);var p=l.miterBounds(c,d,h,f,r);Ds(e,p)}else null!=i&&i>0&&an(e,[i,i,i,i])}},Ns=function(e,t){var n,r,a,i,o,s,l,u=e._private.cy,c=u.styleEnabled(),d=u.headless(),h=en(),f=e._private,p=e.isNode(),v=e.isEdge(),g=f.rstyle,y=p&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!v||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),k=0;if(c&&(k=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var C=e.outerWidth()/2,P=e.outerHeight()/2;Bs(h,n=o-C,a=s-P,r=o+C,i=s+P),c&&Rs(h,e),c&&t.includeOutlines&&!d&&Rs(h,e),c&&function(e,t){if(!t.cy().headless()){var n=t.pstyle("border-opacity").value,r=t.pstyle("border-width").pfValue,a=t.pstyle("border-position").value;Is(e,t,n,r,a)}}(h,e)}else if(v&&t.includeEdges)if(c&&!d){var S=e.pstyle("curve-style").strValue;if(n=Math.min(g.srcX,g.midX,g.tgtX),r=Math.max(g.srcX,g.midX,g.tgtX),a=Math.min(g.srcY,g.midY,g.tgtY),i=Math.max(g.srcY,g.midY,g.tgtY),Bs(h,n-=k,a-=k,r+=k,i+=k),"haystack"===S){var B=g.haystackPts;if(B&&2===B.length){if(n=B[0].x,a=B[0].y,n>(r=B[1].x)){var D=n;n=r,r=D}if(a>(i=B[1].y)){var _=a;a=i,i=_}Bs(h,n-k,a-k,r+k,i+k)}}else if("bezier"===S||"unbundled-bezier"===S||he(S,"segments")||he(S,"taxi")){var A;switch(S){case"bezier":case"unbundled-bezier":A=g.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":A=g.linePts}if(null!=A)for(var M=0;M(r=N.x)){var L=n;n=r,r=L}if((a=I.y)>(i=N.y)){var z=a;a=i,i=z}Bs(h,n-=k,a-=k,r+=k,i+=k)}if(c&&t.includeEdges&&v&&(As(h,e,"mid-source"),As(h,e,"mid-target"),As(h,e,"source"),As(h,e,"target")),c)if("yes"===e.pstyle("ghost").value){var O=e.pstyle("ghost-offset-x").pfValue,V=e.pstyle("ghost-offset-y").pfValue;Bs(h,h.x1+O,h.y1+V,h.x2+O,h.y2+V)}var F=f.bodyBounds=f.bodyBounds||{};on(F,h),an(F,y),rn(F,1),c&&(n=h.x1,r=h.x2,a=h.y1,i=h.y2,Bs(h,n-E,a-E,r+E,i+E));var j=f.overlayBounds=f.overlayBounds||{};on(j,h),an(j,y),rn(j,1);var X=f.labelBounds=f.labelBounds||{};null!=X.all?((l=X.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):X.all=en(),c&&t.includeLabels&&(t.includeMainLabels&&Ms(h,e,null),v&&(t.includeSourceLabels&&Ms(h,e,"source"),t.includeTargetLabels&&Ms(h,e,"target")))}return h.x1=Ss(h.x1),h.y1=Ss(h.y1),h.x2=Ss(h.x2),h.y2=Ss(h.y2),h.w=Ss(h.x2-h.x1),h.h=Ss(h.y2-h.y1),h.w>0&&h.h>0&&b&&(an(h,y),rn(h,1)),h},Ls=function(e){var t=0,n=function(e){return(e?1:0)<0&&void 0!==arguments[0]?arguments[0]:nl,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},al.removeAllListeners=function(){return this.removeListener("*")},al.emit=al.trigger=function(e,t,n){var r=this.listeners,a=r.length;return this.emitting++,Z(t)||(t=[t]),sl(this,function(e,i){null!=n&&(r=[{event:i.event,type:i.type,namespace:i.namespace,callback:n}],a=r.length);for(var o=function(){var n=r[s];if(n.type===i.type&&(!n.namespace||n.namespace===i.namespace||".*"===n.namespace)&&e.eventMatches(e.context,n,i)){var a=[i];null!=t&&function(e,t){for(var n=0;n1&&!r){var a=this.length-1,i=this[a],o=i._private.data.id;this[a]=void 0,this[e]=i,n.set(o,{ele:i,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var a=r.index;return this.unmergeAt(a),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&K(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,a=0;ar&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,a=this,i=0;i=0&&a1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,r.style().apply(n));var a=n._private.style[e];return null!=a?a:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,a=n.style();if($(e)){var i=e;a.applyBypass(this,i,r),this.emitAndNotify("style")}else if(K(e)){if(void 0===t){var o=this[0];return o?a.getStylePropertyValue(o,e):void 0}a.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?a.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),a=this;if(void 0===e)for(var i=0;i0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)},"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),Ml.neighbourhood=Ml.neighborhood,Ml.closedNeighbourhood=Ml.closedNeighborhood,Ml.openNeighbourhood=Ml.openNeighborhood,be(Ml,{source:cs(function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t},"source"),target:cs(function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t},"target"),sources:Ll({attr:"source"}),targets:Ll({attr:"target"})}),be(Ml,{edgesWith:cs(zl(),"edgesWith"),edgesTo:cs(zl({thisIsSrc:!0}),"edgesTo")}),be(Ml,{connectedEdges:cs(function(e){for(var t=[],n=0;n0);return i},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),Ml.componentsOf=Ml.components;var Vl=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var a=new vt,i=!1;if(t){if(t.length>0&&$(t[0])&&!te(t[0])){i=!0;for(var o=[],s=new yt,l=0,u=t.length;l0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=this,i=a.cy(),o=i._private,s=[],l=[],u=0,c=a.length;u0){for(var I=e.length===a.length?a:new Vl(i,e),N=0;N0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],a={},i=n._private.cy;function o(e){var n=a[e.id()];t&&e.removed()||n||(a[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n0&&(e?k.emitAndNotify("remove"):t&&k.emit("remove"));for(var T=0;T=.001?function(t,r){for(var a=0;a<4;++a){var i=h(r,e,n);if(0===i)return r;r-=(d(r,e,n)-t)/i}return r}(t,o):0===l?o:function(t,r,a){var i,o,s=0;do{(i=d(o=r+(a-r)/2,e,n)-t)>0?a=o:r=o}while(Math.abs(i)>1e-7&&++s<10);return o}(t,r,r+a)}var p=!1;function v(){p=!0,e===t&&n===r||function(){for(var t=0;t<11;++t)s[t]=d(t*a,e,n)}()}var g=function(a){return p||v(),e===t&&n===r?a:0===a?0:1===a?1:d(f(a),t,r)};g.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var y="generateBezier("+[e,t,n,r]+")";return g.toString=function(){return y},g}var ql=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var a={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:a.v,dv:e(a)}}function n(n,r){var a={dx:n.v,dv:e(n)},i=t(n,.5*r,a),o=t(n,.5*r,i),s=t(n,r,o),l=1/6*(a.dx+2*(i.dx+o.dx)+s.dx),u=1/6*(a.dv+2*(i.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,a){var i,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,d=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,a=a||null,l.tension=t,l.friction=r,o=(i=null!==a)?(c=e(t,r))/a*.016:.016;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>d&&Math.abs(s.v)>d;);return i?function(e){return u[e*(u.length-1)|0]}:c}}(),Yl=function(e,t,n,r){var a=Xl(e,t,n,r);return function(e,t,n){return e+(t-e)*a(n)}},Wl={linear:function(e,t,n){return e+(t-e)*n},ease:Yl(.25,.1,.25,1),"ease-in":Yl(.42,0,1,1),"ease-out":Yl(0,0,.58,1),"ease-in-out":Yl(.42,0,.58,1),"ease-in-sine":Yl(.47,0,.745,.715),"ease-out-sine":Yl(.39,.575,.565,1),"ease-in-out-sine":Yl(.445,.05,.55,.95),"ease-in-quad":Yl(.55,.085,.68,.53),"ease-out-quad":Yl(.25,.46,.45,.94),"ease-in-out-quad":Yl(.455,.03,.515,.955),"ease-in-cubic":Yl(.55,.055,.675,.19),"ease-out-cubic":Yl(.215,.61,.355,1),"ease-in-out-cubic":Yl(.645,.045,.355,1),"ease-in-quart":Yl(.895,.03,.685,.22),"ease-out-quart":Yl(.165,.84,.44,1),"ease-in-out-quart":Yl(.77,0,.175,1),"ease-in-quint":Yl(.755,.05,.855,.06),"ease-out-quint":Yl(.23,1,.32,1),"ease-in-out-quint":Yl(.86,0,.07,1),"ease-in-expo":Yl(.95,.05,.795,.035),"ease-out-expo":Yl(.19,1,.22,1),"ease-in-out-expo":Yl(1,0,0,1),"ease-in-circ":Yl(.6,.04,.98,.335),"ease-out-circ":Yl(.075,.82,.165,1),"ease-in-out-circ":Yl(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Wl.linear;var r=ql(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Yl};function Ul(e,t,n,r,a){if(1===r)return n;if(t===n)return n;var i=a(t,n,r);return null==e||((e.roundValue||e.color)&&(i=Math.round(i)),void 0!==e.min&&(i=Math.max(i,e.min)),void 0!==e.max&&(i=Math.min(i,e.max))),i}function Hl(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Kl(e,t,n,r,a){var i=null!=a?a.type:null;n<0?n=0:n>1&&(n=1);var o=Hl(e,a),s=Hl(t,a);if(Q(o)&&Q(s))return Ul(i,o,s,n,r);if(Z(o)&&Z(s)){for(var l=[],u=0;u0?("spring"===d&&h.push(o.duration),o.easingImpl=Wl[d].apply(null,h)):o.easingImpl=Wl[d]}var f,p=o.easingImpl;if(f=0===o.duration?1:(n-l)/o.duration,o.applying&&(f=o.progress),f<0?f=0:f>1&&(f=1),null==o.delay){var v=o.startPosition,g=o.position;if(g&&a&&!e.locked()){var y={};Zl(v.x,g.x)&&(y.x=Kl(v.x,g.x,f,p)),Zl(v.y,g.y)&&(y.y=Kl(v.y,g.y,f,p)),e.position(y)}var m=o.startPan,b=o.pan,x=i.pan,w=null!=b&&r;w&&(Zl(m.x,b.x)&&(x.x=Kl(m.x,b.x,f,p)),Zl(m.y,b.y)&&(x.y=Kl(m.y,b.y,f,p)),e.emit("pan"));var E=o.startZoom,k=o.zoom,T=null!=k&&r;T&&(Zl(E,k)&&(i.zoom=Jt(i.minZoom,Kl(E,k,f,p),i.maxZoom)),e.emit("zoom")),(w||T)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&a){for(var P=0;P=0;t--){(0,e[t])()}e.splice(0,e.length)},c=i.length-1;c>=0;c--){var d=i[c],h=d._private;h.stopped?(i.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,u(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||$l(0,d,e),Gl(t,d,e,n),h.applying&&(h.applying=!1),u(h.frames),null!=h.step&&h.step(e),d.completed()&&(i.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,u(h.completes)),s=!0)}return n||0!==i.length||0!==o.length||r.push(t),s}for(var i=!1,o=0;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Jl={animate:wo.animate(),animation:wo.animation(),animated:wo.animated(),clearQueue:wo.clearQueue(),delay:wo.delay(),delayAnimation:wo.delayAnimation(),stop:wo.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender(function(t,n){Ql(n,e)},t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&Le(function(n){Ql(n,e),t()})}()}}},eu={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&te(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},tu=function(e){return K(e)?new is(e):e},nu={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new rl(eu,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,tu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,tu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,tu(t),n),this},once:function(e,t,n){return this.emitter().one(e,tu(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};wo.eventAliasesOn(nu);var ru={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};ru.jpeg=ru.jpg;var au={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var a;a=K(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var i=new r(be({},e,{cy:t,eles:a}));return i}rt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else rt("A `name` must be specified to make a layout");else rt("Layout options must be specified to make a layout")}};au.createLayout=au.makeLayout=au.layout;var iu={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var a=this.renderer();!this.destroyed()&&a&&a.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)})}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch(function(){for(var n=Object.keys(e),r=0;r0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]})},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};su.invalidateDimensions=su.resize;var lu={collection:function(e,t){return K(e)?this.$(e):ee(e)?e.collection():Z(e)?(t||(t={}),new Vl(this,e,t.unique,t.removed)):new Vl(this)},nodes:function(e){var t=this.$(function(e){return e.isNode()});return e?t.filter(e):t},edges:function(e){var t=this.$(function(e){return e.isEdge()});return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};lu.elements=lu.filter=lu.$;var uu={},cu="t";uu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(h||d&&f){var p=void 0;h&&f||h?p=u.properties:f&&(p=u.mappedProperties);for(var v=0;v1&&(g=1),s.color){var w=a.valueMin[0],E=a.valueMax[0],k=a.valueMin[1],T=a.valueMax[1],C=a.valueMin[2],P=a.valueMax[2],S=null==a.valueMin[3]?1:a.valueMin[3],B=null==a.valueMax[3]?1:a.valueMax[3],D=[Math.round(w+(E-w)*g),Math.round(k+(T-k)*g),Math.round(C+(P-C)*g),Math.round(S+(B-S)*g)];n={bypass:a.bypass,name:a.name,value:D,strValue:"rgb("+D[0]+", "+D[1]+", "+D[2]+")"}}else{if(!s.number)return!1;var _=a.valueMin+(a.valueMax-a.valueMin)*g;n=this.parse(a.name,_,a.bypass,h)}if(!n)return v(),!1;n.mapping=a,a=n;break;case o.data:for(var A=a.field.split("."),M=d.data,R=0;R0&&i>0){for(var s={},l=!1,u=0;u0?e.delayAnimation(o).play().promise().then(t):t()}).then(function(){return e.animation({style:s,duration:i,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){n.removeBypasses(e,a),e.emitAndNotify("style"),r.transitioning=!1})}else r.transitioning&&(this.removeBypasses(e,a),e.emitAndNotify("style"),r.transitioning=!1)},uu.checkTrigger=function(e,t,n,r,a,i){var o=this.properties[t],s=a(o);e.removed()||null!=s&&s(n,r,e)&&i(o)},uu.checkZOrderTrigger=function(e,t,n,r){var a=this;this.checkTrigger(e,t,n,r,function(e){return e.triggersZOrder},function(){a._private.cy.notify("zorder",e)})},uu.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,function(e){return e.triggersBounds},function(t){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache()})},uu.checkConnectedEdgesBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,function(e){return e.triggersBoundsOfConnectedEdges},function(t){e.connectedEdges().forEach(function(e){e.dirtyBoundingBoxCache()})})},uu.checkParallelEdgesBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,function(e){return e.triggersBoundsOfParallelEdges},function(t){e.parallelEdges().forEach(function(e){e.dirtyBoundingBoxCache()})})},uu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r),this.checkConnectedEdgesBoundsTrigger(e,t,n,r),this.checkParallelEdgesBoundsTrigger(e,t,n,r)};var du={applyBypass:function(e,t,n,r){var a=[];if("*"===t||"**"===t){if(void 0!==n)for(var i=0;it.length?i.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(i=i.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(i.match(/^\s*$/))break;var l=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){it("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}t=l[0];var u=l[1];if("core"!==u)if(new is(u).invalid){it("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],d=!1;n=c;for(var h=[];;){if(n.match(/^\s*$/))break;var f=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!f){it("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),d=!0;break}r=f[0];var p=f[1],v=f[2];if(this.properties[p])a.parse(p,v)?(h.push({name:p,val:v}),s()):(it("Skipping property: Invalid property definition in: "+r),s());else it("Skipping property: Invalid property name in: "+r),s()}if(d){o();break}a.selector(u);for(var g=0;g=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var h=s.data;return{name:e,value:u,strValue:""+t,mapped:h,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(d.multiple)return!1;var f=s.mapData;if(!d.color&&!d.number)return!1;var p=this.parse(e,c[4]);if(!p||p.mapped)return!1;var v=this.parse(e,c[5]);if(!v||v.mapped)return!1;if(p.pfValue===v.pfValue||p.strValue===v.strValue)return it("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+p.strValue+"`"),this.parse(e,p.strValue);if(d.color){var g=p.value,y=v.value;if(!(g[0]!==y[0]||g[1]!==y[1]||g[2]!==y[2]||g[3]!==y[3]&&(null!=g[3]&&1!==g[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:f,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:p.value,valueMax:v.value,bypass:n}}}if(d.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):Z(t)?t:[t],d.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",k=!1,T=0;T0?" ":"")+C.strValue}return d.validate&&!d.validate(b,x)?null:d.singleEnum&&k?1===b.length&&K(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var P,S,B=function(){for(var r=0;rd.max||d.strictMax&&t===d.max))return null;var R={name:e,value:t,strValue:""+t+(D||""),units:D,bypass:n};return d.unitless||"px"!==D&&"em"!==D?R.pfValue=t:R.pfValue="px"!==D&&D?this.getEmSizeInPixels()*t:t,"ms"!==D&&"s"!==D||(R.pfValue="ms"===D?t:1e3*t),"deg"!==D&&"rad"!==D||(R.pfValue="rad"===D?t:(P=t,Math.PI*P/180)),"%"===D&&(R.pfValue=t/100),R}if(d.propList){var I=[],N=""+t;if("none"===N);else{for(var L=N.split(/\s*,\s*|\s+/),z=0;z0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,a=r.pan,i=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),Q(e)?n=e:$(e)&&(n=e.level,null!=e.position?t=Xt(e.position,i,a):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?i=!0:(t.zoom=s,a.push("zoom"))}if(r&&(!i||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;Q(l.x)&&(t.pan.x=l.x,o=!1),Q(l.y)&&(t.pan.y=l.y,o=!1),o||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(K(e)){var n=e;e=this.mutableElements().filter(n)}else ee(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),a=this.width(),i=this.height();return{x:(a-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(i-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,a=this;return n.sizeCache=n.sizeCache||(r?(e=a.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};wu.centre=wu.center,wu.autolockNodes=wu.autolock,wu.autoungrabifyNodes=wu.autoungrabify;var Eu={data:wo.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:wo.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:wo.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:wo.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Eu.attr=Eu.data,Eu.removeAttr=Eu.removeData;var ku=function(e){var t=this,n=(e=be({},e)).container;n&&!J(n)&&J(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var a=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var i=void 0!==f&&void 0!==n&&!e.headless,o=e;o.layout=be({name:i?"grid":"null"},o.layout),o.renderer=be({name:i?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new Vl(this),listeners:[],aniEles:new Vl(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?i:o.styleEnabled,zoom:Q(o.zoom)?o.zoom:1,pan:{x:$(o.pan)&&Q(o.pan.x)?o.pan.x:0,y:$(o.pan)&&Q(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var u=be({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(oe))return Kr.all(e).then(t);t(e)}([o.style,o.elements],function(e){var n=e[0],i=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var a=t.mutableElements();a.length>0&&a.remove(),null!=e&&($(e)||Z(e))&&t.add(e),t.one("layoutready",function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")}).one("layoutstop",function(){t.one("done",r),t.emit("done")});var i=be({},t._private.options.layout);i.eles=t.elements(),t.layout(i).run()}(i,function(){t.startAnimationLoop(),l.ready=!0,G(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,l=!!t.boundingBox,u=n.extent(),c=en(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h});if(ee(t.roots))e=t.roots;else if(Z(t.roots)){for(var d=[],h=0;h0;){var _=D(),A=C(_,S);if(A)_.outgoers().filter(function(e){return e.isNode()&&r.has(e)}).forEach(B);else if(null===A){it("Detected double maximal shift for node `"+_.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var M=0;if(t.avoidOverlap)for(var R=0;R0&&m[0].length<=3?i/2:0),s=2*Math.PI/m[r].length*a;return 0===r&&1===m[0].length&&(o=1),{x:U+o*Math.cos(s),y:H+o*Math.sin(s)}}var u=m[r].length,d=Math.max(1===u?0:l?(c.w-2*t.padding-G.w)/((t.grid?Q:u)-1):(c.w-2*t.padding-G.w)/((t.grid?Q:u)+1),M);return{x:U+(a+1-(u+1)/2)*d,y:H+(r+1-(F+1)/2)*$}}),this};var _u={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Au(e){this.options=be({},_u,e)}Au.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));for(var o,s=en(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/i.length:t.sweep)/Math.max(1,i.length-1),d=0,h=0;h1&&t.avoidOverlap){d*=1.75;var g=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(d*d/(g*g+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,function(e,n){var r=t.startAngle+n*c*(a?1:-1),i=o*Math.cos(r),s=o*Math.sin(r);return{x:l+i,y:u+s}}),this};var Mu,Ru={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Iu(e){this.options=be({},Ru,e)}Iu.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,a=t.eles,i=a.nodes().not(":parent"),o=en(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,d=0;d0)Math.abs(m[0].value-x.value)>=g&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,k=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,k)}for(var T=0,C=0;C1&&t.avoidOverlap){var D=Math.cos(B)-Math.cos(0),_=Math.sin(B)-Math.sin(0),A=Math.sqrt(w*w/(D*D+_*_));T=Math.max(A,T)}P.r=T,T+=w}if(t.equidistant){for(var M=0,R=0,I=0;I=e.numIter)&&(qu(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&i(),Le(c)):(tc(r,e),s())};c()}else{for(;u;)u=o(l),l++;tc(r,e),s()}return this},Lu.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},Lu.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var zu=function(e,t,n){for(var r=n.eles.edges(),a=n.eles.nodes(),i=en(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:i.w,clientHeight:i.h,boundingBox:i},s=n.eles.components(),l={},u=0;u0){o.graphSet.push(w);for(u=0;ur.count?0:r.graph},Vu=function(e,t,n,r){var a=r.graphSet[n];if(-10)var s=(u=r.nodeOverlap*o)*a/(v=Math.sqrt(a*a+i*i)),l=u*i/v;else{var u,c=Ku(e,a,i),d=Ku(t,-1*a,-1*i),h=d.x-c.x,f=d.y-c.y,p=h*h+f*f,v=Math.sqrt(p);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/p)*h/v,l=u*f/v}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Hu=function(e,t,n,r){if(n>0)var a=e.maxX-t.minX;else a=t.maxX-e.minX;if(r>0)var i=e.maxY-t.minY;else i=t.maxY-e.minY;return a>=0&&i>=0?Math.sqrt(a*a+i*i):0},Ku=function(e,t,n){var r=e.positionX,a=e.positionY,i=e.height||1,o=e.width||1,s=n/t,l=i/o,u={};return 0===t&&0n?(u.x=r,u.y=a+i/2,u):0t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=a-o*n/2/t,u):0=l)?(u.x=r+i*t/2/n,u.y=a+i/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-i*t/2/n,u.y=a-i/2,u):u},Gu=function(e,t){for(var n=0;n1){var p=t.gravity*d/f,v=t.gravity*h/f;c.offsetX+=p,c.offsetY+=v}}}}},$u=function(e,t){var n=[],r=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;r<=a;){var i=n[r++],o=e.idToIndex[i],s=e.layoutNodes[o],l=s.children;if(0n)var a={x:n*e/r,y:n*t/r};else a={x:e,y:t};return a},ec=function(e,t){var n=e.parentId;if(null!=n){var r=t.layoutNodes[t.idToIndex[n]],a=!1;return(null==r.maxX||e.maxX+r.padRight>r.maxX)&&(r.maxX=e.maxX+r.padRight,a=!0),(null==r.minX||e.minX-r.padLeftr.maxY)&&(r.maxY=e.maxY+r.padBottom,a=!0),(null==r.minY||e.minY-r.padTopp&&(d+=f+t.componentSpacing,c=0,h=0,f=0)}}},nc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function rc(e){this.options=be({},nc,e)}rc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));var i=en(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===i.h||0===i.w)r.nodes().layoutPositions(this,t,function(e){return{x:i.x1,y:i.y1}});else{var o=a.size(),s=Math.sqrt(o*i.h/i.w),l=Math.round(s),u=Math.round(i.w/i.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},d=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},h=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=h&&null!=f)l=h,u=f;else if(null!=h&&null==f)l=h,u=Math.ceil(o/l);else if(null==h&&null!=f)u=f,l=Math.ceil(o/u);else if(u*l>o){var p=c(),v=d();(p-1)*v>=o?c(p-1):(v-1)*p>=o&&d(v-1)}else for(;u*l=o?d(y+1):c(g+1)}var m=i.w/u,b=i.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x=u&&(A=0,_++)},R={},I=0;I(r=yn(e,t,x[w],x[w+1],x[w+2],x[w+3])))return g(n,r),!0}else if("bezier"===i.edgeType||"multibezier"===i.edgeType||"self"===i.edgeType||"compound"===i.edgeType)for(x=i.allpts,w=0;w+5(r=gn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return g(n,r),!0;m=m||a.source,b=b||a.target;var E=o.getArrowWidth(l,c),k=[{name:"source",x:i.arrowStartX,y:i.arrowStartY,angle:i.srcArrowAngle},{name:"target",x:i.arrowEndX,y:i.arrowEndY,angle:i.tgtArrowAngle},{name:"mid-source",x:i.midX,y:i.midY,angle:i.midsrcArrowAngle},{name:"mid-target",x:i.midX,y:i.midY,angle:i.midtgtArrowAngle}];for(w=0;w0&&(y(m),y(b))}function b(e,t,n){return ft(e,t,n)}function x(n,r){var a,i=n._private,o=p;a=r?r+"-":"",n.boundingBox();var s=i.labelBounds[r||"main"],l=n.pstyle(a+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(i.rscratch,"labelX",r),c=b(i.rscratch,"labelY",r),d=b(i.rscratch,"labelAngle",r),h=n.pstyle(a+"text-margin-x").pfValue,f=n.pstyle(a+"text-margin-y").pfValue,v=s.x1-o-h,y=s.x2+o-h,m=s.y1-o-f,x=s.y2+o-f;if(d){var w=Math.cos(d),E=Math.sin(d),k=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=k(v,m),C=k(v,x),P=k(y,m),S=k(y,x),B=[T.x+h,T.y+f,P.x+h,P.y+f,S.x+h,S.y+f,C.x+h,C.y+f];if(mn(e,t,B))return g(n),!0}else if(ln(s,e,t))return g(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){var a=this.getCachedZSortedEles().interactive,i=2/this.cy.zoom(),o=[],s=Math.min(e,n),l=Math.max(e,n),u=Math.min(t,r),c=Math.max(t,r),d=en({x1:e=s,y1:t=u,x2:n=l,y2:r=c});function h(e,t,n){return ft(e,t,n)}function f(e,t){var n=e._private,r=i;e.boundingBox();var a=n.labelBounds.main;if(!a)return null;var o=h(n.rscratch,"labelX",t),s=h(n.rscratch,"labelY",t),l=h(n.rscratch,"labelAngle",t),u=e.pstyle("text-margin-x").pfValue,c=e.pstyle("text-margin-y").pfValue,d=a.x1-r-u,f=a.x2+r-u,p=a.y1-r-c,v=a.y2+r-c;if(l){var g=Math.cos(l),y=Math.sin(l),m=function(e,t){return{x:(e-=o)*g-(t-=s)*y+o,y:e*y+t*g+s}};return[m(d,p),m(f,p),m(f,v),m(d,v)]}return[{x:d,y:p},{x:f,y:p},{x:f,y:v},{x:d,y:v}]}for(var p=0;p0?-(Math.PI-i.ang):Math.PI+i.ang),Lc(t,n,Nc),bc=Ic.nx*Nc.ny-Ic.ny*Nc.nx,xc=Ic.nx*Nc.nx-Ic.ny*-Nc.ny,kc=Math.asin(Math.max(-1,Math.min(1,bc))),Math.abs(kc)<1e-6)return yc=t.x,mc=t.y,void(Cc=Sc=0);wc=1,Ec=!1,xc<0?kc<0?kc=Math.PI+kc:(kc=Math.PI-kc,wc=-1,Ec=!0):kc>0&&(wc=-1,Ec=!0),Sc=void 0!==t.radius?t.radius:r,Tc=kc/2,Bc=Math.min(Ic.len/2,Nc.len/2),a?(Pc=Math.abs(Math.cos(Tc)*Sc/Math.sin(Tc)))>Bc?(Pc=Bc,Cc=Math.abs(Pc*Math.sin(Tc)/Math.cos(Tc))):Cc=Sc:(Pc=Math.min(Bc,Sc),Cc=Math.abs(Pc*Math.sin(Tc)/Math.cos(Tc))),Ac=t.x+Nc.nx*Pc,Mc=t.y+Nc.ny*Pc,yc=Ac-Nc.ny*Cc*wc,mc=Mc+Nc.nx*Cc*wc,Dc=t.x+Ic.nx*Pc,_c=t.y+Ic.ny*Pc,Rc=t};function Oc(e,t){0===t.radius?e.lineTo(t.cx,t.cy):e.arc(t.cx,t.cy,t.radius,t.startAngle,t.endAngle,t.counterClockwise)}function Vc(e,t,n,r){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];return 0===r||0===t.radius?{cx:t.x,cy:t.y,radius:0,startX:t.x,startY:t.y,stopX:t.x,stopY:t.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(zc(e,t,n,r,a),{cx:yc,cy:mc,radius:Cc,startX:Dc,startY:_c,stopX:Ac,stopY:Mc,startAngle:Ic.ang+Math.PI/2*wc,endAngle:Nc.ang-Math.PI/2*wc,counterClockwise:Ec})}var Fc=.01,jc=Math.sqrt(.02),Xc={};function qc(e){var t=[];if(null!=e){for(var n=0;n0?Math.max(e-t,0):Math.min(e+t,0)},S=P(T,E),B=P(C,k),D=!1;"auto"===g?v=Math.abs(S)>Math.abs(B)?a:r:g===l||g===s?(v=r,D=!0):g!==i&&g!==o||(v=a,D=!0);var _,A=v===r,M=A?B:S,R=A?C:T,I=Ht(R),N=!1;(D&&(m||x)||!(g===s&&R<0||g===l&&R>0||g===i&&R>0||g===o&&R<0)||(M=(I*=-1)*Math.abs(M),N=!0),m)?_=(b<0?1+b:b)*M:_=(b<0?M:0)+b*I;var L=function(e){return Math.abs(e)=Math.abs(M)},z=L(_),O=L(Math.abs(M)-Math.abs(_));if((z||O)&&!N)if(A){var V=Math.abs(R)<=d/2,F=Math.abs(T)<=h/2;if(V){var j=(u.x1+u.x2)/2,X=u.y1,q=u.y2;n.segpts=[j,X,j,q]}else if(F){var Y=(u.y1+u.y2)/2,W=u.x1,U=u.x2;n.segpts=[W,Y,U,Y]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(R)<=c/2,K=Math.abs(C)<=f/2;if(H){var G=(u.y1+u.y2)/2,Z=u.x1,$=u.x2;n.segpts=[Z,G,$,G]}else if(K){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(A){var te=u.y1+_+(p?d/2*I:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ae=u.x1+_+(p?c/2*I:0),ie=u.y1,oe=u.y2;n.segpts=[ae,ie,ae,oe]}if(n.isRound){var se=e.pstyle("taxi-radius").value,le="arc-radius"===e.pstyle("radius-type").value[0];n.radii=new Array(n.segpts.length/2).fill(se),n.isArcRadius=new Array(n.segpts.length/2).fill(le)}},Xc.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,a=t.tgtPos,i=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,d=t.srcCornerRadius,h=t.tgtCornerRadius,f=t.srcRs,p=t.tgtRs,v=!Q(n.startX)||!Q(n.startY),g=!Q(n.arrowStartX)||!Q(n.arrowStartY),y=!Q(n.endX)||!Q(n.endY),m=!Q(n.arrowEndX)||!Q(n.arrowEndY),b=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),x=Kt({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),w=xv.poolIndex()){var g=p;p=v,v=g}var y=d.srcPos=p.position(),m=d.tgtPos=v.position(),b=d.srcW=p.outerWidth(),x=d.srcH=p.outerHeight(),E=d.tgtW=v.outerWidth(),k=d.tgtH=v.outerHeight(),T=d.srcShape=n.nodeShapes[t.getNodeShape(p)],C=d.tgtShape=n.nodeShapes[t.getNodeShape(v)],P=d.srcCornerRadius="auto"===p.pstyle("corner-radius").value?"auto":p.pstyle("corner-radius").pfValue,S=d.tgtCornerRadius="auto"===v.pstyle("corner-radius").value?"auto":v.pstyle("corner-radius").pfValue,B=d.tgtRs=v._private.rscratch,D=d.srcRs=p._private.rscratch;d.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var _=0;_=jc||(Y=Math.sqrt(Math.max(q*q,Fc)+Math.max(X*X,Fc)));var W=d.vector={x:q,y:X},U=d.vectorNorm={x:W.x/Y,y:W.y/Y},H={x:-U.y,y:U.x};d.nodesOverlap=!Q(Y)||C.checkPoint(L[0],L[1],0,E,k,m.x,m.y,S,B)||T.checkPoint(O[0],O[1],0,b,x,y.x,y.y,P,D),d.vectorNormInverse=H,e={nodesOverlap:d.nodesOverlap,dirCounts:d.dirCounts,calculatedIntersection:!0,hasBezier:d.hasBezier,hasUnbundled:d.hasUnbundled,eles:d.eles,srcPos:m,srcRs:B,tgtPos:y,tgtRs:D,srcW:E,srcH:k,tgtW:b,tgtH:x,srcIntn:V,tgtIntn:z,srcShape:C,tgtShape:T,posPts:{x1:j.x2,y1:j.y2,x2:j.x1,y2:j.y1},intersectionPts:{x1:F.x2,y1:F.y2,x2:F.x1,y2:F.y1},vector:{x:-W.x,y:-W.y},vectorNorm:{x:-U.x,y:-U.y},vectorNormInverse:{x:-H.x,y:-H.y}}}var K=N?e:d;M.nodesOverlap=K.nodesOverlap,M.srcIntn=K.srcIntn,M.tgtIntn=K.tgtIntn,M.isRound=R.startsWith("round"),r&&(p.isParent()||p.isChild()||v.isParent()||v.isChild())&&(p.parents().anySame(v)||v.parents().anySame(p)||p.same(v)&&p.isParent())?t.findCompoundLoopPoints(A,K,_,I):p===v?t.findLoopPoints(A,K,_,I):R.endsWith("segments")?t.findSegmentsPoints(A,K):R.endsWith("taxi")?t.findTaxiPoints(A,K):"straight"===R||!I&&d.eles.length%2==1&&_===Math.floor(d.eles.length/2)?t.findStraightEdgePoints(A):t.findBezierPoints(A,K,_,I,N),t.findEndpoints(A),t.tryToCorrectInvalidPoints(A,K),t.checkForInvalidEdgeWarning(A),t.storeAllpts(A),t.storeEdgeProjections(A),t.calculateArrowAngles(A),t.recalculateEdgeLabelProjections(A),t.calculateLabelAngles(A)}},w=0;w0){var J=f,ee=Gt(J,Yt(i)),te=Gt(J,Yt($)),ne=ee;if(te2)Gt(J,{x:$[2],y:$[3]})0){var ge=p,ye=Gt(ge,Yt(i)),me=Gt(ge,Yt(ve)),be=ye;if(me2)Gt(ge,{x:ve[2],y:ve[3]})=u||m){c={cp:v,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-h)/x.length,E=x.t1-x.t0,k=s?x.t0+E*w:x.t1-E*w;k=Jt(0,k,1),t=Qt(b.p0,b.p1,b.p2,k),a=function(e,t,n,r){var a=Jt(0,r-.001,1),i=Jt(0,r+.001,1),o=Qt(e,t,n,a),s=Qt(e,t,n,i);return Gc(o,s)}(b.p0,b.p1,b.p2,k);break;case"straight":case"segments":case"haystack":for(var T,C,P,S,B=0,D=r.allpts.length,_=0;_+3=u));_+=2);var A=(u-C)/T;A=Jt(0,A,1),t=function(e,t,n,r){var a=t.x-e.x,i=t.y-e.y,o=Kt(e,t),s=a/o,l=i/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(P,S,A),a=Gc(P,S)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,a)}};u("source"),u("target"),this.applyLabelDimensions(e)}},Hc.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},Hc.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),a=Ue(r,e._private.labelDimsKey);if(ft(n.rscratch,"prefixedLabelDimsKey",t)!==a){pt(n.rscratch,"prefixedLabelDimsKey",t,a);var i=this.calculateLabelDimensions(e,r),o=e.pstyle("line-height").pfValue,s=e.pstyle("text-wrap").strValue,l=ft(n.rscratch,"labelWrapCachedLines",t)||[],u="wrap"!==s?1:Math.max(l.length,1),c=i.height/u,d=c*o,h=i.width,f=i.height+(u-1)*(o-1)*c;pt(n.rstyle,"labelWidth",t,h),pt(n.rscratch,"labelWidth",t,h),pt(n.rstyle,"labelHeight",t,f),pt(n.rscratch,"labelHeight",t,f),pt(n.rscratch,"labelLineHeight",t,d)}},Hc.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",a=e.pstyle(r+"label").strValue,i=e.pstyle("text-transform").value,s=function(e,r){return r?(pt(n.rscratch,e,t,r),r):ft(n.rscratch,e,t)};if(!a)return"";"none"==i||("uppercase"==i?a=a.toUpperCase():"lowercase"==i&&(a=a.toLowerCase()));var l=e.pstyle("text-wrap").value;if("wrap"===l){var u=s("labelKey");if(null!=u&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var c=a.split("\n"),d=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,f=[],p=/[\s\u200b]+|$/g,v=0;vd){var b,x="",w=0,E=o(g.matchAll(p));try{for(E.s();!(b=E.n()).done;){var k=b.value,T=k[0],C=g.substring(w,k.index);w=k.index+T.length;var P=0===x.length?C:x+C+T;this.calculateLabelDimensions(e,P).width<=d?x+=C+T:(x&&f.push(x),x=C+T)}}catch(A){E.e(A)}finally{E.f()}x.match(/^[\s\u200b]+$/)||f.push(x)}else f.push(g)}s("labelWrapCachedLines",f),a=s("labelWrapCachedText",f.join("\n")),s("labelWrapKey",u)}else if("ellipsis"===l){var S=e.pstyle("text-max-width").pfValue,B="",D=!1;if(this.calculateLabelDimensions(e,a).widthS)break;B+=a[_],_===a.length-1&&(D=!0)}return D||(B+="\u2026"),B}return a},Hc.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},Hc.calculateLabelDimensions=function(e,t){var n=this.cy.window().document,r=e.pstyle("font-style").strValue,a=e.pstyle("font-size").pfValue,i=e.pstyle("font-family").strValue,o=e.pstyle("font-weight").strValue,s=this.labelCalcCanvas,l=this.labelCalcCanvasContext;if(!s){s=this.labelCalcCanvas=n.createElement("canvas"),l=this.labelCalcCanvasContext=s.getContext("2d");var u=s.style;u.position="absolute",u.left="-9999px",u.top="-9999px",u.zIndex="-1",u.visibility="hidden",u.pointerEvents="none"}l.font="".concat(r," ").concat(o," ").concat(a,"px ").concat(i);for(var c=0,d=0,h=t.split("\n"),f=0;f1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var P=a(t);g&&(e.hoverData.tapholdCancelled=!0);n=!0,r(v,["mousemove","vmousemove","tapdrag"],t,{x:c[0],y:c[1]});var S=function(e){return{originalEvent:t,type:e,position:{x:c[0],y:c[1]}}},B=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit(S("boxstart")),p[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(g){var D=S("cxtdrag");b?b.emit(D):o.emit(D),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&v===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit(S("cxtdragout")),e.hoverData.cxtOver=v,v&&v.emit(S("cxtdragover")))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var _;if(e.hoverData.justStartedPan){var A=e.hoverData.mdownPos;_={x:(c[0]-A[0])*s,y:(c[1]-A[1])*s},e.hoverData.justStartedPan=!1}else _={x:x[0]*s,y:x[1]*s};o.panBy(_),o.emit(S("dragpan")),e.hoverData.dragged=!0}c=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=p[4]||null!=b&&!b.pannable()){if(b&&b.pannable()&&b.active()&&b.unactivate(),b&&b.grabbed()||v==y||(y&&r(y,["mouseout","tapdragout"],t,{x:c[0],y:c[1]}),v&&r(v,["mouseover","tapdragover"],t,{x:c[0],y:c[1]}),e.hoverData.last=v),b)if(g){if(o.boxSelectionEnabled()&&P)b&&b.grabbed()&&(d(w),b.emit(S("freeon")),w.emit(S("free")),e.dragData.didDrag&&(b.emit(S("dragfreeon")),w.emit(S("dragfree")))),B();else if(b&&b.grabbed()&&e.nodeIsDraggable(b)){var M=!e.dragData.didDrag;M&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||u(w,{inDragLayer:!0});var R={x:0,y:0};if(Q(x[0])&&Q(x[1])&&(R.x+=x[0],R.y+=x[1],M)){var I=e.hoverData.dragDelta;I&&Q(I[0])&&Q(I[1])&&(R.x+=I[0],R.y+=I[1])}e.hoverData.draggingEles=!0,w.silentShift(R).emit(S("position")).emit(S("drag")),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(x[0]),t.push(x[1])):(t[0]+=x[0],t[1]+=x[1])}();n=!0}else if(g){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!P&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){i(b,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,p[4]=0,e.data.bgActivePosistion=Yt(h),e.redrawHint("select",!0),e.redraw())}}else B();b&&b.pannable()&&b.active()&&b.unactivate()}return p[2]=c[0],p[3]=c[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}},!1),e.registerBinding(t,"mouseup",function(t){if((1!==e.hoverData.which||1===t.which||!e.hoverData.capture)&&e.hoverData.capture){e.hoverData.capture=!1;var i=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=a(t);e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate();var f=function(e){return{originalEvent:t,type:e,position:{x:o[0],y:o[1]}}};if(3===e.hoverData.which){var p=f("cxttapend");if(c?c.emit(p):i.emit(p),!e.hoverData.cxtDragged){var v=f("cxttap");c?c.emit(v):i.emit(v)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=i.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout(function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})},i.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||a(t)||(i.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=i.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===i.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(i.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=i.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),i.emit(f("boxend"));var y=function(e){return e.selectable()&&!e.selected()};"additive"===i.selectionType()||h||i.$(n).unmerge(g).unselect(),g.emit(f("box")).stdFilter(y).select().emit(f("boxselect")),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var m=c&&c.grabbed();d(u),m&&(c.emit(f("freeon")),u.emit(f("free")),e.dragData.didDrag&&(c.emit(f("dragfreeon")),u.emit(f("dragfree"))))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null,e.hoverData.which=null}},!1);var k,T,C,P,S,B,D,_,A,M,R,I,N,L,z=[],O=1e5,V=function(t){var n=!1,r=t.deltaY;if(null==r&&(null!=t.wheelDeltaY?r=t.wheelDeltaY/4:null!=t.wheelDelta&&(r=t.wheelDelta/4)),null==k)if(z.length>=4){var a=z;if(k=function(e,t){for(var n=0;n5}if(k)for(var o=0;o5&&(r=5*Ht(r)),h=r/-250,k&&(h/=O,h*=3),h*=e.wheelSensitivity,1===t.deltaMode&&(h*=33);var f=s.zoom()*Math.pow(10,h);"gesturechange"===t.type&&(f=e.gestureStartZoom*t.scale),s.zoom({level:f,renderedPosition:{x:d[0],y:d[1]}}),s.emit({type:"gesturechange"===t.type?"pinchzoom":"scrollzoom",originalEvent:t,position:{x:c[0],y:c[1]}})}}};e.registerBinding(e.container,"wheel",V,!0),e.registerBinding(t,"scroll",function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout(function(){e.scrollingPage=!1},250)},!0),e.registerBinding(e.container,"gesturestart",function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()},!0),e.registerBinding(e.container,"gesturechange",function(t){e.hasTouchStarted||V(t)},!0),e.registerBinding(e.container,"mouseout",function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})},!1),e.registerBinding(e.container,"mouseover",function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})},!1);var F,j,X,q,Y,W,U,H=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},K=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",F=function(t){if(e.hasTouchStarted=!0,m(t)){f(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,a=e.touchData.now,i=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);a[0]=o[0],a[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);a[2]=o[0],a[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);a[4]=o[0],a[5]=o[1]}var l=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(t.touches[1]){e.touchData.singleTouchMoved=!0,d(e.dragData.touchDragEles);var h=e.findContainerClientCoords();M=h[0],R=h[1],I=h[2],N=h[3],T=t.touches[0].clientX-M,C=t.touches[0].clientY-R,P=t.touches[1].clientX-M,S=t.touches[1].clientY-R,L=0<=T&&T<=I&&0<=P&&P<=I&&0<=C&&C<=N&&0<=S&&S<=N;var p=n.pan(),v=n.zoom();B=H(T,C,P,S),D=K(T,C,P,S),A=[((_=[(T+P)/2,(C+S)/2])[0]-p.x)/v,(_[1]-p.y)/v];if(D<4e4&&!t.touches[2]){var g=e.findNearestElement(a[0],a[1],!0,!0),y=e.findNearestElement(a[2],a[3],!0,!0);return g&&g.isNode()?(g.activate().emit(l("cxttapstart")),e.touchData.start=g):y&&y.isNode()?(y.activate().emit(l("cxttapstart")),e.touchData.start=y):n.emit(l("cxttapstart")),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var b=e.findNearestElements(a[0],a[1],!0,!0),x=b[0];if(null!=x&&(x.activate(),e.touchData.start=x,e.touchData.starts=b,e.nodeIsGrabbable(x))){var w=e.dragData.touchDragEles=n.collection(),E=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),x.selected()?(E=n.$(function(t){return t.selected()&&e.nodeIsGrabbable(t)}),u(E,{addToList:w})):c(x,{addToList:w}),s(x),x.emit(l("grabon")),E?E.forEach(function(e){e.emit(l("grab"))}):x.emit(l("grab"))}r(x,["touchstart","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==x&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout(function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:a[0],y:a[1]})},e.tapholdDuration)}if(t.touches.length>=1){for(var k=e.touchData.startPosition=[null,null,null,null,null,null],z=0;z=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var E=t.touches[0].clientX-M,k=t.touches[0].clientY-R,_=t.touches[1].clientX-M,I=t.touches[1].clientY-R,N=K(E,k,_,I);if(N/D>=2.25||N>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var z=p("cxttapend");e.touchData.start?(e.touchData.start.unactivate().emit(z),e.touchData.start=null):o.emit(z)}}if(n&&e.touchData.cxt){z=p("cxtdrag");e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(z):o.emit(z),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var O=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&O===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit(p("cxtdragout")),e.touchData.cxtOver=O,O&&O.emit(p("cxtdragover")))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit(p("boxstart")),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),te=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var V=0;V0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",X=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",q=function(t){var a=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var i=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o=e.cy,s=o.zoom(),l=e.touchData.now,u=e.touchData.earlier;if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);l[0]=c[0],l[1]=c[1]}if(t.touches[1]){c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);l[2]=c[0],l[3]=c[1]}if(t.touches[2]){c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);l[4]=c[0],l[5]=c[1]}var h,f=function(e){return{originalEvent:t,type:e,position:{x:l[0],y:l[1]}}};if(a&&a.unactivate(),e.touchData.cxt){if(h=f("cxttapend"),a?a.emit(h):o.emit(h),!e.touchData.cxtDragged){var p=f("cxttap");a?a.emit(p):o.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&o.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var v=o.collection(e.getAllInBox(i[0],i[1],i[2],i[3]));i[0]=void 0,i[1]=void 0,i[2]=void 0,i[3]=void 0,i[4]=0,e.redrawHint("select",!0),o.emit(f("boxend"));v.emit(f("box")).stdFilter(function(e){return e.selectable()&&!e.selected()}).select().emit(f("boxselect")),v.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=a&&a.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var g=e.dragData.touchDragEles;if(null!=a){var y=a._private.grabbed;d(g),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(a.emit(f("freeon")),g.emit(f("free")),e.dragData.didDrag&&(a.emit(f("dragfreeon")),g.emit(f("dragfree")))),r(a,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]}),a.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(l[0],l[1],!0,!0);r(m,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]})}var b=e.touchData.startPosition[0]-l[0],x=b*b,w=e.touchData.startPosition[1]-l[1],E=(x+w*w)*s*s;e.touchData.singleTouchMoved||(a||o.$(":selected").unselect(["tapunselect"]),r(a,["tap","vclick"],t,{x:l[0],y:l[1]}),Y=!1,t.timeStamp-U<=o.multiClickDebounceTime()?(W&&clearTimeout(W),Y=!0,U=null,r(a,["dbltap","vdblclick"],t,{x:l[0],y:l[1]})):(W=setTimeout(function(){Y||r(a,["onetap","voneclick"],t,{x:l[0],y:l[1]})},o.multiClickDebounceTime()),U=t.timeStamp)),null!=a&&!e.dragData.didDrag&&a._private.selectable&&E2){for(var f=[c[0],c[1]],p=Math.pow(f[0]-e,2)+Math.pow(f[1]-t,2),v=1;v0)return v[0]}return null},f=Object.keys(d),p=0;p0?u:fn(a,i,e,t,n,r,o,s)},checkPoint:function(e,t,n,r,a,i,o,s){var l=2*(s="auto"===s?Mn(r,a):s);if(bn(e,t,this.points,i,o,r,a-l,[0,-1],n))return!0;if(bn(e,t,this.points,i,o,r-l,a,[0,-1],n))return!0;var u=r/2+2*n,c=a/2+2*n;return!!mn(e,t,[i-u,o-c,i-u,o,i+u,o,i+u,o-c])||(!!En(e,t,l,l,i+r/2-s,o+a/2-s,n)||!!En(e,t,l,l,i-r/2+s,o+a/2-s,n))}}},rd.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",Dn(3,0)),this.generateRoundPolygon("round-triangle",Dn(3,0)),this.generatePolygon("rectangle",Dn(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",Dn(5,0)),this.generateRoundPolygon("round-pentagon",Dn(5,0)),this.generatePolygon("hexagon",Dn(6,0)),this.generateRoundPolygon("round-hexagon",Dn(6,0)),this.generatePolygon("heptagon",Dn(7,0)),this.generateRoundPolygon("round-heptagon",Dn(7,0)),this.generatePolygon("octagon",Dn(8,0)),this.generateRoundPolygon("round-octagon",Dn(8,0));var r=new Array(20),a=An(5,0),i=An(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*v)break}else if(a){if(f>=e.deqCost*l||f>=e.deqAvgCost*s)break}else if(p>=e.deqNoDrawCost*ld)break;var g=e.deq(t,d,c);if(!(g.length>0))break;for(var y=0;y0&&(e.onDeqd(t,u),!a&&e.shouldRedraw(t,u,d,c)&&r())},a(t))}}},cd=function(){return i(function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:et;a(this,e),this.idsByKey=new vt,this.keyForId=new vt,this.cachesByLvl=new vt,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n},[{key:"getIdsFor",value:function(e){null==e&&rt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new yt,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new vt,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach(function(n){return t.deleteCache(e,n)})}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}])}(),dd=7.99,hd={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},fd=ct({getKey:null,doesEleInvalidateKey:et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Je,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),pd=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=fd(t);be(n,r),n.lookup=new cd(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},vd=pd.prototype;vd.reasons=hd,vd.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},vd.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},vd.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new Bt(function(e,t){return t.reqs-e.reqs})},vd.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},vd.getElement=function(e,t,n,r,a){var i=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!i.allowEdgeTxrCaching&&e.isEdge()||!i.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(Ut(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var u=Math.pow(2,r),c=t.h*u,d=t.w*u,h=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,h))return null;var f,p=l.get(e,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(f=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||d>1024)return null;var v=i.getTextureQueue(f),g=v[v.length-2],y=function(){return i.recycleTexture(f,d)||i.addTexture(f,d)};g||(g=v[v.length-1]),g||(g=y()),g.width-g.usedWidthr;S--)C=i.getElement(e,t,n,S,hd.downscale);P()}else{var B;if(!x&&!w&&!E)for(var D=r-1;D>=-4;D--){var _=l.get(e,D);if(_){B=_;break}}if(b(B))return i.queueElement(e,r),B;g.context.translate(g.usedWidth,0),g.context.scale(u,u),this.drawElement(g.context,e,t,h,!1),g.context.scale(1/u,1/u),g.context.translate(-g.usedWidth,0)}return p={x:g.usedWidth,texture:g,level:r,scale:u,width:d,height:c,scaledLabelShown:h},g.usedWidth+=Math.ceil(d+8),g.eleCaches.push(p),l.set(e,r,p),i.checkTextureFullness(g),p},vd.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},vd.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?dt(t,e):e.fullnessChecks++},vd.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;dt(n,e),e.retired=!0;for(var a=e.eleCaches,i=0;i=t)return i.retired=!1,i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,ht(i.eleCaches),i.context.setTransform(1,0,0,1,0,0),i.context.clearRect(0,0,i.width,i.height),dt(r,i),n.push(i),i}},vd.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),a=this.getKey(e),i=r[a];if(i)i.level=Math.max(i.level,t),i.eles.merge(e),i.reqs++,n.updateItem(i);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:a};n.push(o),r[a]=o}},vd.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),a=[],i=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=i.hasCache(u,s.level);if(r[l]=null,!c){a.push(s);var d=t.getBoundingBox(u);t.getElement(u,d,e,s.level,hd.dequeue)}}return a},vd.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),a=n[r];null!=a&&(1===a.eles.length?(a.reqs=Qe,t.updateItem(a),t.pop(),n[r]=null):a.eles.unmerge(e))},vd.onDequeue=function(e){this.onDequeues.push(e)},vd.offDequeue=function(e){dt(this.onDequeues,e)},vd.setupDequeueing=ud({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},a=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};a(1),a(-1);for(var i=c.length-1;i>=0;i--){var o=c[i];o.invalid&&dt(c,o)}}();var d=function(t){var a=(t=t||{}).after;!function(){if(!o){o=en();for(var t=0;t32767||s>32767)return null;if(i*s>16e6)return null;var l=r.makeLayer(o,n);if(null!=a){var d=c.indexOf(a)+1;c.splice(d,0,l)}else(void 0===t.insert||t.insert)&&c.unshift(l);return l};if(r.skipping&&!i)return null;for(var h=null,f=e.length/1,p=!i,v=0;v=f||!cn(h.bb,g.boundingBox()))&&!(h=d({insert:!0,after:h})))return null;s||p?r.queueLayer(h,g):r.drawEleInLayer(h,g,n,t),h.eles.push(g),m[n]=h}}return s||(p?null:c)},yd.getEleLevelForLayerLevel=function(e,t){return e},yd.drawEleInLayer=function(e,t,n,r){var a=this.renderer,i=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(i,!1),a.drawCachedElement(i,t,null,null,n,true),a.setImgSmoothing(i,!0))},yd.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,a=0;a0)return!1;if(i.invalid)return!1;r+=i.eles.length}return r===t.length},yd.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},yd.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=ze(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,function(e,n,r){t.invalidateLayer(e)}))},yd.invalidateLayer=function(e){if(this.lastInvalidationTime=ze(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];dt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var a=0;a3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!i||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=i?t.pstyle("opacity").value:1,c=i?t.pstyle("line-opacity").value:1,d=t.pstyle("curve-style").value,h=t.pstyle("line-style").value,f=t.pstyle("width").pfValue,p=t.pstyle("line-cap").value,v=t.pstyle("line-outline-width").value,g=t.pstyle("line-outline-color").value,y=u*c,m=u*c,b=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;"straight-triangle"===d?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=f,e.lineCap=p,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:m;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var w=t.pstyle("ghost-offset-x").pfValue,E=t.pstyle("ghost-offset-y").pfValue,k=t.pstyle("ghost-opacity").value,T=y*k;e.translate(w,E),b(T),x(T),e.translate(-w,-E)}else!function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;e.lineWidth=f+v,e.lineCap=p,v>0?(o.colorStrokeStyle(e,g[0],g[1],g[2],n),"straight-triangle"===d?o.drawEdgeTrianglePath(t,e,s.allpts):(o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")):e.lineCap="butt"}();a&&o.drawEdgeUnderlay(e,t),b(),x(),a&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},Nd=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var a=this,i=a.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||i?t.lineCap="round":t.lineCap="butt",a.colorStrokeStyle(t,l[0],l[1],l[2],r),a.drawEdgePath(n,t,o.allpts,"solid")}}}};Id.drawEdgeOverlay=Nd("overlay"),Id.drawEdgeUnderlay=Nd("underlay"),Id.drawEdgePath=function(e,t,n,r){var a,i=e._private.rscratch,s=t,l=!1,u=this.usePaths(),c=e.pstyle("line-dash-pattern").pfValue,d=e.pstyle("line-dash-offset").pfValue;if(u){var h=n.join("$");i.pathCacheKey&&i.pathCacheKey===h?(a=t=i.pathCache,l=!0):(a=t=new Path2D,i.pathCacheKey=h,i.pathCache=a)}if(s.setLineDash)switch(r){case"dotted":s.setLineDash([1,1]);break;case"dashed":s.setLineDash(c),s.lineDashOffset=d;break;case"solid":s.setLineDash([])}if(!l&&!i.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var f=2;f+35&&void 0!==arguments[5]?arguments[5]:5,o=arguments.length>6?arguments[6]:void 0;e.beginPath(),e.moveTo(t+i,n),e.lineTo(t+r-i,n),e.quadraticCurveTo(t+r,n,t+r,n+i),e.lineTo(t+r,n+a-i),e.quadraticCurveTo(t+r,n+a,t+r-i,n+a),e.lineTo(t+i,n+a),e.quadraticCurveTo(t,n+a,t,n+a-i),e.lineTo(t,n+i),e.quadraticCurveTo(t,n,t+i,n),e.closePath(),o?e.stroke():e.fill()}zd.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),a=Math.ceil(Ut(n*r));t=Math.pow(2,a)}return!(e.pstyle("font-size").pfValue*t5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(i&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),d=t.pstyle("source-label"),h=t.pstyle("target-label");if(u||(!c||!c.value)&&(!d||!d.value)&&(!h||!h.value))return;e.textAlign="center",e.textBaseline="bottom"}var f,p=!n;n&&(f=n,e.translate(-f.x1,-f.y1)),null==a?(o.drawText(e,t,null,p,i),t.isEdge()&&(o.drawText(e,t,"source",p,i),o.drawText(e,t,"target",p,i))):o.drawText(e,t,a,p,i),n&&e.translate(f.x1,f.y1)},zd.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,a=t.pstyle("font-size").pfValue+"px",i=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+a+" "+i,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},zd.getTextAngle=function(e,t){var n,r=e._private.rscratch,a=t?t+"-":"",i=e.pstyle(a+"text-rotation");if("autorotate"===i.strValue){var o=ft(r,"labelAngle",t);n=e.isEdge()?o:0}else n="none"===i.strValue?0:i.pfValue;return n},zd.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=t._private.rscratch,o=a?t.effectiveOpacity():1;if(!a||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=ft(i,"labelX",n),c=ft(i,"labelY",n),d=this.getLabelText(t,n);if(null!=d&&""!==d&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,a);var h,f=n?n+"-":"",p=ft(i,"labelWidth",n),v=ft(i,"labelHeight",n),g=t.pstyle(f+"text-margin-x").pfValue,y=t.pstyle(f+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=g,c+=y,0!==(h=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(h),u=0,c=0),x){case"top":break;case"center":c+=v/2;break;case"bottom":c+=v}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,k=t.pstyle("text-border-width").pfValue,T=t.pstyle("text-background-padding").pfValue,C=0===t.pstyle("text-background-shape").strValue.indexOf("round");if(w>0||k>0&&E>0){var P=u-T;switch(b){case"left":P-=p;break;case"center":P-=p/2}var S=c-v-T,B=p+2*T,D=v+2*T;if(w>0){var _=e.fillStyle,A=t.pstyle("text-background-color").value;e.fillStyle="rgba("+A[0]+","+A[1]+","+A[2]+","+w*o+")",C?Od(e,P,S,B,D,2):e.fillRect(P,S,B,D),e.fillStyle=_}if(k>0&&E>0){var M=e.strokeStyle,R=e.lineWidth,I=t.pstyle("text-border-color").value,N=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+I[0]+","+I[1]+","+I[2]+","+E*o+")",e.lineWidth=k,e.setLineDash)switch(N){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=k/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(C?Od(e,P,S,B,D,2,"stroke"):e.strokeRect(P,S,B,D),"double"===N){var L=k/2;C?Od(e,P+L,S+L,B-2*L,D-2*L,2,"stroke"):e.strokeRect(P+L,S+L,B-2*L,D-2*L)}e.setLineDash&&e.setLineDash([]),e.lineWidth=R,e.strokeStyle=M}}var z=2*t.pstyle("text-outline-width").pfValue;if(z>0&&(e.lineWidth=z),"wrap"===t.pstyle("text-wrap").value){var O=ft(i,"labelWrapCachedLines",n),V=ft(i,"labelLineHeight",n),F=p/2,j=this.getLabelJustification(t);switch("auto"===j||("left"===b?"left"===j?u+=-p:"center"===j&&(u+=-F):"center"===b?"left"===j?u+=-F:"right"===j&&(u+=F):"right"===b&&("center"===j?u+=F:"right"===j&&(u+=p))),x){case"top":case"center":case"bottom":c-=(O.length-1)*V}for(var X=0;X0&&e.strokeText(O[X],u,c),e.fillText(O[X],u,c),c+=V}else z>0&&e.strokeText(d,u,c),e.fillText(d,u,c);0!==h&&(e.rotate(-h),e.translate(-s,-l))}}};var Vd={drawNode:function(e,t,n){var r,a,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,d=t.position();if(Q(d.x)&&Q(d.y)&&(!s||t.visible())){var h,f,p=s?t.effectiveOpacity():1,v=l.usePaths(),g=!1,y=t.padding();r=t.width()+2*y,a=t.height()+2*y,n&&(f=n,e.translate(-f.x1,-f.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E0&&void 0!==arguments[0]?arguments[0]:S;l.eleFillStyle(e,t,n)},q=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:N;l.colorStrokeStyle(e,B[0],B[1],B[2],t)},Y=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V;l.colorStrokeStyle(e,z[0],z[1],z[2],t)},W=function(e,t,n,r){var a,i=l.nodePathCache=l.nodePathCache||[],o=He("polygon"===n?n+","+r.join(","):n,""+t,""+e,""+j),s=i[o],u=!1;return null!=s?(a=s,u=!0,c.pathCache=a):(a=new Path2D,i[o]=c.pathCache=a),{path:a,cacheHit:u}},U=t.pstyle("shape").strValue,H=t.pstyle("shape-polygon-points").pfValue;if(v){e.translate(d.x,d.y);var K=W(r,a,U,H);h=K.path,g=K.cacheHit}var G=function(){if(!g){var n=d;v&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(h||e,n.x,n.y,r,a,j,c)}v?e.fill(h):e.fill()},Z=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=u.backgrounding,i=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;l.hasPie(t)&&(l.drawPie(e,t,i),n&&(v||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,j,c)))},J=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;l.hasStripe(t)&&(e.save(),v?e.clip(c.pathCache):(l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,j,c),e.clip()),l.drawStripe(e,t,i),e.restore(),n&&(v||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,j,c)))},ee=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:p),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),v?e.fill(h):e.fill())},te=function(){if(P>0){if(e.lineWidth=P,e.lineCap=A,e.lineJoin=_,e.setLineDash)switch(D){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash(R),e.lineDashOffset=I;break;case"solid":case"double":e.setLineDash([])}if("center"!==M){if(e.save(),e.lineWidth*=2,"inside"===M)v?e.clip(h):e.clip();else{var t=new Path2D;t.rect(-r/2-P,-a/2-P,r+2*P,a+2*P),t.addPath(h),e.clip(t,"evenodd")}v?e.stroke(h):e.stroke(),e.restore()}else v?e.stroke(h):e.stroke();if("double"===D){e.lineWidth=P/3;var n=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",v?e.stroke(h):e.stroke(),e.globalCompositeOperation=n}e.setLineDash&&e.setLineDash([])}},ne=function(){if(L>0){if(e.lineWidth=L,e.lineCap="butt",e.setLineDash)switch(O){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=d;v&&(n={x:0,y:0});var i=l.getNodeShape(t),o=P;"inside"===M&&(o=0),"outside"===M&&(o*=2);var s,u=(r+o+(L+F))/r,c=(a+o+(L+F))/a,h=r*u,f=a*c,p=l.nodeShapes[i].points;if(v)s=W(h,f,i,p).path;if("ellipse"===i)l.drawEllipsePath(s||e,n.x,n.y,h,f);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(i)){var g=0,y=0,m=0;"round-diamond"===i?g=1.4*(o+F+L):"round-heptagon"===i?(g=1.075*(o+F+L),m=-(o/2+F+L)/35):"round-hexagon"===i?g=1.12*(o+F+L):"round-pentagon"===i?(g=1.13*(o+F+L),m=-(o/2+F+L)/15):"round-tag"===i?(g=1.12*(o+F+L),y=.07*(o/2+L+F)):"round-triangle"===i&&(g=(o+F+L)*(Math.PI/2),m=-(o+F/2+L)/Math.PI),0!==g&&(h=r*(u=(r+g)/r),["round-hexagon","round-tag"].includes(i)||(f=a*(c=(a+g)/a)));for(var b=h/2,x=f/2,w=(j="auto"===j?Rn(h,f):j)+(o+L+F)/2,E=new Array(p.length/2),k=new Array(p.length/2),T=0;T0){if(r=r||n.position(),null==a||null==i){var d=n.padding();a=n.width()+2*d,i=n.height()+2*d}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,a+2*o,i+2*o,c),t.fill()}}}};Vd.drawNodeOverlay=Fd("overlay"),Vd.drawNodeUnderlay=Fd("underlay"),Vd.hasPie=function(e){return(e=e[0])._private.hasPie},Vd.hasStripe=function(e){return(e=e[0])._private.hasStripe},Vd.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var a,i=t.cy().style(),o=t.pstyle("pie-size"),s=t.pstyle("pie-hole"),l=t.pstyle("pie-start-angle").pfValue,u=r.x,c=r.y,d=t.width(),h=t.height(),f=Math.min(d,h)/2,p=0;if(this.usePaths()&&(u=0,c=0),"%"===o.units?f*=o.pfValue:void 0!==o.pfValue&&(f=o.pfValue/2),"%"===s.units?a=f*s.pfValue:void 0!==s.pfValue&&(a=s.pfValue/2),!(a>=f))for(var v=1;v<=i.pieBackgroundN;v++){var g=t.pstyle("pie-"+v+"-background-size").value,y=t.pstyle("pie-"+v+"-background-color").value,m=t.pstyle("pie-"+v+"-background-opacity").value*n,b=g/100;b+p>1&&(b=1-p);var x=1.5*Math.PI+2*Math.PI*p,w=(x+=l)+2*Math.PI*b;0===g||p>=1||p+b>1||(0===a?(e.beginPath(),e.moveTo(u,c),e.arc(u,c,f,x,w),e.closePath()):(e.beginPath(),e.arc(u,c,f,x,w),e.arc(u,c,a,w,x,!0),e.closePath()),this.colorFillStyle(e,y[0],y[1],y[2],m),e.fill(),p+=b)}},Vd.drawStripe=function(e,t,n,r){t=t[0],r=r||t.position();var a=t.cy().style(),i=r.x,o=r.y,s=t.width(),l=t.height(),u=0,c=this.usePaths();e.save();var d=t.pstyle("stripe-direction").value,h=t.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":e.rotate(-Math.PI/2)}var f=s,p=l;"%"===h.units?(f*=h.pfValue,p*=h.pfValue):void 0!==h.pfValue&&(f=h.pfValue,p=h.pfValue),c&&(i=0,o=0),o-=f/2,i-=p/2;for(var v=1;v<=a.stripeBackgroundN;v++){var g=t.pstyle("stripe-"+v+"-background-size").value,y=t.pstyle("stripe-"+v+"-background-color").value,m=t.pstyle("stripe-"+v+"-background-opacity").value*n,b=g/100;b+u>1&&(b=1-u),0===g||u>=1||u+b>1||(e.beginPath(),e.rect(i,o+p*u,f,p*b),e.closePath(),this.colorFillStyle(e,y[0],y[1],y[2],m),e.fill(),u+=b)}e.restore()};var jd,Xd={};function qd(e,t,n){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error(e.getShaderInfoLog(r));return r}function Yd(e,t,n){void 0===n&&(n=t);var r=e.makeOffscreenCanvas(t,n),a=r.context=r.getContext("2d");return r.clear=function(){return a.clearRect(0,0,r.width,r.height)},r.clear(),r}function Wd(e){var t=e.pixelRatio,n=e.cy.zoom(),r=e.cy.pan();return{zoom:n*t,pan:{x:r.x*t,y:r.y*t}}}function Ud(e){return"solid"===e.pstyle("background-fill").value&&("none"===e.pstyle("background-image").strValue&&(0===e.pstyle("border-width").value||(0===e.pstyle("border-opacity").value||"solid"===e.pstyle("border-style").value)))}function Hd(e,t){if(e.length!==t.length)return!1;for(var n=0;n>8&255)/255,n[2]=(e>>16&255)/255,n[3]=(e>>24&255)/255,n}function Zd(e){return e[0]+(e[1]<<8)+(e[2]<<16)+(e[3]<<24)}function $d(e,t){switch(t){case"float":return[1,e.FLOAT,4];case"vec2":return[2,e.FLOAT,4];case"vec3":return[3,e.FLOAT,4];case"vec4":return[4,e.FLOAT,4];case"int":return[1,e.INT,4];case"ivec2":return[2,e.INT,4]}}function Qd(e,t,n){switch(t){case e.FLOAT:return new Float32Array(n);case e.INT:return new Int32Array(n)}}function Jd(e,t,n,r,a,i){switch(t){case e.FLOAT:return new Float32Array(n.buffer,i*r,a);case e.INT:return new Int32Array(n.buffer,i*r,a)}}function eh(e,t,n,r){var a=l($d(e,n),3),i=a[0],o=a[1],s=a[2],u=Qd(e,o,t*i),c=i*s,d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,t*c,e.DYNAMIC_DRAW),e.enableVertexAttribArray(r),o===e.FLOAT?e.vertexAttribPointer(r,i,o,!1,c,0):o===e.INT&&e.vertexAttribIPointer(r,i,o,c,0),e.vertexAttribDivisor(r,1),e.bindBuffer(e.ARRAY_BUFFER,null);for(var h=new Array(t),f=0;ft.minMbLowQualFrames&&(t.motionBlurPxRatio=t.mbPxRBlurry)),t.clearingMotionBlur&&(t.motionBlurPxRatio=1),t.textureDrawLastFrame&&!d&&(c[t.NODE]=!0,c[t.SELECT_BOX]=!0);var m=n.style(),b=n.zoom(),x=void 0!==o?o:b,w=n.pan(),E={x:w.x,y:w.y},k={zoom:b,pan:{x:w.x,y:w.y}},T=t.prevViewport;void 0===T||k.zoom!==T.zoom||k.pan.x!==T.pan.x||k.pan.y!==T.pan.y||v&&!p||(t.motionBlurPxRatio=1),s&&(E=s),x*=l,E.x*=l,E.y*=l;var C=t.getCachedZSortedEles();function P(e,n,r,a,i){var o=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",t.colorFillStyle(e,255,255,255,t.motionBlurTransparency),e.fillRect(n,r,a,i),e.globalCompositeOperation=o}function S(e,n){var i,l,c,d;t.clearingMotionBlur||e!==u.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]?(i=E,l=x,c=t.canvasWidth,d=t.canvasHeight):(i={x:w.x*f,y:w.y*f},l=b*f,c=t.canvasWidth*f,d=t.canvasHeight*f),e.setTransform(1,0,0,1,0,0),"motionBlur"===n?P(e,0,0,c,d):r||void 0!==n&&!n||e.clearRect(0,0,c,d),a||(e.translate(i.x,i.y),e.scale(l,l)),s&&e.translate(s.x,s.y),o&&e.scale(o,o)}if(d||(t.textureDrawLastFrame=!1),d){if(t.textureDrawLastFrame=!0,!t.textureCache){t.textureCache={},t.textureCache.bb=n.mutableElements().boundingBox(),t.textureCache.texture=t.data.bufferCanvases[t.TEXTURE_BUFFER];var B=t.data.bufferContexts[t.TEXTURE_BUFFER];B.setTransform(1,0,0,1,0,0),B.clearRect(0,0,t.canvasWidth*t.textureMult,t.canvasHeight*t.textureMult),t.render({forcedContext:B,drawOnlyNodeLayer:!0,forcedPxRatio:l*t.textureMult}),(k=t.textureCache.viewport={zoom:n.zoom(),pan:n.pan(),width:t.canvasWidth,height:t.canvasHeight}).mpan={x:(0-k.pan.x)/k.zoom,y:(0-k.pan.y)/k.zoom}}c[t.DRAG]=!1,c[t.NODE]=!1;var D=u.contexts[t.NODE],_=t.textureCache.texture;k=t.textureCache.viewport;D.setTransform(1,0,0,1,0,0),h?P(D,0,0,k.width,k.height):D.clearRect(0,0,k.width,k.height);var A=m.core("outside-texture-bg-color").value,M=m.core("outside-texture-bg-opacity").value;t.colorFillStyle(D,A[0],A[1],A[2],M),D.fillRect(0,0,k.width,k.height);b=n.zoom();S(D,!1),D.clearRect(k.mpan.x,k.mpan.y,k.width/k.zoom/l,k.height/k.zoom/l),D.drawImage(_,k.mpan.x,k.mpan.y,k.width/k.zoom/l,k.height/k.zoom/l)}else t.textureOnViewport&&!r&&(t.textureCache=null);var R=n.extent(),I=t.pinching||t.hoverData.dragging||t.swipePanning||t.data.wheelZooming||t.hoverData.draggingEles||t.cy.animated(),N=t.hideEdgesOnViewport&&I,L=[];if(L[t.NODE]=!c[t.NODE]&&h&&!t.clearedForMotionBlur[t.NODE]||t.clearingMotionBlur,L[t.NODE]&&(t.clearedForMotionBlur[t.NODE]=!0),L[t.DRAG]=!c[t.DRAG]&&h&&!t.clearedForMotionBlur[t.DRAG]||t.clearingMotionBlur,L[t.DRAG]&&(t.clearedForMotionBlur[t.DRAG]=!0),c[t.NODE]||a||i||L[t.NODE]){var z=h&&!L[t.NODE]&&1!==f;S(D=r||(z?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]:u.contexts[t.NODE]),h&&!z?"motionBlur":void 0),N?t.drawCachedNodes(D,C.nondrag,l,R):t.drawLayeredElements(D,C.nondrag,l,R),t.debug&&t.drawDebugPoints(D,C.nondrag),a||h||(c[t.NODE]=!1)}if(!i&&(c[t.DRAG]||a||L[t.DRAG])){z=h&&!L[t.DRAG]&&1!==f;S(D=r||(z?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]:u.contexts[t.DRAG]),h&&!z?"motionBlur":void 0),N?t.drawCachedNodes(D,C.drag,l,R):t.drawCachedElements(D,C.drag,l,R),t.debug&&t.drawDebugPoints(D,C.drag),a||h||(c[t.DRAG]=!1)}if(this.drawSelectionRectangle(e,S),h&&1!==f){var O=u.contexts[t.NODE],V=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE],F=u.contexts[t.DRAG],j=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG],X=function(e,n,r){e.setTransform(1,0,0,1,0,0),r||!y?e.clearRect(0,0,t.canvasWidth,t.canvasHeight):P(e,0,0,t.canvasWidth,t.canvasHeight);var a=f;e.drawImage(n,0,0,t.canvasWidth*a,t.canvasHeight*a,0,0,t.canvasWidth,t.canvasHeight)};(c[t.NODE]||L[t.NODE])&&(X(O,V,L[t.NODE]),c[t.NODE]=!1),(c[t.DRAG]||L[t.DRAG])&&(X(F,j,L[t.DRAG]),c[t.DRAG]=!1)}t.prevViewport=k,t.clearingMotionBlur&&(t.clearingMotionBlur=!1,t.motionBlurCleared=!0,t.motionBlur=!0),h&&(t.motionBlurTimeout=setTimeout(function(){t.motionBlurTimeout=null,t.clearedForMotionBlur[t.NODE]=!1,t.clearedForMotionBlur[t.DRAG]=!1,t.motionBlur=!1,t.clearingMotionBlur=!d,t.mbFrames=0,c[t.NODE]=!0,c[t.DRAG]=!0,t.redraw()},100)),r||n.emit("render")},Xd.drawSelectionRectangle=function(e,t){var n=this,r=n.cy,a=n.data,i=r.style(),o=e.drawOnlyNodeLayer,s=e.drawAllLayers,l=a.canvasNeedsRedraw,u=e.forcedContext;if(n.showFps||!o&&l[n.SELECT_BOX]&&!s){var c=u||a.contexts[n.SELECT_BOX];if(t(c),1==n.selection[4]&&(n.hoverData.selecting||n.touchData.selecting)){var d=n.cy.zoom(),h=i.core("selection-box-border-width").value/d;c.lineWidth=h,c.fillStyle="rgba("+i.core("selection-box-color").value[0]+","+i.core("selection-box-color").value[1]+","+i.core("selection-box-color").value[2]+","+i.core("selection-box-opacity").value+")",c.fillRect(n.selection[0],n.selection[1],n.selection[2]-n.selection[0],n.selection[3]-n.selection[1]),h>0&&(c.strokeStyle="rgba("+i.core("selection-box-border-color").value[0]+","+i.core("selection-box-border-color").value[1]+","+i.core("selection-box-border-color").value[2]+","+i.core("selection-box-opacity").value+")",c.strokeRect(n.selection[0],n.selection[1],n.selection[2]-n.selection[0],n.selection[3]-n.selection[1]))}if(a.bgActivePosistion&&!n.hoverData.selecting){d=n.cy.zoom();var f=a.bgActivePosistion;c.fillStyle="rgba("+i.core("active-bg-color").value[0]+","+i.core("active-bg-color").value[1]+","+i.core("active-bg-color").value[2]+","+i.core("active-bg-opacity").value+")",c.beginPath(),c.arc(f.x,f.y,i.core("active-bg-size").pfValue/d,0,2*Math.PI),c.fill()}var p=n.lastRedrawTime;if(n.showFps&&p){p=Math.round(p);var v=Math.round(1e3/p),g="1 frame = "+p+" ms = "+v+" fps";if(c.setTransform(1,0,0,1,0,0),c.fillStyle="rgba(255, 0, 0, 0.75)",c.strokeStyle="rgba(255, 0, 0, 0.75)",c.font="30px Arial",!jd){var y=c.measureText(g);jd=y.actualBoundingBoxAscent}c.fillText(g,0,jd);c.strokeRect(0,jd+10,250,20),c.fillRect(0,jd+10,250*Math.min(v/60,1),20)}s||(l[n.SELECT_BOX]=!1)}};var th="undefined"!=typeof Float32Array?Float32Array:Array;function nh(){var e=new th(9);return th!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function rh(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function ah(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],h=n[0],f=n[1];return e[0]=r,e[1]=a,e[2]=i,e[3]=o,e[4]=s,e[5]=l,e[6]=h*r+f*o+u,e[7]=h*a+f*s+c,e[8]=h*i+f*l+d,e}function ih(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],h=Math.sin(n),f=Math.cos(n);return e[0]=f*r+h*o,e[1]=f*a+h*s,e[2]=f*i+h*l,e[3]=f*o-h*r,e[4]=f*s-h*a,e[5]=f*l-h*i,e[6]=u,e[7]=c,e[8]=d,e}function oh(e,t,n){var r=n[0],a=n[1];return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=a*t[3],e[4]=a*t[4],e[5]=a*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var sh=function(){return i(function e(t,n,r,i){a(this,e),this.debugID=Math.floor(1e4*Math.random()),this.r=t,this.texSize=n,this.texRows=r,this.texHeight=Math.floor(n/r),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=i(t,n,n),this.scratch=i(t,n,this.texHeight,"scratch")},[{key:"lock",value:function(){this.locked=!0}},{key:"getKeys",value:function(){return new Set(this.keyToLocation.keys())}},{key:"getScale",value:function(e){var t=e.w,n=e.h,r=this.texHeight,a=this.texSize,i=r/n,o=t*i,s=n*i;return o>a&&(o=t*(i=a/t),s=n*i),{scale:i,texW:o,texH:s}}},{key:"draw",value:function(e,t,n){var r=this;if(this.locked)throw new Error("can't draw, atlas is locked");var a=this.texSize,i=this.texRows,o=this.texHeight,s=this.getScale(t),l=s.scale,u=s.texW,c=s.texH,d=function(e,r){if(n&&r){var a=r.context,i=e.x,s=e.row,u=i,c=o*s;a.save(),a.translate(u,c),a.scale(l,l),n(a,t),a.restore()}},h=[null,null],f=function(){d(r.freePointer,r.canvas),h[0]={x:r.freePointer.x,y:r.freePointer.row*o,w:u,h:c},h[1]={x:r.freePointer.x+u,y:r.freePointer.row*o,w:0,h:c},r.freePointer.x+=u,r.freePointer.x==a&&(r.freePointer.x=0,r.freePointer.row++)},p=function(){r.freePointer.x=0,r.freePointer.row++};if(this.freePointer.x+u<=a)f();else{if(this.freePointer.row>=i-1)return!1;this.freePointer.x===a?(p(),f()):this.enableWrapping?function(){var e=r.scratch,t=r.canvas;e.clear(),d({x:0,row:0},e);var n=a-r.freePointer.x,i=u-n,s=o,l=r.freePointer.x,f=r.freePointer.row*o,p=n;t.context.drawImage(e,0,0,p,s,l,f,p,s),h[0]={x:l,y:f,w:p,h:c};var v=n,g=(r.freePointer.row+1)*o,y=i;t&&t.context.drawImage(e,v,0,y,s,0,g,y,s),h[1]={x:0,y:g,w:y,h:c},r.freePointer.x=i,r.freePointer.row++}():(p(),f())}return this.keyToLocation.set(e,h),this.needsBuffer=!0,h}},{key:"getOffsets",value:function(e){return this.keyToLocation.get(e)}},{key:"isEmpty",value:function(){return 0===this.freePointer.x&&0===this.freePointer.row}},{key:"canFit",value:function(e){if(this.locked)return!1;var t=this.texSize,n=this.texRows,r=this.getScale(e).texW;return!(this.freePointer.x+r>t)||this.freePointer.row1&&void 0!==arguments[1]?arguments[1]:{},a=r.forceRedraw,i=void 0!==a&&a,s=r.filterEle,l=void 0===s?function(){return!0}:s,u=r.filterType,c=void 0===u?function(){return!0}:u,d=!1,h=!1,f=o(e);try{for(f.s();!(t=f.n()).done;){var p=t.value;if(l(p)){var v,g=o(this.renderTypes.values());try{var y=function(){var e=v.value,t=e.type;if(c(t)){var r=n.collections.get(e.collection),a=e.getKey(p),o=Array.isArray(a)?a:[a];if(i)o.forEach(function(e){return r.markKeyForGC(e)}),h=!0;else{var s=e.getID?e.getID(p):p.id(),l=n._key(t,s),u=n.typeAndIdToKey.get(l);void 0===u||Hd(o,u)||(d=!0,n.typeAndIdToKey.delete(l),u.forEach(function(e){return r.markKeyForGC(e)}))}}};for(g.s();!(v=g.n()).done;)y()}catch(m){g.e(m)}finally{g.f()}}}}catch(m){f.e(m)}finally{f.f()}return h&&(this.gc(),d=!1),d}},{key:"gc",value:function(){var e,t=o(this.collections.values());try{for(t.s();!(e=t.n()).done;){e.value.gc()}}catch(n){t.e(n)}finally{t.f()}}},{key:"getOrCreateAtlas",value:function(e,t,n,r){var a=this.renderTypes.get(t),i=this.collections.get(a.collection),o=!1,s=i.draw(r,n,function(t){a.drawClipped?(t.save(),t.beginPath(),t.rect(0,0,n.w,n.h),t.clip(),a.drawElement(t,e,n,!0,!0),t.restore()):a.drawElement(t,e,n,!0,!0),o=!0});if(o){var l=a.getID?a.getID(e):e.id(),u=this._key(t,l);this.typeAndIdToKey.has(u)?this.typeAndIdToKey.get(u).push(r):this.typeAndIdToKey.set(u,[r])}return s}},{key:"getAtlasInfo",value:function(e,t){var n=this,r=this.renderTypes.get(t),a=r.getKey(e);return(Array.isArray(a)?a:[a]).map(function(a){var i=r.getBoundingBox(e,a),o=n.getOrCreateAtlas(e,t,i,a),s=l(o.getOffsets(a),2),u=s[0];return{atlas:o,tex:u,tex1:u,tex2:s[1],bb:i}})}},{key:"getDebugInfo",value:function(){var e,t=[],n=o(this.collections);try{for(n.s();!(e=n.n()).done;){var r=l(e.value,2),a=r[0],i=r[1].getCounts(),s=i.keyCount,u=i.atlasCount;t.push({type:a,keyCount:s,atlasCount:u})}}catch(c){n.e(c)}finally{n.f()}return t}}])}(),ch=function(){return i(function e(t){a(this,e),this.globalOptions=t,this.atlasSize=t.webglTexSize,this.maxAtlasesPerBatch=t.webglTexPerBatch,this.batchAtlases=[]},[{key:"getMaxAtlasesPerBatch",value:function(){return this.maxAtlasesPerBatch}},{key:"getAtlasSize",value:function(){return this.atlasSize}},{key:"getIndexArray",value:function(){return Array.from({length:this.maxAtlasesPerBatch},function(e,t){return t})}},{key:"startBatch",value:function(){this.batchAtlases=[]}},{key:"getAtlasCount",value:function(){return this.batchAtlases.length}},{key:"getAtlases",value:function(){return this.batchAtlases}},{key:"canAddToCurrentBatch",value:function(e){return this.batchAtlases.length!==this.maxAtlasesPerBatch||this.batchAtlases.includes(e)}},{key:"getAtlasIndexForBatch",value:function(e){var t=this.batchAtlases.indexOf(e);if(t<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(e),t=this.batchAtlases.length-1}return t}}])}(),dh={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},hh=1,fh=2,ph=function(){return i(function e(t,n,r){a(this,e),this.r=t,this.gl=n,this.maxInstances=r.webglBatchSize,this.atlasSize=r.webglTexSize,this.bgColor=r.bgColor,this.debug=r.webglDebug,this.batchDebugInfo=[],r.enableWrapping=!0,r.createTextureCanvas=Yd,this.atlasManager=new uh(t,r),this.batchManager=new ch(r),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(dh.SCREEN),this.pickingProgram=this._createShaderProgram(dh.PICKING),this.vao=this._createVAO()},[{key:"addAtlasCollection",value:function(e,t){this.atlasManager.addAtlasCollection(e,t)}},{key:"addTextureAtlasRenderType",value:function(e,t){this.atlasManager.addRenderType(e,t)}},{key:"addSimpleShapeRenderType",value:function(e,t){this.simpleShapeOptions.set(e,t)}},{key:"invalidate",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).type,n=this.atlasManager;return t?n.invalidate(e,{filterType:function(e){return e===t},forceRedraw:!0}):n.invalidate(e)}},{key:"gc",value:function(){this.atlasManager.gc()}},{key:"_createShaderProgram",value:function(e){var t=this.gl,n="#version 300 es\n precision highp float;\n\n uniform mat3 uPanZoomMatrix;\n uniform int uAtlasSize;\n \n // instanced\n in vec2 aPosition; // a vertex from the unit square\n \n in mat3 aTransform; // used to transform verticies, eg into a bounding box\n in int aVertType; // the type of thing we are rendering\n\n // the z-index that is output when using picking mode\n in vec4 aIndex;\n \n // For textures\n in int aAtlasId; // which shader unit/atlas to use\n in vec4 aTex; // x/y/w/h of texture in atlas\n\n // for edges\n in vec4 aPointAPointB;\n in vec4 aPointCPointD;\n in vec2 aLineWidth; // also used for node border width\n\n // simple shapes\n in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left]\n in vec4 aColor; // also used for edges\n in vec4 aBorderColor; // aLineWidth is used for border width\n\n // output values passed to the fragment shader\n out vec2 vTexCoord;\n out vec4 vColor;\n out vec2 vPosition;\n // flat values are not interpolated\n flat out int vAtlasId; \n flat out int vVertType;\n flat out vec2 vTopRight;\n flat out vec2 vBotLeft;\n flat out vec4 vCornerRadius;\n flat out vec4 vBorderColor;\n flat out vec2 vBorderWidth;\n flat out vec4 vIndex;\n \n void main(void) {\n int vid = gl_VertexID;\n vec2 position = aPosition; // TODO make this a vec3, simplifies some code below\n\n if(aVertType == ".concat(0,") {\n float texX = aTex.x; // texture coordinates\n float texY = aTex.y;\n float texW = aTex.z;\n float texH = aTex.w;\n\n if(vid == 1 || vid == 2 || vid == 4) {\n texX += texW;\n }\n if(vid == 2 || vid == 4 || vid == 5) {\n texY += texH;\n }\n\n float d = float(uAtlasSize);\n vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(4," || aVertType == ").concat(7," \n || aVertType == ").concat(5," || aVertType == ").concat(6,") { // simple shapes\n\n // the bounding box is needed by the fragment shader\n vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat\n vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat\n vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated\n\n // calculations are done in the fragment shader, just pass these along\n vColor = aColor;\n vCornerRadius = aCornerRadius;\n vBorderColor = aBorderColor;\n vBorderWidth = aLineWidth;\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(1,") {\n vec2 source = aPointAPointB.xy;\n vec2 target = aPointAPointB.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n // stretch the unit square into a long skinny rectangle\n vec2 xBasis = target - source;\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y;\n\n gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\n vColor = aColor;\n } \n else if(aVertType == ").concat(2,") {\n vec2 pointA = aPointAPointB.xy;\n vec2 pointB = aPointAPointB.zw;\n vec2 pointC = aPointCPointD.xy;\n vec2 pointD = aPointCPointD.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n vec2 p0, p1, p2, pos;\n if(position.x == 0.0) { // The left side of the unit square\n p0 = pointA;\n p1 = pointB;\n p2 = pointC;\n pos = position;\n } else { // The right side of the unit square, use same approach but flip the geometry upside down\n p0 = pointD;\n p1 = pointC;\n p2 = pointB;\n pos = vec2(0.0, -position.y);\n }\n\n vec2 p01 = p1 - p0;\n vec2 p12 = p2 - p1;\n vec2 p21 = p1 - p2;\n\n // Find the normal vector.\n vec2 tangent = normalize(normalize(p12) + normalize(p01));\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n // Find the vector perpendicular to p0 -> p1.\n vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\n\n // Determine the bend direction.\n float sigma = sign(dot(p01 + p21, normal));\n float width = aLineWidth[0];\n\n if(sign(pos.y) == -sigma) {\n // This is an intersecting vertex. Adjust the position so that there's no overlap.\n vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n } else {\n // This is a non-intersecting vertex. Treat it like a mitre join.\n vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n }\n\n vColor = aColor;\n } \n else if(aVertType == ").concat(3," && vid < 3) {\n // massage the first triangle into an edge arrow\n if(vid == 0)\n position = vec2(-0.15, -0.3);\n if(vid == 1)\n position = vec2( 0.0, 0.0);\n if(vid == 2)\n position = vec2( 0.15, -0.3);\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n vColor = aColor;\n }\n else {\n gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\n }\n\n vAtlasId = aAtlasId;\n vVertType = aVertType;\n vIndex = aIndex;\n }\n "),r=this.batchManager.getIndexArray(),a="#version 300 es\n precision highp float;\n\n // declare texture unit for each texture atlas in the batch\n ".concat(r.map(function(e){return"uniform sampler2D uTexture".concat(e,";")}).join("\n\t"),"\n\n uniform vec4 uBGColor;\n uniform float uZoom;\n\n in vec2 vTexCoord;\n in vec4 vColor;\n in vec2 vPosition; // model coordinates\n\n flat in int vAtlasId;\n flat in vec4 vIndex;\n flat in int vVertType;\n flat in vec2 vTopRight;\n flat in vec2 vBotLeft;\n flat in vec4 vCornerRadius;\n flat in vec4 vBorderColor;\n flat in vec2 vBorderWidth;\n\n out vec4 outColor;\n\n ").concat("\n float circleSD(vec2 p, float r) {\n return distance(vec2(0), p) - r; // signed distance\n }\n","\n ").concat("\n float rectangleSD(vec2 p, vec2 b) {\n vec2 d = abs(p)-b;\n return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0);\n }\n","\n ").concat("\n float roundRectangleSD(vec2 p, vec2 b, vec4 cr) {\n cr.xy = (p.x > 0.0) ? cr.xy : cr.zw;\n cr.x = (p.y > 0.0) ? cr.x : cr.y;\n vec2 q = abs(p) - b + cr.x;\n return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x;\n }\n","\n ").concat("\n float ellipseSD(vec2 p, vec2 ab) {\n p = abs( p ); // symmetry\n\n // find root with Newton solver\n vec2 q = ab*(p-ab);\n float w = (q.x1.0) ? d : -d;\n }\n","\n\n vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha\n return vec4( \n top.rgb + (bot.rgb * (1.0 - top.a)),\n top.a + (bot.a * (1.0 - top.a)) \n );\n }\n\n vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance\n // scale to the zoom level so that borders don't look blurry when zoomed in\n // note 1.5 is an aribitrary value chosen because it looks good\n return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); \n }\n\n void main(void) {\n if(vVertType == ").concat(0,") {\n // look up the texel from the texture unit\n ").concat(r.map(function(e){return"if(vAtlasId == ".concat(e,") outColor = texture(uTexture").concat(e,", vTexCoord);")}).join("\n\telse "),"\n } \n else if(vVertType == ").concat(3,") {\n // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';\n outColor = blend(vColor, uBGColor);\n outColor.a = 1.0; // make opaque, masks out line under arrow\n }\n else if(vVertType == ").concat(4," && vBorderWidth == vec2(0.0)) { // simple rectangle with no border\n outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done\n }\n else if(vVertType == ").concat(4," || vVertType == ").concat(7," \n || vVertType == ").concat(5," || vVertType == ").concat(6,") { // use SDF\n\n float outerBorder = vBorderWidth[0];\n float innerBorder = vBorderWidth[1];\n float borderPadding = outerBorder * 2.0;\n float w = vTopRight.x - vBotLeft.x - borderPadding;\n float h = vTopRight.y - vBotLeft.y - borderPadding;\n vec2 b = vec2(w/2.0, h/2.0); // half width, half height\n vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center\n\n float d; // signed distance\n if(vVertType == ").concat(4,") {\n d = rectangleSD(p, b);\n } else if(vVertType == ").concat(7," && w == h) {\n d = circleSD(p, b.x); // faster than ellipse\n } else if(vVertType == ").concat(7,") {\n d = ellipseSD(p, b);\n } else {\n d = roundRectangleSD(p, b, vCornerRadius.wzyx);\n }\n\n // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling\n // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box\n if(d > 0.0) {\n if(d > outerBorder) {\n discard;\n } else {\n outColor = distInterp(vBorderColor, vec4(0), d - outerBorder);\n }\n } else {\n if(d > innerBorder) {\n vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;\n vec4 innerBorderColor = blend(vBorderColor, vColor);\n outColor = distInterp(innerBorderColor, outerColor, d);\n } \n else {\n vec4 outerColor;\n if(innerBorder == 0.0 && outerBorder == 0.0) {\n outerColor = vec4(0);\n } else if(innerBorder == 0.0) {\n outerColor = vBorderColor;\n } else {\n outerColor = blend(vBorderColor, vColor);\n }\n outColor = distInterp(vColor, outerColor, d - innerBorder);\n }\n }\n }\n else {\n outColor = vColor;\n }\n\n ").concat(e.picking?"if(outColor.a == 0.0) discard;\n else outColor = vIndex;":"","\n }\n "),i=function(e,t,n){var r=qd(e,e.VERTEX_SHADER,t),a=qd(e,e.FRAGMENT_SHADER,n),i=e.createProgram();if(e.attachShader(i,r),e.attachShader(i,a),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS))throw new Error("Could not initialize shaders");return i}(t,n,a);i.aPosition=t.getAttribLocation(i,"aPosition"),i.aIndex=t.getAttribLocation(i,"aIndex"),i.aVertType=t.getAttribLocation(i,"aVertType"),i.aTransform=t.getAttribLocation(i,"aTransform"),i.aAtlasId=t.getAttribLocation(i,"aAtlasId"),i.aTex=t.getAttribLocation(i,"aTex"),i.aPointAPointB=t.getAttribLocation(i,"aPointAPointB"),i.aPointCPointD=t.getAttribLocation(i,"aPointCPointD"),i.aLineWidth=t.getAttribLocation(i,"aLineWidth"),i.aColor=t.getAttribLocation(i,"aColor"),i.aCornerRadius=t.getAttribLocation(i,"aCornerRadius"),i.aBorderColor=t.getAttribLocation(i,"aBorderColor"),i.uPanZoomMatrix=t.getUniformLocation(i,"uPanZoomMatrix"),i.uAtlasSize=t.getUniformLocation(i,"uAtlasSize"),i.uBGColor=t.getUniformLocation(i,"uBGColor"),i.uZoom=t.getUniformLocation(i,"uZoom"),i.uTextures=[];for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:dh.SCREEN;this.panZoomMatrix=e,this.renderTarget=t,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()}},{key:"startBatch",value:function(){this.instanceCount=0,this.batchManager.startBatch()}},{key:"endFrame",value:function(){this.endBatch()}},{key:"_isVisible",value:function(e,t){return!!e.visible()&&(!t||!t.isVisible||t.isVisible(e))}},{key:"drawTexture",value:function(e,t,n){var r=this.atlasManager,a=this.batchManager,i=r.getRenderTypeOpts(n);if(this._isVisible(e,i)){if(this.renderTarget.picking&&i.getTexPickingMode){var s=i.getTexPickingMode(e);if(s===hh)return;if(s==fh)return void this.drawPickingRectangle(e,t,n)}var u,c=o(r.getAtlasInfo(e,n));try{for(c.s();!(u=c.n()).done;){var d=u.value,h=d.atlas,f=d.tex1,p=d.tex2;a.canAddToCurrentBatch(h)||this.endBatch();for(var v=a.getAtlasIndexForBatch(h),g=0,y=[[f,!0],[p,!1]];g=this.maxInstances&&this.endBatch()}}}}catch(T){c.e(T)}finally{c.f()}}}},{key:"setTransformMatrix",value:function(e,t,n,r){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=0;if(n.shapeProps&&n.shapeProps.padding&&(i=e.pstyle(n.shapeProps.padding).pfValue),r){var o=r.bb,s=r.tex1,l=r.tex2,u=s.w/(s.w+l.w);a||(u=1-u);var c=this._getAdjustedBB(o,i,a,u);this._applyTransformMatrix(t,c,n,e)}else{var d=n.getBoundingBox(e),h=this._getAdjustedBB(d,i,!0,1);this._applyTransformMatrix(t,h,n,e)}}},{key:"_applyTransformMatrix",value:function(e,t,n,r){var a,i;rh(e);var o=n.getRotation?n.getRotation(r):0;if(0!==o){var s=n.getRotationPoint(r);ah(e,e,[s.x,s.y]),ih(e,e,o);var l=n.getRotationOffset(r);a=l.x+(t.xOffset||0),i=l.y+(t.yOffset||0)}else a=t.x1,i=t.y1;ah(e,e,[a,i]),oh(e,e,[t.w,t.h])}},{key:"_getAdjustedBB",value:function(e,t,n,r){var a=e.x1,i=e.y1,o=e.w,s=e.h;t&&(a-=t,i-=t,o+=2*t,s+=2*t);var l=0,u=o*r;return n&&r<1?o=u:!n&&r<1&&(a+=l=o-u,o=u),{x1:a,y1:i,w:o,h:s,xOffset:l,yOffset:e.yOffset}}},{key:"drawPickingRectangle",value:function(e,t,n){var r=this.atlasManager.getRenderTypeOpts(n),a=this.instanceCount;this.vertTypeBuffer.getView(a)[0]=4,Gd(t,this.indexBuffer.getView(a)),Kd([0,0,0],1,this.colorBuffer.getView(a));var i=this.transformBuffer.getMatrixView(a);this.setTransformMatrix(e,i,r),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},{key:"drawNode",value:function(e,t,n){var r=this.simpleShapeOptions.get(n);if(this._isVisible(e,r)){var a=r.shapeProps,i=this._getVertTypeForShape(e,a.shape);if(void 0===i||r.isSimple&&!r.isSimple(e))this.drawTexture(e,t,n);else{var o=this.instanceCount;if(this.vertTypeBuffer.getView(o)[0]=i,5===i||6===i){var s=r.getBoundingBox(e),l=this._getCornerRadius(e,a.radius,s),u=this.cornerRadiusBuffer.getView(o);u[0]=l,u[1]=l,u[2]=l,u[3]=l,6===i&&(u[0]=0,u[2]=0)}Gd(t,this.indexBuffer.getView(o)),Kd(e.pstyle(a.color).value,e.pstyle(a.opacity).value,this.colorBuffer.getView(o));var c=this.lineWidthBuffer.getView(o);if(c[0]=0,c[1]=0,a.border){var d=e.pstyle("border-width").value;if(d>0){Kd(e.pstyle("border-color").value,e.pstyle("border-opacity").value,this.borderColorBuffer.getView(o));var h=e.pstyle("border-position").value;if("inside"===h)c[0]=0,c[1]=-d;else if("outside"===h)c[0]=d,c[1]=0;else{var f=d/2;c[0]=f,c[1]=-f}}}var p=this.transformBuffer.getMatrixView(o);this.setTransformMatrix(e,p,r),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},{key:"_getVertTypeForShape",value:function(e,t){switch(e.pstyle(t).value){case"rectangle":return 4;case"ellipse":return 7;case"roundrectangle":case"round-rectangle":return 5;case"bottom-round-rectangle":return 6;default:return}}},{key:"_getCornerRadius",value:function(e,t,n){var r=n.w,a=n.h;if("auto"===e.pstyle(t).value)return Mn(r,a);var i=e.pstyle(t).pfValue,o=r/2,s=a/2;return Math.min(i,s,o)}},{key:"drawEdgeArrow",value:function(e,t,n){if(e.visible()){var r,a,i,o=e._private.rscratch;if("source"===n?(r=o.arrowStartX,a=o.arrowStartY,i=o.srcArrowAngle):(r=o.arrowEndX,a=o.arrowEndY,i=o.tgtArrowAngle),!(isNaN(r)||null==r||isNaN(a)||null==a||isNaN(i)||null==i))if("none"!==e.pstyle(n+"-arrow-shape").value){var s=e.pstyle(n+"-arrow-color").value,l=e.pstyle("opacity").value*e.pstyle("line-opacity").value,u=e.pstyle("width").pfValue,c=e.pstyle("arrow-scale").value,d=this.r.getArrowWidth(u,c),h=this.instanceCount,f=this.transformBuffer.getMatrixView(h);rh(f),ah(f,f,[r,a]),oh(f,f,[d,d]),ih(f,f,i),this.vertTypeBuffer.getView(h)[0]=3,Gd(t,this.indexBuffer.getView(h)),Kd(s,l,this.colorBuffer.getView(h)),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},{key:"drawEdgeLine",value:function(e,t){if(e.visible()){var n=this._getEdgePoints(e);if(n){var r=e.pstyle("opacity").value,a=e.pstyle("line-opacity").value,i=e.pstyle("width").pfValue,o=e.pstyle("line-color").value,s=r*a;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),4==n.length){var l=this.instanceCount;this.vertTypeBuffer.getView(l)[0]=1,Gd(t,this.indexBuffer.getView(l)),Kd(o,s,this.colorBuffer.getView(l)),this.lineWidthBuffer.getView(l)[0]=i;var u=this.pointAPointBBuffer.getView(l);u[0]=n[0],u[1]=n[1],u[2]=n[2],u[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var c=0;c=this.maxInstances&&this.endBatch()}}}}},{key:"_getEdgePoints",value:function(e){var t=e._private.rscratch;if(!t.badLine&&null!=t.allpts&&!isNaN(t.allpts[0])){var n=t.allpts;if(4==n.length)return n;var r=this._getNumSegments(e);return this._getCurveSegmentPoints(n,r)}}},{key:"_getNumSegments",value:function(e){return Math.min(Math.max(15,5),this.maxInstances)}},{key:"_getCurveSegmentPoints",value:function(e,t){if(4==e.length)return e;for(var n=Array(2*(t+1)),r=0;r<=t;r++)if(0==r)n[0]=e[0],n[1]=e[1];else if(r==t)n[2*r]=e[e.length-2],n[2*r+1]=e[e.length-1];else{var a=r/t;this._setCurvePoint(e,a,n,2*r)}return n}},{key:"_setCurvePoint",value:function(e,t,n,r){if(!(e.length<=2)){for(var a=Array(e.length-2),i=0;i0}},u=function(e){return"yes"===e.pstyle("text-events").strValue?fh:hh},c=function(e){var t=e.position(),n=t.x,r=t.y,a=e.outerWidth(),i=e.outerHeight();return{w:a,h:i,x1:n-a/2,y1:r-i/2}};n.drawing.addAtlasCollection("node",{texRows:e.webglTexRowsNodes}),n.drawing.addAtlasCollection("label",{texRows:e.webglTexRows}),n.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:t.getStyleKey,getBoundingBox:t.getElementBox,drawElement:t.drawElement}),n.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:c,isSimple:Ud,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),n.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:c,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),n.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:c,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),n.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:u,getKey:yh(t.getLabelKey,null),getBoundingBox:mh(t.getLabelBox,null),drawClipped:!0,drawElement:t.drawLabel,getRotation:a(null),getRotationPoint:t.getLabelRotationPoint,getRotationOffset:t.getLabelRotationOffset,isVisible:i("label")}),n.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:u,getKey:yh(t.getSourceLabelKey,"source"),getBoundingBox:mh(t.getSourceLabelBox,"source"),drawClipped:!0,drawElement:t.drawSourceLabel,getRotation:a("source"),getRotationPoint:t.getSourceLabelRotationPoint,getRotationOffset:t.getSourceLabelRotationOffset,isVisible:i("source-label")}),n.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:u,getKey:yh(t.getTargetLabelKey,"target"),getBoundingBox:mh(t.getTargetLabelBox,"target"),drawClipped:!0,drawElement:t.drawTargetLabel,getRotation:a("target"),getRotationPoint:t.getTargetLabelRotationPoint,getRotationOffset:t.getTargetLabelRotationOffset,isVisible:i("target-label")});var d=Me(function(){console.log("garbage collect flag set"),n.data.gc=!0},1e4);n.onUpdateEleCalcs(function(e,t){var r=!1;t&&t.length>0&&(r|=n.drawing.invalidate(t)),r&&d()}),function(e){var t=e.render;e.render=function(n){n=n||{};var r=e.cy;e.webgl&&(r.zoom()>dd?(!function(e){var t=e.data.contexts[e.WEBGL];t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}(e),t.call(e,n)):(!function(e){var t=function(t){t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.canvasWidth,e.canvasHeight),t.restore()};t(e.data.contexts[e.NODE]),t(e.data.contexts[e.DRAG])}(e),wh(e,n,dh.SCREEN)))};var n=e.matchCanvasSize;e.matchCanvasSize=function(t){n.call(e,t),e.pickingFrameBuffer.setFramebufferAttachmentSizes(e.canvasWidth,e.canvasHeight),e.pickingFrameBuffer.needsDraw=!0},e.findNearestElements=function(t,n,r,a){return function(e,t,n){var r,a,i,s=function(e,t,n){var r,a,i,o,s=Wd(e),u=s.pan,c=s.zoom,d=function(e,t,n,r,a){var i=r*n+t.x,o=a*n+t.y;return[i,o=Math.round(e.canvasHeight-o)]}(e,u,c,t,n),h=l(d,2),f=h[0],p=h[1],v=6;if(r=f-v/2,a=p-v/2,o=v,0===(i=v)||0===o)return[];var g=e.data.contexts[e.WEBGL];g.bindFramebuffer(g.FRAMEBUFFER,e.pickingFrameBuffer),e.pickingFrameBuffer.needsDraw&&(g.viewport(0,0,g.canvas.width,g.canvas.height),wh(e,null,dh.PICKING),e.pickingFrameBuffer.needsDraw=!1);var y=i*o,m=new Uint8Array(4*y);g.readPixels(r,a,i,o,g.RGBA,g.UNSIGNED_BYTE,m),g.bindFramebuffer(g.FRAMEBUFFER,null);for(var b=new Set,x=0;x=0&&b.add(w)}return b}(e,t,n),u=e.getCachedZSortedEles(),c=o(s);try{for(c.s();!(i=c.n()).done;){var d=u[i.value];if(!r&&d.isNode()&&(r=d),!a&&d.isEdge()&&(a=d),r&&a)break}}catch(h){c.e(h)}finally{c.f()}return[r,a].filter(Boolean)}(e,t,n)};var r=e.invalidateCachedZSortedEles;e.invalidateCachedZSortedEles=function(){r.call(e),e.pickingFrameBuffer.needsDraw=!0};var a=e.notify;e.notify=function(t,n){a.call(e,t,n),"viewport"===t||"bounds"===t?e.pickingFrameBuffer.needsDraw=!0:"background"===t&&e.drawing.invalidate(n,{type:"node-body"})}}(n)};var yh=function(e,t){return function(n){var r=e(n),a=gh(n,t);return a.length>1?a.map(function(e,t){return"".concat(r,"_").concat(t)}):r}},mh=function(e,t){return function(n,r){var a=e(n);if("string"==typeof r){var i=r.indexOf("_");if(i>0){var o=Number(r.substring(i+1)),s=gh(n,t),l=a.h/s.length,u=l*o,c=a.y1+u;return{x1:a.x1,w:a.w,y1:c,h:l,yOffset:u}}}return a}};function bh(e,t){var n=e.canvasWidth,r=e.canvasHeight,a=Wd(e),i=a.pan,o=a.zoom;t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,n,r),t.translate(i.x,i.y),t.scale(o,o)}function xh(e,t,n){var r=e.drawing;t+=1,n.isNode()?(r.drawNode(n,t,"node-underlay"),r.drawNode(n,t,"node-body"),r.drawTexture(n,t,"label"),r.drawNode(n,t,"node-overlay")):(r.drawEdgeLine(n,t),r.drawEdgeArrow(n,t,"source"),r.drawEdgeArrow(n,t,"target"),r.drawTexture(n,t,"label"),r.drawTexture(n,t,"edge-source-label"),r.drawTexture(n,t,"edge-target-label"))}function wh(e,t,n){var r;e.webglDebug&&(r=performance.now());var a=e.drawing,i=0;if(n.screen&&e.data.canvasNeedsRedraw[e.SELECT_BOX]&&function(e,t){e.drawSelectionRectangle(t,function(t){return bh(e,t)})}(e,t),e.data.canvasNeedsRedraw[e.NODE]||n.picking){var s=e.data.contexts[e.WEBGL];n.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=function(e){var t=e.canvasWidth,n=e.canvasHeight,r=Wd(e),a=r.pan,i=r.zoom,o=nh();ah(o,o,[a.x,a.y]),oh(o,o,[i,i]);var s=nh();!function(e,t,n){e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/n,e[5]=0,e[6]=-1,e[7]=1,e[8]=1}(s,t,n);var l,u,c,d,h,f,p,v,g,y,m,b,x,w,E,k,T,C,P,S,B,D=nh();return l=D,c=o,d=(u=s)[0],h=u[1],f=u[2],p=u[3],v=u[4],g=u[5],y=u[6],m=u[7],b=u[8],x=c[0],w=c[1],E=c[2],k=c[3],T=c[4],C=c[5],P=c[6],S=c[7],B=c[8],l[0]=x*d+w*p+E*y,l[1]=x*h+w*v+E*m,l[2]=x*f+w*g+E*b,l[3]=k*d+T*p+C*y,l[4]=k*h+T*v+C*m,l[5]=k*f+T*g+C*b,l[6]=P*d+S*p+B*y,l[7]=P*h+S*v+B*m,l[8]=P*f+S*g+B*b,D}(e),u=e.getCachedZSortedEles();if(i=u.length,a.startFrame(l,n),n.screen){for(var c=0;c0&&i>0){h.clearRect(0,0,a,i),h.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)h.translate(-n.x1*l,-n.y1*l),h.scale(l,l),this.drawElements(h,f),h.scale(1/l,1/l),h.translate(n.x1*l,n.y1*l);else{var p=t.pan(),v={x:p.x*l,y:p.y*l};l*=t.zoom(),h.translate(v.x,v.y),h.scale(l,l),this.drawElements(h,f),h.scale(1/l,1/l),h.translate(-v.x,-v.y)}e.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=e.bg,h.rect(0,0,a,i),h.fill())}return d},Dh.png=function(e){return Ah(e,this.bufferCanvasImage(e),"image/png")},Dh.jpg=function(e){return Ah(e,this.bufferCanvasImage(e),"image/jpeg")};var Mh={nodeShapeImpl:function(e,t,n,r,a,i,o,s){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,a,i);case"polygon":return this.drawPolygonPath(t,n,r,a,i,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,a,i,o,s);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,a,i,s);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,a,i,o,s);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,a,i,s);case"barrel":return this.drawBarrelPath(t,n,r,a,i)}}},Rh=Nh,Ih=Nh.prototype;function Nh(e){var t=this,n=t.cy.window().document;e.webgl&&(Ih.CANVAS_LAYERS=t.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),t.data={canvases:new Array(Ih.CANVAS_LAYERS),contexts:new Array(Ih.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Ih.CANVAS_LAYERS),bufferCanvases:new Array(Ih.BUFFER_COUNT),bufferContexts:new Array(Ih.CANVAS_LAYERS)};var r="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";t.data.canvasContainer=n.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[r]=a,i.position="relative",i.zIndex="0",i.overflow="hidden";var o=e.cy.container();o.appendChild(t.data.canvasContainer),o.style[r]=a;var s={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};p&&p.userAgent.match(/msie|trident|edge/i)&&(s["-ms-touch-action"]="none",s["touch-action"]="none");for(var l=0;l{function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function s(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,s=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||h(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||h(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function h(e,t){if(e){if("string"==typeof e)return r(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}n.d(t,{A:()=>Kh});var f="undefined"==typeof window?null:window,p=f?f.navigator:null;f&&f.document;var v,g,y,m,b,x,w,E,k,T,C,P,S,B,D,_,A,M,R,I,N,L,z,O,V,F,X,j,Y=d(""),q=d({}),W=d(function(){}),U="undefined"==typeof HTMLElement?"undefined":d(HTMLElement),H=function(e){return e&&e.instanceString&&G(e.instanceString)?e.instanceString():null},K=function(e){return null!=e&&d(e)==Y},G=function(e){return null!=e&&d(e)===W},Z=function(e){return!ee(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},$=function(e){return null!=e&&d(e)===q&&!Z(e)&&e.constructor===Object},Q=function(e){return null!=e&&d(e)===d(1)&&!isNaN(e)},J=function(e){return"undefined"===U?void 0:null!=e&&e instanceof HTMLElement},ee=function(e){return te(e)||ne(e)},te=function(e){return"collection"===H(e)&&e._private.single},ne=function(e){return"collection"===H(e)&&!e._private.single},re=function(e){return"core"===H(e)},ae=function(e){return"stylesheet"===H(e)},ie=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},oe=function(e){return function(e){return null!=e&&d(e)===q}(e)&&G(e.then)},se=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;tt?1:0},be=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(i))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,a,i,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+ge+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(a=parseFloat(c[3]))<0||a>100)return;if(a/=100,void 0!==(i=c[4])&&((i=parseFloat(i))<0||i>1))return;if(0===r)o=s=l=Math.round(255*a);else{var d=a<.5?a*(1+r):a+r-a*r,h=2*a-d;o=Math.round(255*u(h,d,n+1/3)),s=Math.round(255*u(h,d,n)),l=Math.round(255*u(h,d,n-1/3))}t=[o,s,l,i]}return t}(e)},we={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ee=function(e){for(var t=e.map,n=e.keys,r=n.length,a=0;a=o||t<0||g&&e-p>=c}function x(){var e=t();if(b(e))return w(e);h=setTimeout(x,function(e){var t=o-(e-f);return g?a(t,c-(e-p)):t}(e))}function w(e){return h=void 0,y&&l?m(e):(l=u=void 0,d)}function E(){var e=t(),n=b(e);if(l=arguments,u=this,f=e,n){if(void 0===h)return function(e){return p=e,h=setTimeout(x,o),v?m(e):d}(f);if(g)return clearTimeout(h),h=setTimeout(x,o),m(f)}return void 0===h&&(h=setTimeout(x,o)),d}return o=n(o)||0,e(s)&&(v=!!s.leading,c=(g="maxWait"in s)?r(n(s.maxWait)||0,o):c,y="trailing"in s?!!s.trailing:y),E.cancel=function(){void 0!==h&&clearTimeout(h),p=0,l=f=u=h=void 0},E.flush=function(){return void 0===h?d:w(t())},E}}()),Re=f?f.performance:null,Ie=Re&&Re.now?function(){return Re.now()}:function(){return Date.now()},Ne=function(){if(f){if(f.requestAnimationFrame)return function(e){f.requestAnimationFrame(e)};if(f.mozRequestAnimationFrame)return function(e){f.mozRequestAnimationFrame(e)};if(f.webkitRequestAnimationFrame)return function(e){f.webkitRequestAnimationFrame(e)};if(f.msRequestAnimationFrame)return function(e){f.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout(function(){e(Ie())},1e3/60)}}(),Le=function(e){return Ne(e)},ze=Ie,Oe=9261,Ve=5381,Fe=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Oe;!(t=e.next()).done;)n=65599*n+t.value|0;return n},Xe=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:Oe)+e|0},je=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ve;return(t<<5)+t+e|0},Ye=function(e){return 2097152*e[0]+e[1]},qe=function(e,t){return[Xe(e[0],t[0]),je(e[1],t[1])]},We=function(e,t){var n={value:0,done:!1},r=0,a=e.length;return Fe({next:function(){return r=0;r--)e[r]===t&&e.splice(r,1)},ft=function(e){e.splice(0,e.length)},pt=function(e,t,n){return n&&(t=ce(n,t)),e[t]},vt=function(e,t,n,r){n&&(t=ce(n,t)),e[t]=r},gt="undefined"!=typeof Map?Map:function(){return i(function e(){a(this,e),this._obj={}},[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}])}(),yt=function(){return i(function e(t){if(a(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&re(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new mt,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==a.position.x&&(a.position.x=0),null==a.position.y&&(a.position.y=0),t.renderedPosition){var i=t.renderedPosition,o=e.pan(),s=e.zoom();a.position={x:(i.x-o.x)/s,y:(i.y-o.y)/s}}var l=[];Z(t.classes)?l=t.classes:K(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;ut?1:0},u=function(e,t,a,i,o){var s;if(null==a&&(a=0),null==o&&(o=n),a<0)throw new Error("lo must be non-negative");for(null==i&&(i=e.length);an;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;iv;0<=v?++h:--h)g.push(i(e,r));return g},p=function(e,t,r,a){var i,o,s;for(null==a&&(a=n),i=e[r];r>t&&a(i,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=i},v=function(e,t,r){var a,i,o,s,l;for(null==r&&(r=n),i=e.length,l=t,o=e[t],a=2*t+1;a0;){var w=y.pop(),E=v(w),k=w.id();if(d[k]=E,E!==1/0)for(var T=w.neighborhood().intersect(f),C=0;C0)for(n.unshift(t);c[a];){var i=c[a];n.unshift(i.edge),n.unshift(i.node),a=(r=i.node).id()}return o.spawn(n)}}}},Mt={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,a=n.length,i=new Array(a),o=n,s=function(e){for(var t=0;t0;){if(x(),E++,u===d){for(var k=[],T=a,C=d,P=m[C];k.unshift(T),null!=P&&k.unshift(P),null!=(T=y[C]);)P=m[C=T.id()];return{found:!0,distance:h[u],path:this.spawn(k),steps:E}}p[u]=!0;for(var S=l._private.edges,B=0;BP&&(f[C]=P,y[C]=T,m[C]=x),!a){var S=T*u+k;!a&&f[S]>P&&(f[S]=P,y[S]=k,m[S]=x)}}}for(var B=0;B1&&void 0!==arguments[1]?arguments[1]:i,r=[],a=m(e);;){if(null==a)return t.spawn();var o=y(a),l=o.edge,u=o.pred;if(r.unshift(a[0]),a.same(n)&&r.length>0)break;null!=l&&r.unshift(l),a=u}return s.spawn(r)},hasNegativeWeightCycle:p,negativeWeightCycles:v}}},Vt=Math.sqrt(2),Ft=function(e,t,n){0===n.length&&at("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],a=r[1],i=r[2],o=t[a],s=t[i],l=n,u=l.length-1;u>=0;u--){var c=l[u],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&l.splice(u,1)}for(var f=0;fr;){var a=Math.floor(Math.random()*t.length);t=Ft(a,e,t),n--}return t},jt={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy(function(e){return e.isLoop()});var a=n.length,i=r.length,o=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),s=Math.floor(a/Vt);if(!(a<2)){for(var l=[],u=0;u0?1:e<0?-1:0},Gt=function(e,t){return Math.sqrt(Zt(e,t))},Zt=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},$t=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},nn=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},rn=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},an=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},on=function(e){var t,n,r,a,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===i.length)t=n=r=a=i[0];else if(2===i.length)t=r=i[0],a=n=i[1];else if(4===i.length){var o=l(i,4);t=o[0],n=o[1],r=o[2],a=o[3]}return e.x1-=a,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},sn=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},ln=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},un=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},cn=function(e,t){return un(e,t.x,t.y)},dn=function(e,t){return un(e,t.x1,t.y1)&&un(e,t.x2,t.y2)},hn=null!==(Bt=Math.hypot)&&void 0!==Bt?Bt:function(e,t){return Math.sqrt(e*e+t*t)};function fn(e,t,n,r,a,i){var o=function(e,t){if(e.length<3)throw new Error("Need at least 3 vertices");var n=function(e,t){return{x:e.x+t.x,y:e.y+t.y}},r=function(e,t){return{x:e.x-t.x,y:e.y-t.y}},a=function(e,t){return{x:e.x*t,y:e.y*t}},i=function(e,t){return e.x*t.y-e.y*t.x},o=function(e){var t=hn(e.x,e.y);return 0===t?{x:0,y:0}:{x:e.x/t,y:e.y/t}},s=function(e,t,o,s){var l=r(t,e),u=r(s,o),c=i(l,u);if(Math.abs(c)<1e-9)return n(e,a(l,.5));var d=i(r(o,e),u)/c;return n(e,a(l,d))},l=e.map(function(e){return{x:e.x,y:e.y}});(function(e){for(var t=0,n=0;n7&&void 0!==arguments[7]?arguments[7]:"auto",c="auto"===u?Rn(a,i):u,d=a/2,h=i/2,f=(c=Math.min(c,d,h))!==d,p=c!==h;if(f){var v=r-h-o;if((s=Pn(e,t,n,r,n-d+c-o,v,n+d-c+o,v,!1)).length>0)return s}if(p){var g=n+d+o;if((s=Pn(e,t,n,r,g,r-h+c-o,g,r+h-c+o,!1)).length>0)return s}if(f){var y=r+h+o;if((s=Pn(e,t,n,r,n-d+c-o,y,n+d-c+o,y,!1)).length>0)return s}if(p){var m=n-d-o;if((s=Pn(e,t,n,r,m,r-h+c-o,m,r+h-c+o,!1)).length>0)return s}var b=n-d+c,x=r-h+c;if((l=Tn(e,t,n,r,b,x,c+o)).length>0&&l[0]<=b&&l[1]<=x)return[l[0],l[1]];var w=n+d-c,E=r-h+c;if((l=Tn(e,t,n,r,w,E,c+o)).length>0&&l[0]>=w&&l[1]<=E)return[l[0],l[1]];var k=n+d-c,T=r+h-c;if((l=Tn(e,t,n,r,k,T,c+o)).length>0&&l[0]>=k&&l[1]>=T)return[l[0],l[1]];var C=n-d+c,P=r+h-c;return(l=Tn(e,t,n,r,C,P,c+o)).length>0&&l[0]<=C&&l[1]>=P?[l[0],l[1]]:[]},vn=function(e,t,n,r,a,i,o){var s=o,l=Math.min(n,a),u=Math.max(n,a),c=Math.min(r,i),d=Math.max(r,i);return l-s<=e&&e<=u+s&&c-s<=t&&t<=d+s},gn=function(e,t,n,r,a,i,o,s,l){var u=Math.min(n,o,a)-l,c=Math.max(n,o,a)+l,d=Math.min(r,s,i)-l,h=Math.max(r,s,i)+l;return!(ec||th)},yn=function(e,t,n,r,a,i,o,s){var l=[];!function(e,t,n,r,a){var i,o,s,l,u,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),i=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,a[1]=0,d=t/3,i>0?(u=(u=s+Math.sqrt(i))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(i))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),a[0]=-d+u+c,d+=(u+c)/2,a[4]=a[2]=-d,d=Math.sqrt(3)*(-c+u)/2,a[3]=d,a[5]=-d):(a[5]=a[3]=0,0===i?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),a[0]=2*h-d,a[4]=a[2]=-(h+d)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),h=2*Math.sqrt(o),a[0]=-d+h*Math.cos(l/3),a[2]=-d+h*Math.cos((l+2*Math.PI)/3),a[4]=-d+h*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*a+2*n*o+4*a*a-4*a*o+o*o+r*r-4*r*i+2*r*s+4*i*i-4*i*s+s*s,9*n*a-3*n*n-3*n*o-6*a*a+3*a*o+9*r*i-3*r*r-3*r*s-6*i*i+3*i*s,3*n*n-6*n*a+n*o-n*e+2*a*a+2*a*e-o*e+3*r*r-6*r*i+r*s-r*t+2*i*i+2*i*t-s*t,1*n*a-n*n+n*e-a*e+r*i-r*r+r*t-i*t,l);for(var u=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var d,h,f,p=-1,v=0;v=0?fl?(e-a)*(e-a)+(t-i)*(t-i):u-d},bn=function(e,t,n){for(var r,a,i,o,s=0,l=0;l=e&&e>=i||r<=e&&e<=i))continue;(e-r)/(i-r)*(o-a)+a>t&&s++}return s%2!=0},xn=function(e,t,n,r,a,i,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var d,h=Math.cos(-u),f=Math.sin(-u),p=0;p0){var v=En(c,-l);d=wn(v)}else d=c;return bn(e,t,d)},wn=function(e){for(var t,n,r,a,i,o,s,l,u=new Array(e.length/2),c=0;c=0&&p<=1&&g.push(p),v>=0&&v<=1&&g.push(v),0===g.length)return[];var y=g[0]*s[0]+e,m=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[y,m]:[y,m,g[1]*s[0]+e,g[1]*s[1]+t]:[y,m]},Cn=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Pn=function(e,t,n,r,a,i,o,s,l){var u=e-a,c=n-e,d=o-a,h=t-i,f=r-t,p=s-i,v=d*h-p*u,g=c*h-f*u,y=p*c-d*f;if(0!==y){var m=v/y,b=g/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*f]:[]}return 0===v||0===g?Cn(e,n,o)===o?[o,s]:Cn(e,n,a)===a?[a,i]:Cn(a,o,n)===n?[n,r]:[]:[]},Sn=function(e,t,n,r,a){var i=[],o=r/2,s=a/2,l=t,u=n;i.push({x:l+o*e[0],y:u+s*e[1]});for(var c=1;c0){var m=En(v,-s);u=wn(m)}else u=v}else u=n;for(var b=0;bu&&(u=t)},d=function(e){return l[e]},h=0;h0?b.edgesTo(m)[0]:m.edgesTo(b)[0];var w=r(x);m=m.id(),u[m]>u[v]+w&&(u[m]=u[v]+w,h.nodes.indexOf(m)<0?h.push(m):h.updateItem(m),l[m]=0,n[m]=[]),u[m]==u[v]+w&&(l[m]=l[m]+l[v],n[m].push(v))}else for(var E=0;E0;){for(var P=t.pop(),S=0;S0&&o.push(n[s]);0!==o.length&&a.push(r.collection(o))}return a}(c,l,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:tr,o=r,s=0;s=2?sr(e,t,n,0,ar,ir):sr(e,t,n,0,rr)},squaredEuclidean:function(e,t,n){return sr(e,t,n,0,ar)},manhattan:function(e,t,n){return sr(e,t,n,0,rr)},max:function(e,t,n){return sr(e,t,n,-1/0,or)}};function ur(e,t,n,r,a,i){var o;return o=G(e)?e:lr[e]||lr.euclidean,0===t&&G(e)?o(a,i):o(t,n,r,a,i)}lr["squared-euclidean"]=lr.squaredEuclidean,lr.squaredeuclidean=lr.squaredEuclidean;var cr=dt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),dr=function(e){return cr(e)},hr=function(e,t,n,r,a){var i="kMedoids"!==a?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return ur(e,r.length,i,function(e){return r[e](t)},o,s)},fr=function(e,t,n){for(var r=n.length,a=new Array(r),i=new Array(r),o=new Array(t),s=null,l=0;ln)return!1}return!0},mr=function(e,t,n){for(var r=0;ra&&(a=t[l][u],i=u);o[i].push(e[l])}for(var c=0;c=a.threshold||"dendrogram"===a.mode&&1===e.length)return!1;var f,p=t[o],v=t[r[o]];f="dendrogram"===a.mode?{left:p,right:v,key:p.key}:{value:p.value.concat(v.value),key:p.key},e[p.index]=f,e.splice(v.index,1),t[p.key]=f;for(var g=0;gn[v.key][y.key]&&(i=n[v.key][y.key])):"max"===a.linkage?(i=n[p.key][y.key],n[p.key][y.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n0&&e.splice(0,t)):e=e.slice(t,n);for(var i=0,o=e.length-1;o>=0;o--){var s=e[o];a?isFinite(s)||(e[o]=-1/0,i++):e.splice(o,1)}r&&e.sort(function(e,t){return e-t});var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+i]:(e[u-1+i]+e[u+i])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,a=0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,a=t;ao&&(i=l,o=t[a*e+l])}i>0&&r.push(i)}for(var u=0;u=P?(S=P,P=D,B=_):D>S&&(S=D);for(var A=0;A0?1:0;k[E%u.minIterations*t+z]=O,L+=O}if(L>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var V=0,F=0;F0&&r.push(a);return r}(t,i,o),Y=function(e,t,n){for(var r=Lr(e,t,n),a=0;al&&(s=u,l=c)}n[a]=i[s]}return Lr(e,t,n)}(t,r,j),q={},W=0;W1)}});var l=Object.keys(t).filter(function(e){return t[e].cutVertex}).map(function(t){return e.getElementById(t)});return{cut:e.spawn(l),components:a}},Xr=function(){var e=this,t={},n=0,r=[],a=[],i=e.spawn(e),o=function(s){if(a.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach(function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))}),t[s].index===t[s].low){for(var l=e.spawn();;){var u=a.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),d=l.merge(c);r.push(d),i=i.difference(d)}};return e.forEach(function(e){if(e.isNode()){var n=e.id();n in t||o(n)}}),{cut:i,components:r}},jr={};[wt,At,Mt,It,Lt,Ot,jt,On,Fn,jn,qn,er,Tr,Mr,Or,{hierholzer:function(e){if(!$(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,a,i=Vr(e),o=i.root,s=i.directed,l=this,u=!1;o&&(a=K(o)?this.filter(o)[0].id():o[0].id());var c={},d={};s?l.forEach(function(e){var t=e.id();if(e.isNode()){var a=e.indegree(!0),i=e.outdegree(!0),o=a-i,s=i-a;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach(function(e){e.isEdge()&&c[t].push(e.id())})}else d[t]=[void 0,e.target().id()]}):l.forEach(function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach(function(e){return c[t].push(e.id())})):d[t]=[e.source().id(),e.target().id()]});var h={found:!1,trail:void 0};if(u)return h;if(r&&n)if(s){if(a&&r!=a)return h;a=r}else{if(a&&r!=a&&n!=a)return h;a||(a=r)}else a||(a=l[0].id());var f=function(e){for(var t,n,r,a=e,i=[e];c[a].length;)t=c[a].shift(),n=d[t][0],a!=(r=d[t][1])?(c[r]=c[r].filter(function(e){return e!=t}),a=r):s||a==n||(c[n]=c[n].filter(function(e){return e!=t}),a=n),i.unshift(t),i.unshift(a);return i},p=[],v=[];for(v=f(a);1!=v.length;)0==c[v[0]].length?(p.unshift(l.getElementById(v.shift())),p.unshift(l.getElementById(v.shift()))):v=f(v.shift()).concat(v);for(var g in p.unshift(l.getElementById(v.shift())),c)if(c[g].length)return h;return h.found=!0,h.trail=this.spawn(p,!0),h}},{hopcroftTarjanBiconnected:Fr,htbc:Fr,htb:Fr,hopcroftTarjanBiconnectedComponents:Fr},{tarjanStronglyConnected:Xr,tsc:Xr,tscc:Xr,tarjanStronglyConnectedComponents:Xr}].forEach(function(e){be(jr,e)});var Yr=function(e){if(!(this instanceof Yr))return new Yr(e);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof e&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Yr.prototype={fulfill:function(e){return qr(this,1,"fulfillValue",e)},reject:function(e){return qr(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Yr;return n.onFulfilled.push(Hr(e,r,"fulfill")),n.onRejected.push(Hr(t,r,"reject")),Wr(n),r.proxy}};var qr=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Wr(e)),e},Wr=function(e){1===e.state?Ur(e,"onFulfilled",e.fulfillValue):2===e.state&&Ur(e,"onRejected",e.rejectReason)},Ur=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var a=function(){for(var e=0;e0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n-1}}(),a=function(){if(Ya)return ja;Ya=1;var e=Oi();return ja=function(t,n){var r=this.__data__,a=e(r,t);return a<0?(++this.size,r.push([t,n])):r[a][1]=n,this},ja}();function i(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&t%1==0&&t0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){Z(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,a=[],i=0,o=n.length;i0&&this.spawn(a).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},t),n}};To.className=To.classNames=To.classes;var Co={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:fe,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Co.variable="(?:[\\w-.]|(?:\\\\"+Co.metaChar+"))+",Co.className="(?:[\\w-]|(?:\\\\"+Co.metaChar+"))+",Co.value=Co.string+"|"+Co.number,Co.id=Co.variable,function(){var e,t,n;for(e=Co.comparatorOp.split("|"),n=0;n=0||"="!==t&&(Co.comparatorOp+="|\\!"+t)}();var Po=0,So=1,Bo=2,Do=3,_o=4,Ao=5,Mo=6,Ro=7,Io=8,No=9,Lo=10,zo=11,Oo=12,Vo=13,Fo=14,Xo=15,jo=16,Yo=17,qo=18,Wo=19,Uo=20,Ho=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort(function(e,t){return function(e,t){return-1*me(e,t)}(e.selector,t.selector)}),Ko=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return ot("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return ot("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&ot("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return K(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,i){var o=r.type,s=r.value;switch(o){case Po:var l=e(s);return l.substring(0,l.length-1);case Do:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case Ao:var d=r.operator,h=r.field;return"["+e(d)+h+"]";case _o:return"["+r.field+"]";case Mo:var f=r.operator;return"[["+r.field+n(e(f))+t(s)+"]]";case Ro:return s;case Io:return"#"+s;case No:return"."+s;case Yo:case Xo:return a(r.parent,i)+n(">")+a(r.child,i);case qo:case jo:return a(r.ancestor,i)+" "+a(r.descendant,i);case Wo:var p=a(r.left,i),v=a(r.subject,i),g=a(r.right,i);return p+(p.length>0?" ":"")+v+g;case Uo:return""}},a=function(e,t){return e.checks.reduce(function(n,a,i){return n+(t===e&&0===i?"$":"")+r(a,t)},"")},i="",o=0;o1&&o=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(a=o||s?""+e:"",i=""+n),u&&(e=a=a.toLowerCase(),n=i=i.toLowerCase()),t){case"*=":r=a.indexOf(i)>=0;break;case"$=":r=a.indexOf(i,a.length-i.length)>=0;break;case"^=":r=0===a.indexOf(i);break;case"=":r=e===n;break;case">":d=!0,r=e>n;break;case">=":d=!0,r=e>=n;break;case"<":d=!0,r=e0;){var u=a.shift();t(u),i.add(u.id()),o&&r(a,i,u)}return e}function ps(e,t,n){if(n.isParent())for(var r=n._private.children,a=0;a1&&void 0!==arguments[1])||arguments[1],ps)},hs.forEachUp=function(e){return fs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],vs)},hs.forEachUpAndDown=function(e){return fs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],gs)},hs.ancestors=hs.parents,(us=cs={data:Eo.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Eo.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Eo.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Eo.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Eo.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Eo.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=us.data,us.removeAttr=us.removeData;var ys,ms,bs=cs,xs={};function ws(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,a=n[0],i=a._private.edges,o=0;ot}),minIndegree:Es("indegree",function(e,t){return et}),minOutdegree:Es("outdegree",function(e,t){return et})}),be(xs,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,c=u;u&&(l=l[0]);var d=c?l.position():{x:0,y:0};return a={x:s.x-d.x,y:s.y-d.y},void 0===e?a:a[e]}for(var h=0;h0,g=v;v&&(p=p[0]);var y=g?p.position():{x:0,y:0};void 0!==t?f.position(e,t+y[e]):void 0!==a&&f.position({x:a.x+y.x,y:a.y+y.y})}}else if(!i)return;return this}},ys.modelPosition=ys.point=ys.position,ys.modelPositions=ys.points=ys.positions,ys.renderedPoint=ys.renderedPosition,ys.relativePoint=ys.relativePosition;var Cs,Ps,Ss=ms;Cs=Ps={},Ps.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),a=n.pan(),i=t.x1*r+a.x,o=t.x2*r+a.x,s=t.y1*r+a.y,l=t.y2*r+a.y;return{x1:i,x2:o,y1:s,y2:l,w:o-i,h:l-s}},Ps.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp(function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}}),this):this},Ps.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,a={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},i=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==i.w&&0!==i.h||((i={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-i.w/2,i.x2=o.x+i.w/2,i.y1=o.y-i.h/2,i.y2=o.y+i.h/2);var s=a.width.left.value;"px"===a.width.left.units&&a.width.val>0&&(s=100*s/a.width.val);var l=a.width.right.value;"px"===a.width.right.units&&a.width.val>0&&(l=100*l/a.width.val);var u=a.height.top.value;"px"===a.height.top.units&&a.height.val>0&&(u=100*u/a.height.val);var c=a.height.bottom.value;"px"===a.height.bottom.units&&a.height.val>0&&(c=100*c/a.height.val);var d=y(a.width.val-i.w,s,l),h=d.biasDiff,f=d.biasComplementDiff,p=y(a.height.val-i.h,u,c),v=p.biasDiff,g=p.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(i.w,i.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(i.w,a.width.val),o.x=(-h+i.x1+i.x2+f)/2,t.autoHeight=Math.max(i.h,a.height.val),o.y=(-v+i.y1+i.y2+g)/2}function y(e,t,n){var r=0,a=0,i=t+n;return e>0&&i>0&&(r=t/i*e,a=n/i*e),{biasDiff:r,biasComplementDiff:a}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},_s=function(e,t){return null==t?e:Ds(e,t.x1,t.y1,t.x2,t.y2)},As=function(e,t,n){return pt(e,t,n)},Ms=function(e,t,n){if(!t.cy().headless()){var r,a,i=t._private,o=i.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,a=o.srcY):"target"===n?(r=o.tgtX,a=o.tgtY):(r=o.midX,a=o.midY);var l=i.arrowBounds=i.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=a-s,u.x2=r+s,u.y2=a+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,an(u,1),Ds(e,u.x1,u.y1,u.x2,u.y2)}}},Rs=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var a=t._private,i=a.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),d=t.pstyle("text-valign"),h=As(i,"labelWidth",n),f=As(i,"labelHeight",n),p=As(i,"labelX",n),v=As(i,"labelY",n),g=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,k=f,T=h,C=T/2,P=k/2;if(m)o=p-C,s=p+C,l=v-P,u=v+P;else{switch(c.value){case"left":o=p-T,s=p;break;case"center":o=p-C,s=p+C;break;case"right":o=p,s=p+T}switch(d.value){case"top":l=v-k,u=v;break;case"center":l=v-P,u=v+P;break;case"bottom":l=v,u=v+k}}var S=g-Math.max(x,w)-E-2,B=g+Math.max(x,w)+E+2,D=y-Math.max(x,w)-E-2,_=y+Math.max(x,w)+E+2;o+=S,s+=B,l+=D,u+=_;var A=n||"main",M=a.labelBounds,R=M[A]=M[A]||{};R.x1=o,R.y1=l,R.x2=s,R.y2=u,R.w=s-o,R.h=u-l,R.leftPad=S,R.rightPad=B,R.topPad=D,R.botPad=_;var I=m&&"autorotate"===b.strValue,N=null!=b.pfValue&&0!==b.pfValue;if(I||N){var L=I?As(a.rstyle,"labelAngle",n):b.pfValue,z=Math.cos(L),O=Math.sin(L),V=(o+s)/2,F=(l+u)/2;if(!m){switch(c.value){case"left":V=s;break;case"right":V=o}switch(d.value){case"top":F=u;break;case"bottom":F=l}}var X=function(e,t){return{x:(e-=V)*z-(t-=F)*O+V,y:e*O+t*z+F}},j=X(o,l),Y=X(o,u),q=X(s,l),W=X(s,u);o=Math.min(j.x,Y.x,q.x,W.x),s=Math.max(j.x,Y.x,q.x,W.x),l=Math.min(j.y,Y.y,q.y,W.y),u=Math.max(j.y,Y.y,q.y,W.y)}var U=A+"Rot",H=M[U]=M[U]||{};H.x1=o,H.y1=l,H.x2=s,H.y2=u,H.w=s-o,H.h=u-l,Ds(e,o,l,s,u),Ds(a.labelBounds.all,o,l,s,u)}return e}},Is=function(e,t){if(!t.cy().headless()){var n=t.pstyle("outline-opacity").value,r=t.pstyle("outline-width").value+t.pstyle("outline-offset").value;Ns(e,t,n,r,"outside",r/2)}},Ns=function(e,t,n,r,a,i){if(!(0===n||r<=0||"inside"===a)){var o=t.cy(),s=t.pstyle("shape").value,l=o.renderer().nodeShapes[s],u=t.position(),c=u.x,d=u.y,h=t.width(),f=t.height();if(l.hasMiterBounds){"center"===a&&(r/=2);var p=l.miterBounds(c,d,h,f,r);_s(e,p)}else null!=i&&i>0&&on(e,[i,i,i,i])}},Ls=function(e,t){var n,r,a,i,o,s,l,u=e._private.cy,c=u.styleEnabled(),d=u.headless(),h=tn(),f=e._private,p=e.isNode(),v=e.isEdge(),g=f.rstyle,y=p&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!v||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),k=0;if(c&&(k=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var C=e.outerWidth()/2,P=e.outerHeight()/2;Ds(h,n=o-C,a=s-P,r=o+C,i=s+P),c&&Is(h,e),c&&t.includeOutlines&&!d&&Is(h,e),c&&function(e,t){if(!t.cy().headless()){var n=t.pstyle("border-opacity").value,r=t.pstyle("border-width").pfValue,a=t.pstyle("border-position").value;Ns(e,t,n,r,a)}}(h,e)}else if(v&&t.includeEdges)if(c&&!d){var S=e.pstyle("curve-style").strValue;if(n=Math.min(g.srcX,g.midX,g.tgtX),r=Math.max(g.srcX,g.midX,g.tgtX),a=Math.min(g.srcY,g.midY,g.tgtY),i=Math.max(g.srcY,g.midY,g.tgtY),Ds(h,n-=k,a-=k,r+=k,i+=k),"haystack"===S){var B=g.haystackPts;if(B&&2===B.length){if(n=B[0].x,a=B[0].y,n>(r=B[1].x)){var D=n;n=r,r=D}if(a>(i=B[1].y)){var _=a;a=i,i=_}Ds(h,n-k,a-k,r+k,i+k)}}else if("bezier"===S||"unbundled-bezier"===S||he(S,"segments")||he(S,"taxi")){var A;switch(S){case"bezier":case"unbundled-bezier":A=g.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":A=g.linePts}if(null!=A)for(var M=0;M(r=N.x)){var L=n;n=r,r=L}if((a=I.y)>(i=N.y)){var z=a;a=i,i=z}Ds(h,n-=k,a-=k,r+=k,i+=k)}if(c&&t.includeEdges&&v&&(Ms(h,e,"mid-source"),Ms(h,e,"mid-target"),Ms(h,e,"source"),Ms(h,e,"target")),c)if("yes"===e.pstyle("ghost").value){var O=e.pstyle("ghost-offset-x").pfValue,V=e.pstyle("ghost-offset-y").pfValue;Ds(h,h.x1+O,h.y1+V,h.x2+O,h.y2+V)}var F=f.bodyBounds=f.bodyBounds||{};sn(F,h),on(F,y),an(F,1),c&&(n=h.x1,r=h.x2,a=h.y1,i=h.y2,Ds(h,n-E,a-E,r+E,i+E));var X=f.overlayBounds=f.overlayBounds||{};sn(X,h),on(X,y),an(X,1);var j=f.labelBounds=f.labelBounds||{};null!=j.all?((l=j.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):j.all=tn(),c&&t.includeLabels&&(t.includeMainLabels&&Rs(h,e,null),v&&(t.includeSourceLabels&&Rs(h,e,"source"),t.includeTargetLabels&&Rs(h,e,"target")))}return h.x1=Bs(h.x1),h.y1=Bs(h.y1),h.x2=Bs(h.x2),h.y2=Bs(h.y2),h.w=Bs(h.x2-h.x1),h.h=Bs(h.y2-h.y1),h.w>0&&h.h>0&&b&&(on(h,y),an(h,1)),h},zs=function(e){var t=0,n=function(e){return(e?1:0)<0&&void 0!==arguments[0]?arguments[0]:rl,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},il.removeAllListeners=function(){return this.removeListener("*")},il.emit=il.trigger=function(e,t,n){var r=this.listeners,a=r.length;return this.emitting++,Z(t)||(t=[t]),ll(this,function(e,i){null!=n&&(r=[{event:i.event,type:i.type,namespace:i.namespace,callback:n}],a=r.length);for(var o=function(){var n=r[s];if(n.type===i.type&&(!n.namespace||n.namespace===i.namespace||".*"===n.namespace)&&e.eventMatches(e.context,n,i)){var a=[i];null!=t&&function(e,t){for(var n=0;n1&&!r){var a=this.length-1,i=this[a],o=i._private.data.id;this[a]=void 0,this[e]=i,n.set(o,{ele:i,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var a=r.index;return this.unmergeAt(a),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&K(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,a=0;ar&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,a=this,i=0;i=0&&a1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,r.style().apply(n));var a=n._private.style[e];return null!=a?a:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,a=n.style();if($(e)){var i=e;a.applyBypass(this,i,r),this.emitAndNotify("style")}else if(K(e)){if(void 0===t){var o=this[0];return o?a.getStylePropertyValue(o,e):void 0}a.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?a.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),a=this;if(void 0===e)for(var i=0;i0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)},"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),Rl.neighbourhood=Rl.neighborhood,Rl.closedNeighbourhood=Rl.closedNeighborhood,Rl.openNeighbourhood=Rl.openNeighborhood,be(Rl,{source:ds(function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t},"source"),target:ds(function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t},"target"),sources:zl({attr:"source"}),targets:zl({attr:"target"})}),be(Rl,{edgesWith:ds(Ol(),"edgesWith"),edgesTo:ds(Ol({thisIsSrc:!0}),"edgesTo")}),be(Rl,{connectedEdges:ds(function(e){for(var t=[],n=0;n0);return i},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),Rl.componentsOf=Rl.components;var Fl=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var a=new gt,i=!1;if(t){if(t.length>0&&$(t[0])&&!te(t[0])){i=!0;for(var o=[],s=new mt,l=0,u=t.length;l0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=this,i=a.cy(),o=i._private,s=[],l=[],u=0,c=a.length;u0){for(var I=e.length===a.length?a:new Fl(i,e),N=0;N0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],a={},i=n._private.cy;function o(e){var n=a[e.id()];t&&e.removed()||n||(a[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n0&&(e?k.emitAndNotify("remove"):t&&k.emit("remove"));for(var T=0;T=.001?function(t,r){for(var a=0;a<4;++a){var i=h(r,e,n);if(0===i)return r;r-=(d(r,e,n)-t)/i}return r}(t,o):0===l?o:function(t,r,a){var i,o,s=0;do{(i=d(o=r+(a-r)/2,e,n)-t)>0?a=o:r=o}while(Math.abs(i)>1e-7&&++s<10);return o}(t,r,r+a)}var p=!1;function v(){p=!0,e===t&&n===r||function(){for(var t=0;t<11;++t)s[t]=d(t*a,e,n)}()}var g=function(a){return p||v(),e===t&&n===r?a:0===a?0:1===a?1:d(f(a),t,r)};g.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var y="generateBezier("+[e,t,n,r]+")";return g.toString=function(){return y},g}var ql=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var a={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:a.v,dv:e(a)}}function n(n,r){var a={dx:n.v,dv:e(n)},i=t(n,.5*r,a),o=t(n,.5*r,i),s=t(n,r,o),l=1/6*(a.dx+2*(i.dx+o.dx)+s.dx),u=1/6*(a.dv+2*(i.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,a){var i,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,d=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,a=a||null,l.tension=t,l.friction=r,o=(i=null!==a)?(c=e(t,r))/a*.016:.016;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>d&&Math.abs(s.v)>d;);return i?function(e){return u[e*(u.length-1)|0]}:c}}(),Wl=function(e,t,n,r){var a=Yl(e,t,n,r);return function(e,t,n){return e+(t-e)*a(n)}},Ul={linear:function(e,t,n){return e+(t-e)*n},ease:Wl(.25,.1,.25,1),"ease-in":Wl(.42,0,1,1),"ease-out":Wl(0,0,.58,1),"ease-in-out":Wl(.42,0,.58,1),"ease-in-sine":Wl(.47,0,.745,.715),"ease-out-sine":Wl(.39,.575,.565,1),"ease-in-out-sine":Wl(.445,.05,.55,.95),"ease-in-quad":Wl(.55,.085,.68,.53),"ease-out-quad":Wl(.25,.46,.45,.94),"ease-in-out-quad":Wl(.455,.03,.515,.955),"ease-in-cubic":Wl(.55,.055,.675,.19),"ease-out-cubic":Wl(.215,.61,.355,1),"ease-in-out-cubic":Wl(.645,.045,.355,1),"ease-in-quart":Wl(.895,.03,.685,.22),"ease-out-quart":Wl(.165,.84,.44,1),"ease-in-out-quart":Wl(.77,0,.175,1),"ease-in-quint":Wl(.755,.05,.855,.06),"ease-out-quint":Wl(.23,1,.32,1),"ease-in-out-quint":Wl(.86,0,.07,1),"ease-in-expo":Wl(.95,.05,.795,.035),"ease-out-expo":Wl(.19,1,.22,1),"ease-in-out-expo":Wl(1,0,0,1),"ease-in-circ":Wl(.6,.04,.98,.335),"ease-out-circ":Wl(.075,.82,.165,1),"ease-in-out-circ":Wl(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Ul.linear;var r=ql(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Wl};function Hl(e,t,n,r,a){if(1===r)return n;if(t===n)return n;var i=a(t,n,r);return null==e||((e.roundValue||e.color)&&(i=Math.round(i)),void 0!==e.min&&(i=Math.max(i,e.min)),void 0!==e.max&&(i=Math.min(i,e.max))),i}function Kl(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Gl(e,t,n,r,a){var i=null!=a?a.type:null;n<0?n=0:n>1&&(n=1);var o=Kl(e,a),s=Kl(t,a);if(Q(o)&&Q(s))return Hl(i,o,s,n,r);if(Z(o)&&Z(s)){for(var l=[],u=0;u0?("spring"===d&&h.push(o.duration),o.easingImpl=Ul[d].apply(null,h)):o.easingImpl=Ul[d]}var f,p=o.easingImpl;if(f=0===o.duration?1:(n-l)/o.duration,o.applying&&(f=o.progress),f<0?f=0:f>1&&(f=1),null==o.delay){var v=o.startPosition,g=o.position;if(g&&a&&!e.locked()){var y={};$l(v.x,g.x)&&(y.x=Gl(v.x,g.x,f,p)),$l(v.y,g.y)&&(y.y=Gl(v.y,g.y,f,p)),e.position(y)}var m=o.startPan,b=o.pan,x=i.pan,w=null!=b&&r;w&&($l(m.x,b.x)&&(x.x=Gl(m.x,b.x,f,p)),$l(m.y,b.y)&&(x.y=Gl(m.y,b.y,f,p)),e.emit("pan"));var E=o.startZoom,k=o.zoom,T=null!=k&&r;T&&($l(E,k)&&(i.zoom=en(i.minZoom,Gl(E,k,f,p),i.maxZoom)),e.emit("zoom")),(w||T)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&a){for(var P=0;P=0;t--){(0,e[t])()}e.splice(0,e.length)},c=i.length-1;c>=0;c--){var d=i[c],h=d._private;h.stopped?(i.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,u(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||Ql(0,d,e),Zl(t,d,e,n),h.applying&&(h.applying=!1),u(h.frames),null!=h.step&&h.step(e),d.completed()&&(i.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,u(h.completes)),s=!0)}return n||0!==i.length||0!==o.length||r.push(t),s}for(var i=!1,o=0;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var eu={animate:Eo.animate(),animation:Eo.animation(),animated:Eo.animated(),clearQueue:Eo.clearQueue(),delay:Eo.delay(),delayAnimation:Eo.delayAnimation(),stop:Eo.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender(function(t,n){Jl(n,e)},t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&Le(function(n){Jl(n,e),t()})}()}}},tu={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&te(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},nu=function(e){return K(e)?new os(e):e},ru={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new al(tu,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,nu(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,nu(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,nu(t),n),this},once:function(e,t,n){return this.emitter().one(e,nu(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};Eo.eventAliasesOn(ru);var au={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};au.jpeg=au.jpg;var iu={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var a;a=K(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var i=new r(be({},e,{cy:t,eles:a}));return i}at("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else at("A `name` must be specified to make a layout");else at("Layout options must be specified to make a layout")}};iu.createLayout=iu.makeLayout=iu.layout;var ou={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var a=this.renderer();!this.destroyed()&&a&&a.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)})}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch(function(){for(var n=Object.keys(e),r=0;r0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]})},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};lu.invalidateDimensions=lu.resize;var uu={collection:function(e,t){return K(e)?this.$(e):ee(e)?e.collection():Z(e)?(t||(t={}),new Fl(this,e,t.unique,t.removed)):new Fl(this)},nodes:function(e){var t=this.$(function(e){return e.isNode()});return e?t.filter(e):t},edges:function(e){var t=this.$(function(e){return e.isEdge()});return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};uu.elements=uu.filter=uu.$;var cu={},du="t";cu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(h||d&&f){var p=void 0;h&&f||h?p=u.properties:f&&(p=u.mappedProperties);for(var v=0;v1&&(g=1),s.color){var w=a.valueMin[0],E=a.valueMax[0],k=a.valueMin[1],T=a.valueMax[1],C=a.valueMin[2],P=a.valueMax[2],S=null==a.valueMin[3]?1:a.valueMin[3],B=null==a.valueMax[3]?1:a.valueMax[3],D=[Math.round(w+(E-w)*g),Math.round(k+(T-k)*g),Math.round(C+(P-C)*g),Math.round(S+(B-S)*g)];n={bypass:a.bypass,name:a.name,value:D,strValue:"rgb("+D[0]+", "+D[1]+", "+D[2]+")"}}else{if(!s.number)return!1;var _=a.valueMin+(a.valueMax-a.valueMin)*g;n=this.parse(a.name,_,a.bypass,h)}if(!n)return v(),!1;n.mapping=a,a=n;break;case o.data:for(var A=a.field.split("."),M=d.data,R=0;R0&&i>0){for(var s={},l=!1,u=0;u0?e.delayAnimation(o).play().promise().then(t):t()}).then(function(){return e.animation({style:s,duration:i,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){n.removeBypasses(e,a),e.emitAndNotify("style"),r.transitioning=!1})}else r.transitioning&&(this.removeBypasses(e,a),e.emitAndNotify("style"),r.transitioning=!1)},cu.checkTrigger=function(e,t,n,r,a,i){var o=this.properties[t],s=a(o);e.removed()||null!=s&&s(n,r,e)&&i(o)},cu.checkZOrderTrigger=function(e,t,n,r){var a=this;this.checkTrigger(e,t,n,r,function(e){return e.triggersZOrder},function(){a._private.cy.notify("zorder",e)})},cu.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,function(e){return e.triggersBounds},function(t){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache()})},cu.checkConnectedEdgesBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,function(e){return e.triggersBoundsOfConnectedEdges},function(t){e.connectedEdges().forEach(function(e){e.dirtyBoundingBoxCache()})})},cu.checkParallelEdgesBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,function(e){return e.triggersBoundsOfParallelEdges},function(t){e.parallelEdges().forEach(function(e){e.dirtyBoundingBoxCache()})})},cu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r),this.checkConnectedEdgesBoundsTrigger(e,t,n,r),this.checkParallelEdgesBoundsTrigger(e,t,n,r)};var hu={applyBypass:function(e,t,n,r){var a=[];if("*"===t||"**"===t){if(void 0!==n)for(var i=0;it.length?i.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(i=i.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(i.match(/^\s*$/))break;var l=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){ot("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}t=l[0];var u=l[1];if("core"!==u)if(new os(u).invalid){ot("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],d=!1;n=c;for(var h=[];;){if(n.match(/^\s*$/))break;var f=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!f){ot("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),d=!0;break}r=f[0];var p=f[1],v=f[2];if(this.properties[p])a.parse(p,v)?(h.push({name:p,val:v}),s()):(ot("Skipping property: Invalid property definition in: "+r),s());else ot("Skipping property: Invalid property name in: "+r),s()}if(d){o();break}a.selector(u);for(var g=0;g=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var h=s.data;return{name:e,value:u,strValue:""+t,mapped:h,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(d.multiple)return!1;var f=s.mapData;if(!d.color&&!d.number)return!1;var p=this.parse(e,c[4]);if(!p||p.mapped)return!1;var v=this.parse(e,c[5]);if(!v||v.mapped)return!1;if(p.pfValue===v.pfValue||p.strValue===v.strValue)return ot("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+p.strValue+"`"),this.parse(e,p.strValue);if(d.color){var g=p.value,y=v.value;if(!(g[0]!==y[0]||g[1]!==y[1]||g[2]!==y[2]||g[3]!==y[3]&&(null!=g[3]&&1!==g[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:f,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:p.value,valueMax:v.value,bypass:n}}}if(d.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):Z(t)?t:[t],d.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",k=!1,T=0;T0?" ":"")+C.strValue}return d.validate&&!d.validate(b,x)?null:d.singleEnum&&k?1===b.length&&K(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var P,S,B=function(){for(var r=0;rd.max||d.strictMax&&t===d.max))return null;var R={name:e,value:t,strValue:""+t+(D||""),units:D,bypass:n};return d.unitless||"px"!==D&&"em"!==D?R.pfValue=t:R.pfValue="px"!==D&&D?this.getEmSizeInPixels()*t:t,"ms"!==D&&"s"!==D||(R.pfValue="ms"===D?t:1e3*t),"deg"!==D&&"rad"!==D||(R.pfValue="rad"===D?t:(P=t,Math.PI*P/180)),"%"===D&&(R.pfValue=t/100),R}if(d.propList){var I=[],N=""+t;if("none"===N);else{for(var L=N.split(/\s*,\s*|\s+/),z=0;z0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,a=r.pan,i=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),Q(e)?n=e:$(e)&&(n=e.level,null!=e.position?t=Yt(e.position,i,a):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?i=!0:(t.zoom=s,a.push("zoom"))}if(r&&(!i||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;Q(l.x)&&(t.pan.x=l.x,o=!1),Q(l.y)&&(t.pan.y=l.y,o=!1),o||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(K(e)){var n=e;e=this.mutableElements().filter(n)}else ee(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),a=this.width(),i=this.height();return{x:(a-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(i-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,a=this;return n.sizeCache=n.sizeCache||(r?(e=a.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};Eu.centre=Eu.center,Eu.autolockNodes=Eu.autolock,Eu.autoungrabifyNodes=Eu.autoungrabify;var ku={data:Eo.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Eo.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Eo.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Eo.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};ku.attr=ku.data,ku.removeAttr=ku.removeData;var Tu=function(e){var t=this,n=(e=be({},e)).container;n&&!J(n)&&J(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var a=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var i=void 0!==f&&void 0!==n&&!e.headless,o=e;o.layout=be({name:i?"grid":"null"},o.layout),o.renderer=be({name:i?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new Fl(this),listeners:[],aniEles:new Fl(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?i:o.styleEnabled,zoom:Q(o.zoom)?o.zoom:1,pan:{x:$(o.pan)&&Q(o.pan.x)?o.pan.x:0,y:$(o.pan)&&Q(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var u=be({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(oe))return Gr.all(e).then(t);t(e)}([o.style,o.elements],function(e){var n=e[0],i=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var a=t.mutableElements();a.length>0&&a.remove(),null!=e&&($(e)||Z(e))&&t.add(e),t.one("layoutready",function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")}).one("layoutstop",function(){t.one("done",r),t.emit("done")});var i=be({},t._private.options.layout);i.eles=t.elements(),t.layout(i).run()}(i,function(){t.startAnimationLoop(),l.ready=!0,G(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,l=!!t.boundingBox,u=tn(l?t.boundingBox:structuredClone(n.extent()));if(ee(t.roots))e=t.roots;else if(Z(t.roots)){for(var c=[],d=0;d0;){var D=B(),_=T(D,P);if(_)D.outgoers().filter(function(e){return e.isNode()&&r.has(e)}).forEach(S);else if(null===_){ot("Detected double maximal shift for node `"+D.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var A=0;if(t.avoidOverlap)for(var M=0;M0&&y[0].length<=3?i/2:0),s=2*Math.PI/y[r].length*a;return 0===r&&1===y[0].length&&(o=1),{x:W+o*Math.cos(s),y:U+o*Math.sin(s)}}var c=y[r].length,d=Math.max(1===c?0:l?(u.w-2*t.padding-H.w)/((t.grid?$:c)-1):(u.w-2*t.padding-H.w)/((t.grid?$:c)+1),A);return{x:W+(a+1-(c+1)/2)*d,y:U+(r+1-(V+1)/2)*G}}(e),u,Q[t.direction])}),this};var Au={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Mu(e){this.options=be({},Au,e)}Mu.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));for(var o,s=tn(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/i.length:t.sweep)/Math.max(1,i.length-1),d=0,h=0;h1&&t.avoidOverlap){d*=1.75;var g=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(d*d/(g*g+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,function(e,n){var r=t.startAngle+n*c*(a?1:-1),i=o*Math.cos(r),s=o*Math.sin(r);return{x:l+i,y:u+s}}),this};var Ru,Iu={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Nu(e){this.options=be({},Iu,e)}Nu.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,a=t.eles,i=a.nodes().not(":parent"),o=tn(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,d=0;d0)Math.abs(m[0].value-x.value)>=g&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,k=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,k)}for(var T=0,C=0;C1&&t.avoidOverlap){var D=Math.cos(B)-Math.cos(0),_=Math.sin(B)-Math.sin(0),A=Math.sqrt(w*w/(D*D+_*_));T=Math.max(A,T)}P.r=T,T+=w}if(t.equidistant){for(var M=0,R=0,I=0;I=e.numIter)&&(qu(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&i(),Le(c)):(nc(r,e),s())};c()}else{for(;u;)u=o(l),l++;nc(r,e),s()}return this},zu.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},zu.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var Ou=function(e,t,n){for(var r=n.eles.edges(),a=n.eles.nodes(),i=tn(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:i.w,clientHeight:i.h,boundingBox:i},s=n.eles.components(),l={},u=0;u0){o.graphSet.push(w);for(u=0;ur.count?0:r.graph},Fu=function(e,t,n,r){var a=r.graphSet[n];if(-10)var s=(u=r.nodeOverlap*o)*a/(v=Math.sqrt(a*a+i*i)),l=u*i/v;else{var u,c=Gu(e,a,i),d=Gu(t,-1*a,-1*i),h=d.x-c.x,f=d.y-c.y,p=h*h+f*f,v=Math.sqrt(p);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/p)*h/v,l=u*f/v}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Ku=function(e,t,n,r){if(n>0)var a=e.maxX-t.minX;else a=t.maxX-e.minX;if(r>0)var i=e.maxY-t.minY;else i=t.maxY-e.minY;return a>=0&&i>=0?Math.sqrt(a*a+i*i):0},Gu=function(e,t,n){var r=e.positionX,a=e.positionY,i=e.height||1,o=e.width||1,s=n/t,l=i/o,u={};return 0===t&&0n?(u.x=r,u.y=a+i/2,u):0t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=a-o*n/2/t,u):0=l)?(u.x=r+i*t/2/n,u.y=a+i/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-i*t/2/n,u.y=a-i/2,u):u},Zu=function(e,t){for(var n=0;n1){var p=t.gravity*d/f,v=t.gravity*h/f;c.offsetX+=p,c.offsetY+=v}}}}},Qu=function(e,t){var n=[],r=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;r<=a;){var i=n[r++],o=e.idToIndex[i],s=e.layoutNodes[o],l=s.children;if(0n)var a={x:n*e/r,y:n*t/r};else a={x:e,y:t};return a},tc=function(e,t){var n=e.parentId;if(null!=n){var r=t.layoutNodes[t.idToIndex[n]],a=!1;return(null==r.maxX||e.maxX+r.padRight>r.maxX)&&(r.maxX=e.maxX+r.padRight,a=!0),(null==r.minX||e.minX-r.padLeftr.maxY)&&(r.maxY=e.maxY+r.padBottom,a=!0),(null==r.minY||e.minY-r.padTopp&&(d+=f+t.componentSpacing,c=0,h=0,f=0)}}},rc={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function ac(e){this.options=be({},rc,e)}ac.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));var i=tn(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===i.h||0===i.w)r.nodes().layoutPositions(this,t,function(e){return{x:i.x1,y:i.y1}});else{var o=a.size(),s=Math.sqrt(o*i.h/i.w),l=Math.round(s),u=Math.round(i.w/i.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},d=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},h=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=h&&null!=f)l=h,u=f;else if(null!=h&&null==f)l=h,u=Math.ceil(o/l);else if(null==h&&null!=f)u=f,l=Math.ceil(o/u);else if(u*l>o){var p=c(),v=d();(p-1)*v>=o?c(p-1):(v-1)*p>=o&&d(v-1)}else for(;u*l=o?d(y+1):c(g+1)}var m=i.w/u,b=i.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x=u&&(A=0,_++)},R={},I=0;I(r=mn(e,t,x[w],x[w+1],x[w+2],x[w+3])))return g(n,r),!0}else if("bezier"===i.edgeType||"multibezier"===i.edgeType||"self"===i.edgeType||"compound"===i.edgeType)for(x=i.allpts,w=0;w+5(r=yn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return g(n,r),!0;m=m||a.source,b=b||a.target;var E=o.getArrowWidth(l,c),k=[{name:"source",x:i.arrowStartX,y:i.arrowStartY,angle:i.srcArrowAngle},{name:"target",x:i.arrowEndX,y:i.arrowEndY,angle:i.tgtArrowAngle},{name:"mid-source",x:i.midX,y:i.midY,angle:i.midsrcArrowAngle},{name:"mid-target",x:i.midX,y:i.midY,angle:i.midtgtArrowAngle}];for(w=0;w0&&(y(m),y(b))}function b(e,t,n){return pt(e,t,n)}function x(n,r){var a,i=n._private,o=p;a=r?r+"-":"",n.boundingBox();var s=i.labelBounds[r||"main"],l=n.pstyle(a+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(i.rscratch,"labelX",r),c=b(i.rscratch,"labelY",r),d=b(i.rscratch,"labelAngle",r),h=n.pstyle(a+"text-margin-x").pfValue,f=n.pstyle(a+"text-margin-y").pfValue,v=s.x1-o-h,y=s.x2+o-h,m=s.y1-o-f,x=s.y2+o-f;if(d){var w=Math.cos(d),E=Math.sin(d),k=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=k(v,m),C=k(v,x),P=k(y,m),S=k(y,x),B=[T.x+h,T.y+f,P.x+h,P.y+f,S.x+h,S.y+f,C.x+h,C.y+f];if(bn(e,t,B))return g(n),!0}else if(un(s,e,t))return g(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){var a=this.getCachedZSortedEles().interactive,i=2/this.cy.zoom(),o=[],s=Math.min(e,n),u=Math.max(e,n),c=Math.min(t,r),d=Math.max(t,r),h=tn({x1:e=s,y1:t=c,x2:n=u,y2:r=d}),f=[{x:h.x1,y:h.y1},{x:h.x2,y:h.y1},{x:h.x2,y:h.y2},{x:h.x1,y:h.y2}],p=[[f[0],f[1]],[f[1],f[2]],[f[2],f[3]],[f[3],f[0]]];function v(e,t,n){return pt(e,t,n)}function g(e,t){var n=e._private,r=i;e.boundingBox();var a=n.labelBounds.main;if(!a)return null;var o=v(n.rscratch,"labelX",t),s=v(n.rscratch,"labelY",t),l=v(n.rscratch,"labelAngle",t),u=e.pstyle("text-margin-x").pfValue,c=e.pstyle("text-margin-y").pfValue,d=a.x1-r-u,h=a.x2+r-u,f=a.y1-r-c,p=a.y2+r-c;if(l){var g=Math.cos(l),y=Math.sin(l),m=function(e,t){return{x:(e-=o)*g-(t-=s)*y+o,y:e*y+t*g+s}};return[m(d,f),m(h,f),m(h,p),m(d,p)]}return[{x:d,y:f},{x:h,y:f},{x:h,y:p},{x:d,y:p}]}function y(e,t,n,r){function a(e,t,n){return(n.y-e.y)*(t.x-e.x)>(t.y-e.y)*(n.x-e.x)}return a(e,n,r)!==a(t,n,r)&&a(e,t,n)!==a(e,t,r)}for(var m=0;m0?-(Math.PI-i.ang):Math.PI+i.ang),zc(t,n,Lc),xc=Nc.nx*Lc.ny-Nc.ny*Lc.nx,wc=Nc.nx*Lc.nx-Nc.ny*-Lc.ny,Tc=Math.asin(Math.max(-1,Math.min(1,xc))),Math.abs(Tc)<1e-6)return mc=t.x,bc=t.y,void(Pc=Bc=0);Ec=1,kc=!1,wc<0?Tc<0?Tc=Math.PI+Tc:(Tc=Math.PI-Tc,Ec=-1,kc=!0):Tc>0&&(Ec=-1,kc=!0),Bc=void 0!==t.radius?t.radius:r,Cc=Tc/2,Dc=Math.min(Nc.len/2,Lc.len/2),a?(Sc=Math.abs(Math.cos(Cc)*Bc/Math.sin(Cc)))>Dc?(Sc=Dc,Pc=Math.abs(Sc*Math.sin(Cc)/Math.cos(Cc))):Pc=Bc:(Sc=Math.min(Dc,Bc),Pc=Math.abs(Sc*Math.sin(Cc)/Math.cos(Cc))),Mc=t.x+Lc.nx*Sc,Rc=t.y+Lc.ny*Sc,mc=Mc-Lc.ny*Pc*Ec,bc=Rc+Lc.nx*Pc*Ec,_c=t.x+Nc.nx*Sc,Ac=t.y+Nc.ny*Sc,Ic=t};function Vc(e,t){0===t.radius?e.lineTo(t.cx,t.cy):e.arc(t.cx,t.cy,t.radius,t.startAngle,t.endAngle,t.counterClockwise)}function Fc(e,t,n,r){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];return 0===r||0===t.radius?{cx:t.x,cy:t.y,radius:0,startX:t.x,startY:t.y,stopX:t.x,stopY:t.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Oc(e,t,n,r,a),{cx:mc,cy:bc,radius:Pc,startX:_c,startY:Ac,stopX:Mc,stopY:Rc,startAngle:Nc.ang+Math.PI/2*Ec,endAngle:Lc.ang-Math.PI/2*Ec,counterClockwise:kc})}var Xc=.01,jc=Math.sqrt(.02),Yc={};function qc(e){var t=[];if(null!=e){for(var n=0;n0?Math.max(e-t,0):Math.min(e+t,0)},S=P(T,E),B=P(C,k),D=!1;"auto"===g?v=Math.abs(S)>Math.abs(B)?a:r:g===l||g===s?(v=r,D=!0):g!==i&&g!==o||(v=a,D=!0);var _,A=v===r,M=A?B:S,R=A?C:T,I=Kt(R),N=!1;(D&&(m||x)||!(g===s&&R<0||g===l&&R>0||g===i&&R>0||g===o&&R<0)||(M=(I*=-1)*Math.abs(M),N=!0),m)?_=(b<0?1+b:b)*M:_=(b<0?M:0)+b*I;var L=function(e){return Math.abs(e)=Math.abs(M)},z=L(_),O=L(Math.abs(M)-Math.abs(_));if((z||O)&&!N)if(A){var V=Math.abs(R)<=d/2,F=Math.abs(T)<=h/2;if(V){var X=(u.x1+u.x2)/2,j=u.y1,Y=u.y2;n.segpts=[X,j,X,Y]}else if(F){var q=(u.y1+u.y2)/2,W=u.x1,U=u.x2;n.segpts=[W,q,U,q]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(R)<=c/2,K=Math.abs(C)<=f/2;if(H){var G=(u.y1+u.y2)/2,Z=u.x1,$=u.x2;n.segpts=[Z,G,$,G]}else if(K){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(A){var te=u.y1+_+(p?d/2*I:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ae=u.x1+_+(p?c/2*I:0),ie=u.y1,oe=u.y2;n.segpts=[ae,ie,ae,oe]}if(n.isRound){var se=e.pstyle("taxi-radius").value,le="arc-radius"===e.pstyle("radius-type").value[0];n.radii=new Array(n.segpts.length/2).fill(se),n.isArcRadius=new Array(n.segpts.length/2).fill(le)}},Yc.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,a=t.tgtPos,i=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,d=t.srcCornerRadius,h=t.tgtCornerRadius,f=t.srcRs,p=t.tgtRs,v=!Q(n.startX)||!Q(n.startY),g=!Q(n.arrowStartX)||!Q(n.arrowStartY),y=!Q(n.endX)||!Q(n.endY),m=!Q(n.arrowEndX)||!Q(n.arrowEndY),b=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),x=Gt({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),w=xv.poolIndex()){var g=p;p=v,v=g}var y=d.srcPos=p.position(),m=d.tgtPos=v.position(),b=d.srcW=p.outerWidth(),x=d.srcH=p.outerHeight(),E=d.tgtW=v.outerWidth(),k=d.tgtH=v.outerHeight(),T=d.srcShape=n.nodeShapes[t.getNodeShape(p)],C=d.tgtShape=n.nodeShapes[t.getNodeShape(v)],P=d.srcCornerRadius="auto"===p.pstyle("corner-radius").value?"auto":p.pstyle("corner-radius").pfValue,S=d.tgtCornerRadius="auto"===v.pstyle("corner-radius").value?"auto":v.pstyle("corner-radius").pfValue,B=d.tgtRs=v._private.rscratch,D=d.srcRs=p._private.rscratch;d.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var _=0;_=jc||(q=Math.sqrt(Math.max(Y*Y,Xc)+Math.max(j*j,Xc)));var W=d.vector={x:Y,y:j},U=d.vectorNorm={x:W.x/q,y:W.y/q},H={x:-U.y,y:U.x};d.nodesOverlap=!Q(q)||C.checkPoint(L[0],L[1],0,E,k,m.x,m.y,S,B)||T.checkPoint(O[0],O[1],0,b,x,y.x,y.y,P,D),d.vectorNormInverse=H,e={nodesOverlap:d.nodesOverlap,dirCounts:d.dirCounts,calculatedIntersection:!0,hasBezier:d.hasBezier,hasUnbundled:d.hasUnbundled,eles:d.eles,srcPos:m,srcRs:B,tgtPos:y,tgtRs:D,srcW:E,srcH:k,tgtW:b,tgtH:x,srcIntn:V,tgtIntn:z,srcShape:C,tgtShape:T,posPts:{x1:X.x2,y1:X.y2,x2:X.x1,y2:X.y1},intersectionPts:{x1:F.x2,y1:F.y2,x2:F.x1,y2:F.y1},vector:{x:-W.x,y:-W.y},vectorNorm:{x:-U.x,y:-U.y},vectorNormInverse:{x:-H.x,y:-H.y}}}var K=N?e:d;M.nodesOverlap=K.nodesOverlap,M.srcIntn=K.srcIntn,M.tgtIntn=K.tgtIntn,M.isRound=R.startsWith("round"),r&&(p.isParent()||p.isChild()||v.isParent()||v.isChild())&&(p.parents().anySame(v)||v.parents().anySame(p)||p.same(v)&&p.isParent())?t.findCompoundLoopPoints(A,K,_,I):p===v?t.findLoopPoints(A,K,_,I):R.endsWith("segments")?t.findSegmentsPoints(A,K):R.endsWith("taxi")?t.findTaxiPoints(A,K):"straight"===R||!I&&d.eles.length%2==1&&_===Math.floor(d.eles.length/2)?t.findStraightEdgePoints(A):t.findBezierPoints(A,K,_,I,N),t.findEndpoints(A),t.tryToCorrectInvalidPoints(A,K),t.checkForInvalidEdgeWarning(A),t.storeAllpts(A),t.storeEdgeProjections(A),t.calculateArrowAngles(A),t.recalculateEdgeLabelProjections(A),t.calculateLabelAngles(A)}},w=0;w0){var J=f,ee=Zt(J,Wt(i)),te=Zt(J,Wt($)),ne=ee;if(te2)Zt(J,{x:$[2],y:$[3]})0){var ge=p,ye=Zt(ge,Wt(i)),me=Zt(ge,Wt(ve)),be=ye;if(me2)Zt(ge,{x:ve[2],y:ve[3]})=u||m){c={cp:v,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-h)/x.length,E=x.t1-x.t0,k=s?x.t0+E*w:x.t1-E*w;k=en(0,k,1),t=Jt(b.p0,b.p1,b.p2,k),a=function(e,t,n,r){var a=en(0,r-.001,1),i=en(0,r+.001,1),o=Jt(e,t,n,a),s=Jt(e,t,n,i);return Zc(o,s)}(b.p0,b.p1,b.p2,k);break;case"straight":case"segments":case"haystack":for(var T,C,P,S,B=0,D=r.allpts.length,_=0;_+3=u));_+=2);var A=(u-C)/T;A=en(0,A,1),t=function(e,t,n,r){var a=t.x-e.x,i=t.y-e.y,o=Gt(e,t),s=a/o,l=i/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(P,S,A),a=Zc(P,S)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,a)}};u("source"),u("target"),this.applyLabelDimensions(e)}},Kc.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},Kc.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),a=Ue(r,e._private.labelDimsKey);if(pt(n.rscratch,"prefixedLabelDimsKey",t)!==a){vt(n.rscratch,"prefixedLabelDimsKey",t,a);var i=this.calculateLabelDimensions(e,r),o=e.pstyle("line-height").pfValue,s=e.pstyle("text-wrap").strValue,l=pt(n.rscratch,"labelWrapCachedLines",t)||[],u="wrap"!==s?1:Math.max(l.length,1),c=i.height/u,d=c*o,h=i.width,f=i.height+(u-1)*(o-1)*c;vt(n.rstyle,"labelWidth",t,h),vt(n.rscratch,"labelWidth",t,h),vt(n.rstyle,"labelHeight",t,f),vt(n.rscratch,"labelHeight",t,f),vt(n.rscratch,"labelLineHeight",t,d)}},Kc.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",a=e.pstyle(r+"label").strValue,i=e.pstyle("text-transform").value,s=function(e,r){return r?(vt(n.rscratch,e,t,r),r):pt(n.rscratch,e,t)};if(!a)return"";"none"==i||("uppercase"==i?a=a.toUpperCase():"lowercase"==i&&(a=a.toLowerCase()));var l=e.pstyle("text-wrap").value;if("wrap"===l){var u=s("labelKey");if(null!=u&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var c=a.split("\n"),d=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,f=[],p=/[\s\u200b]+|$/g,v=0;vd){var b,x="",w=0,E=o(g.matchAll(p));try{for(E.s();!(b=E.n()).done;){var k=b.value,T=k[0],C=g.substring(w,k.index);w=k.index+T.length;var P=0===x.length?C:x+C+T;this.calculateLabelDimensions(e,P).width<=d?x+=C+T:(x&&f.push(x),x=C+T)}}catch(A){E.e(A)}finally{E.f()}x.match(/^[\s\u200b]+$/)||f.push(x)}else f.push(g)}s("labelWrapCachedLines",f),a=s("labelWrapCachedText",f.join("\n")),s("labelWrapKey",u)}else if("ellipsis"===l){var S=e.pstyle("text-max-width").pfValue,B="",D=!1;if(this.calculateLabelDimensions(e,a).widthS)break;B+=a[_],_===a.length-1&&(D=!0)}return D||(B+="\u2026"),B}return a},Kc.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},Kc.calculateLabelDimensions=function(e,t){var n=this.cy.window().document,r=e.pstyle("font-style").strValue,a=e.pstyle("font-size").pfValue,i=e.pstyle("font-family").strValue,o=e.pstyle("font-weight").strValue,s=this.labelCalcCanvas,l=this.labelCalcCanvasContext;if(!s){s=this.labelCalcCanvas=n.createElement("canvas"),l=this.labelCalcCanvasContext=s.getContext("2d");var u=s.style;u.position="absolute",u.left="-9999px",u.top="-9999px",u.zIndex="-1",u.visibility="hidden",u.pointerEvents="none"}l.font="".concat(r," ").concat(o," ").concat(a,"px ").concat(i);for(var c=0,d=0,h=t.split("\n"),f=0;f1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var P=a(t);g&&(e.hoverData.tapholdCancelled=!0);n=!0,r(v,["mousemove","vmousemove","tapdrag"],t,{x:c[0],y:c[1]});var S=function(e){return{originalEvent:t,type:e,position:{x:c[0],y:c[1]}}},B=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit(S("boxstart")),p[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(g){var D=S("cxtdrag");b?b.emit(D):o.emit(D),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&v===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit(S("cxtdragout")),e.hoverData.cxtOver=v,v&&v.emit(S("cxtdragover")))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var _;if(e.hoverData.justStartedPan){var A=e.hoverData.mdownPos;_={x:(c[0]-A[0])*s,y:(c[1]-A[1])*s},e.hoverData.justStartedPan=!1}else _={x:x[0]*s,y:x[1]*s};o.panBy(_),o.emit(S("dragpan")),e.hoverData.dragged=!0}c=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=p[4]||null!=b&&!b.pannable()){if(b&&b.pannable()&&b.active()&&b.unactivate(),b&&b.grabbed()||v==y||(y&&r(y,["mouseout","tapdragout"],t,{x:c[0],y:c[1]}),v&&r(v,["mouseover","tapdragover"],t,{x:c[0],y:c[1]}),e.hoverData.last=v),b)if(g){if(o.boxSelectionEnabled()&&P)b&&b.grabbed()&&(d(w),b.emit(S("freeon")),w.emit(S("free")),e.dragData.didDrag&&(b.emit(S("dragfreeon")),w.emit(S("dragfree")))),B();else if(b&&b.grabbed()&&e.nodeIsDraggable(b)){var M=!e.dragData.didDrag;M&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||u(w,{inDragLayer:!0});var R={x:0,y:0};if(Q(x[0])&&Q(x[1])&&(R.x+=x[0],R.y+=x[1],M)){var I=e.hoverData.dragDelta;I&&Q(I[0])&&Q(I[1])&&(R.x+=I[0],R.y+=I[1])}e.hoverData.draggingEles=!0,w.silentShift(R).emit(S("position")).emit(S("drag")),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(x[0]),t.push(x[1])):(t[0]+=x[0],t[1]+=x[1])}();n=!0}else if(g){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!P&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){i(b,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,p[4]=0,e.data.bgActivePosistion=Wt(h),e.redrawHint("select",!0),e.redraw())}}else B();b&&b.pannable()&&b.active()&&b.unactivate()}return p[2]=c[0],p[3]=c[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}},!1),e.registerBinding(t,"mouseup",function(t){if((1!==e.hoverData.which||1===t.which||!e.hoverData.capture)&&e.hoverData.capture){e.hoverData.capture=!1;var i=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=a(t);e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate();var f=function(e){return{originalEvent:t,type:e,position:{x:o[0],y:o[1]}}};if(3===e.hoverData.which){var p=f("cxttapend");if(c?c.emit(p):i.emit(p),!e.hoverData.cxtDragged){var v=f("cxttap");c?c.emit(v):i.emit(v)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=i.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout(function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})},i.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||a(t)||(i.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=i.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===i.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(i.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var g=i.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),g.length>0&&e.redrawHint("eles",!0),i.emit(f("boxend"));var y=function(e){return e.selectable()&&!e.selected()};"additive"===i.selectionType()||h||i.$(n).unmerge(g).unselect(),g.emit(f("box")).stdFilter(y).select().emit(f("boxselect")),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var m=c&&c.grabbed();d(u),m&&(c.emit(f("freeon")),u.emit(f("free")),e.dragData.didDrag&&(c.emit(f("dragfreeon")),u.emit(f("dragfree"))))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null,e.hoverData.which=null}},!1);var k,T,C,P,S,B,D,_,A,M,R,I,N,L,z=[],O=1e5,V=function(t){var n=!1,r=t.deltaY;if(null==r&&(null!=t.wheelDeltaY?r=t.wheelDeltaY/4:null!=t.wheelDelta&&(r=t.wheelDelta/4)),0!==r){if(null==k)if(z.length>=4){var a=z;if(k=function(e,t){for(var n=0;n5}if(k)for(var o=0;o5&&(r=5*Kt(r)),h=r/-250,k&&(h/=O,h*=3),h*=e.wheelSensitivity,1===t.deltaMode&&(h*=33);var f=s.zoom()*Math.pow(10,h);"gesturechange"===t.type&&(f=e.gestureStartZoom*t.scale),s.zoom({level:f,renderedPosition:{x:d[0],y:d[1]}}),s.emit({type:"gesturechange"===t.type?"pinchzoom":"scrollzoom",originalEvent:t,position:{x:c[0],y:c[1]}})}}}};e.registerBinding(e.container,"wheel",V,!0),e.registerBinding(t,"scroll",function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout(function(){e.scrollingPage=!1},250)},!0),e.registerBinding(e.container,"gesturestart",function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()},!0),e.registerBinding(e.container,"gesturechange",function(t){e.hasTouchStarted||V(t)},!0),e.registerBinding(e.container,"mouseout",function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})},!1),e.registerBinding(e.container,"mouseover",function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})},!1);var F,X,j,Y,q,W,U,H=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},K=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",F=function(t){if(e.hasTouchStarted=!0,m(t)){f(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,a=e.touchData.now,i=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);a[0]=o[0],a[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);a[2]=o[0],a[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);a[4]=o[0],a[5]=o[1]}var l=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(t.touches[1]){e.touchData.singleTouchMoved=!0,d(e.dragData.touchDragEles);var h=e.findContainerClientCoords();M=h[0],R=h[1],I=h[2],N=h[3],T=t.touches[0].clientX-M,C=t.touches[0].clientY-R,P=t.touches[1].clientX-M,S=t.touches[1].clientY-R,L=0<=T&&T<=I&&0<=P&&P<=I&&0<=C&&C<=N&&0<=S&&S<=N;var p=n.pan(),v=n.zoom();B=H(T,C,P,S),D=K(T,C,P,S),A=[((_=[(T+P)/2,(C+S)/2])[0]-p.x)/v,(_[1]-p.y)/v];if(D<4e4&&!t.touches[2]){var g=e.findNearestElement(a[0],a[1],!0,!0),y=e.findNearestElement(a[2],a[3],!0,!0);return g&&g.isNode()?(g.activate().emit(l("cxttapstart")),e.touchData.start=g):y&&y.isNode()?(y.activate().emit(l("cxttapstart")),e.touchData.start=y):n.emit(l("cxttapstart")),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var b=e.findNearestElements(a[0],a[1],!0,!0),x=b[0];if(null!=x&&(x.activate(),e.touchData.start=x,e.touchData.starts=b,e.nodeIsGrabbable(x))){var w=e.dragData.touchDragEles=n.collection(),E=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),x.selected()?(E=n.$(function(t){return t.selected()&&e.nodeIsGrabbable(t)}),u(E,{addToList:w})):c(x,{addToList:w}),s(x),x.emit(l("grabon")),E?E.forEach(function(e){e.emit(l("grab"))}):x.emit(l("grab"))}r(x,["touchstart","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==x&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout(function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:a[0],y:a[1]})},e.tapholdDuration)}if(t.touches.length>=1){for(var k=e.touchData.startPosition=[null,null,null,null,null,null],z=0;z=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var E=t.touches[0].clientX-M,k=t.touches[0].clientY-R,_=t.touches[1].clientX-M,I=t.touches[1].clientY-R,N=K(E,k,_,I);if(N/D>=2.25||N>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var z=p("cxttapend");e.touchData.start?(e.touchData.start.unactivate().emit(z),e.touchData.start=null):o.emit(z)}}if(n&&e.touchData.cxt){z=p("cxtdrag");e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(z):o.emit(z),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var O=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&O===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit(p("cxtdragout")),e.touchData.cxtOver=O,O&&O.emit(p("cxtdragover")))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit(p("boxstart")),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),te=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var V=0;V0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",j=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",Y=function(t){var a=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var i=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o=e.cy,s=o.zoom(),l=e.touchData.now,u=e.touchData.earlier;if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);l[0]=c[0],l[1]=c[1]}if(t.touches[1]){c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);l[2]=c[0],l[3]=c[1]}if(t.touches[2]){c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);l[4]=c[0],l[5]=c[1]}var h,f=function(e){return{originalEvent:t,type:e,position:{x:l[0],y:l[1]}}};if(a&&a.unactivate(),e.touchData.cxt){if(h=f("cxttapend"),a?a.emit(h):o.emit(h),!e.touchData.cxtDragged){var p=f("cxttap");a?a.emit(p):o.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&o.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var v=o.collection(e.getAllInBox(i[0],i[1],i[2],i[3]));i[0]=void 0,i[1]=void 0,i[2]=void 0,i[3]=void 0,i[4]=0,e.redrawHint("select",!0),o.emit(f("boxend"));v.emit(f("box")).stdFilter(function(e){return e.selectable()&&!e.selected()}).select().emit(f("boxselect")),v.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=a&&a.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var g=e.dragData.touchDragEles;if(null!=a){var y=a._private.grabbed;d(g),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(a.emit(f("freeon")),g.emit(f("free")),e.dragData.didDrag&&(a.emit(f("dragfreeon")),g.emit(f("dragfree")))),r(a,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]}),a.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(l[0],l[1],!0,!0);r(m,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]})}var b=e.touchData.startPosition[0]-l[0],x=b*b,w=e.touchData.startPosition[1]-l[1],E=(x+w*w)*s*s;e.touchData.singleTouchMoved||(a||o.$(":selected").unselect(["tapunselect"]),r(a,["tap","vclick"],t,{x:l[0],y:l[1]}),q=!1,t.timeStamp-U<=o.multiClickDebounceTime()?(W&&clearTimeout(W),q=!0,U=null,r(a,["dbltap","vdblclick"],t,{x:l[0],y:l[1]})):(W=setTimeout(function(){q||r(a,["onetap","voneclick"],t,{x:l[0],y:l[1]})},o.multiClickDebounceTime()),U=t.timeStamp)),null!=a&&!e.dragData.didDrag&&a._private.selectable&&E2){for(var f=[c[0],c[1]],p=Math.pow(f[0]-e,2)+Math.pow(f[1]-t,2),v=1;v0)return v[0]}return null},f=Object.keys(d),p=0;p0?u:pn(a,i,e,t,n,r,o,s)},checkPoint:function(e,t,n,r,a,i,o,s){var l=2*(s="auto"===s?Rn(r,a):s);if(xn(e,t,this.points,i,o,r,a-l,[0,-1],n))return!0;if(xn(e,t,this.points,i,o,r-l,a,[0,-1],n))return!0;var u=r/2+2*n,c=a/2+2*n;return!!bn(e,t,[i-u,o-c,i-u,o,i+u,o,i+u,o-c])||(!!kn(e,t,l,l,i+r/2-s,o+a/2-s,n)||!!kn(e,t,l,l,i-r/2+s,o+a/2-s,n))}}},ad.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",_n(3,0)),this.generateRoundPolygon("round-triangle",_n(3,0)),this.generatePolygon("rectangle",_n(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",_n(5,0)),this.generateRoundPolygon("round-pentagon",_n(5,0)),this.generatePolygon("hexagon",_n(6,0)),this.generateRoundPolygon("round-hexagon",_n(6,0)),this.generatePolygon("heptagon",_n(7,0)),this.generateRoundPolygon("round-heptagon",_n(7,0)),this.generatePolygon("octagon",_n(8,0)),this.generateRoundPolygon("round-octagon",_n(8,0));var r=new Array(20),a=Mn(5,0),i=Mn(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*v)break}else if(a){if(f>=e.deqCost*l||f>=e.deqAvgCost*s)break}else if(p>=e.deqNoDrawCost*ud)break;var g=e.deq(t,d,c);if(!(g.length>0))break;for(var y=0;y0&&(e.onDeqd(t,u),!a&&e.shouldRedraw(t,u,d,c)&&r())},a(t))}}},dd=function(){return i(function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:tt;a(this,e),this.idsByKey=new gt,this.keyForId=new gt,this.cachesByLvl=new gt,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n},[{key:"getIdsFor",value:function(e){null==e&&at("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new mt,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new gt,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach(function(n){return t.deleteCache(e,n)})}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}])}(),hd=7.99,fd={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},pd=dt({getKey:null,doesEleInvalidateKey:tt,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:et,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),vd=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=pd(t);be(n,r),n.lookup=new dd(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},gd=vd.prototype;gd.reasons=fd,gd.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},gd.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},gd.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new Dt(function(e,t){return t.reqs-e.reqs})},gd.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},gd.getElement=function(e,t,n,r,a){var i=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!i.allowEdgeTxrCaching&&e.isEdge()||!i.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(Ht(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var u=Math.pow(2,r),c=t.h*u,d=t.w*u,h=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,h))return null;var f,p=l.get(e,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(f=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||d>1024)return null;var v=i.getTextureQueue(f),g=v[v.length-2],y=function(){return i.recycleTexture(f,d)||i.addTexture(f,d)};g||(g=v[v.length-1]),g||(g=y()),g.width-g.usedWidthr;S--)C=i.getElement(e,t,n,S,fd.downscale);P()}else{var B;if(!x&&!w&&!E)for(var D=r-1;D>=-4;D--){var _=l.get(e,D);if(_){B=_;break}}if(b(B))return i.queueElement(e,r),B;g.context.translate(g.usedWidth,0),g.context.scale(u,u),this.drawElement(g.context,e,t,h,!1),g.context.scale(1/u,1/u),g.context.translate(-g.usedWidth,0)}return p={x:g.usedWidth,texture:g,level:r,scale:u,width:d,height:c,scaledLabelShown:h},g.usedWidth+=Math.ceil(d+8),g.eleCaches.push(p),l.set(e,r,p),i.checkTextureFullness(g),p},gd.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},gd.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?ht(t,e):e.fullnessChecks++},gd.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;ht(n,e),e.retired=!0;for(var a=e.eleCaches,i=0;i=t)return i.retired=!1,i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,ft(i.eleCaches),i.context.setTransform(1,0,0,1,0,0),i.context.clearRect(0,0,i.width,i.height),ht(r,i),n.push(i),i}},gd.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),a=this.getKey(e),i=r[a];if(i)i.level=Math.max(i.level,t),i.eles.merge(e),i.reqs++,n.updateItem(i);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:a};n.push(o),r[a]=o}},gd.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),a=[],i=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=i.hasCache(u,s.level);if(r[l]=null,!c){a.push(s);var d=t.getBoundingBox(u);t.getElement(u,d,e,s.level,fd.dequeue)}}return a},gd.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),a=n[r];null!=a&&(1===a.eles.length?(a.reqs=Je,t.updateItem(a),t.pop(),n[r]=null):a.eles.unmerge(e))},gd.onDequeue=function(e){this.onDequeues.push(e)},gd.offDequeue=function(e){ht(this.onDequeues,e)},gd.setupDequeueing=cd({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},a=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};a(1),a(-1);for(var i=c.length-1;i>=0;i--){var o=c[i];o.invalid&&ht(c,o)}}();var d=function(t){var a=(t=t||{}).after;!function(){if(!o){o=tn();for(var t=0;t32767||s>32767)return null;if(i*s>16e6)return null;var l=r.makeLayer(o,n);if(null!=a){var d=c.indexOf(a)+1;c.splice(d,0,l)}else(void 0===t.insert||t.insert)&&c.unshift(l);return l};if(r.skipping&&!i)return null;for(var h=null,f=e.length/1,p=!i,v=0;v=f||!dn(h.bb,g.boundingBox()))&&!(h=d({insert:!0,after:h})))return null;s||p?r.queueLayer(h,g):r.drawEleInLayer(h,g,n,t),h.eles.push(g),m[n]=h}}return s||(p?null:c)},md.getEleLevelForLayerLevel=function(e,t){return e},md.drawEleInLayer=function(e,t,n,r){var a=this.renderer,i=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(i,!1),a.drawCachedElement(i,t,null,null,n,true),a.setImgSmoothing(i,!0))},md.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,a=0;a0)return!1;if(i.invalid)return!1;r+=i.eles.length}return r===t.length},md.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},md.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=ze(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,function(e,n,r){t.invalidateLayer(e)}))},md.invalidateLayer=function(e){if(this.lastInvalidationTime=ze(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];ht(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var a=0;a3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!i||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=i?t.pstyle("opacity").value:1,c=i?t.pstyle("line-opacity").value:1,d=t.pstyle("curve-style").value,h=t.pstyle("line-style").value,f=t.pstyle("width").pfValue,p=t.pstyle("line-cap").value,v=t.pstyle("line-outline-width").value,g=t.pstyle("line-outline-color").value,y=u*c,m=u*c,b=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;"straight-triangle"===d?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=f,e.lineCap=p,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:m;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var w=t.pstyle("ghost-offset-x").pfValue,E=t.pstyle("ghost-offset-y").pfValue,k=t.pstyle("ghost-opacity").value,T=y*k;e.translate(w,E),b(T),x(T),e.translate(-w,-E)}else!function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;e.lineWidth=f+v,e.lineCap=p,v>0?(o.colorStrokeStyle(e,g[0],g[1],g[2],n),"straight-triangle"===d?o.drawEdgeTrianglePath(t,e,s.allpts):(o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")):e.lineCap="butt"}();a&&o.drawEdgeUnderlay(e,t),b(),x(),a&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},Ld=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var a=this,i=a.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||i?t.lineCap="round":t.lineCap="butt",a.colorStrokeStyle(t,l[0],l[1],l[2],r),a.drawEdgePath(n,t,o.allpts,"solid")}}}};Nd.drawEdgeOverlay=Ld("overlay"),Nd.drawEdgeUnderlay=Ld("underlay"),Nd.drawEdgePath=function(e,t,n,r){var a,i=e._private.rscratch,s=t,l=!1,u=this.usePaths(),c=e.pstyle("line-dash-pattern").pfValue,d=e.pstyle("line-dash-offset").pfValue;if(u){var h=n.join("$");i.pathCacheKey&&i.pathCacheKey===h?(a=t=i.pathCache,l=!0):(a=t=new Path2D,i.pathCacheKey=h,i.pathCache=a)}if(s.setLineDash)switch(r){case"dotted":s.setLineDash([1,1]);break;case"dashed":s.setLineDash(c),s.lineDashOffset=d;break;case"solid":s.setLineDash([])}if(!l&&!i.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var f=2;f+35&&void 0!==arguments[5]?arguments[5]:5,o=Math.min(i,r/2,a/2);e.beginPath(),e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.quadraticCurveTo(t+r,n,t+r,n+o),e.lineTo(t+r,n+a-o),e.quadraticCurveTo(t+r,n+a,t+r-o,n+a),e.lineTo(t+o,n+a),e.quadraticCurveTo(t,n+a,t,n+a-o),e.lineTo(t,n+o),e.quadraticCurveTo(t,n,t+o,n),e.closePath()}Od.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),a=Math.ceil(Ht(n*r));t=Math.pow(2,a)}return!(e.pstyle("font-size").pfValue*t5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(i&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),d=t.pstyle("source-label"),h=t.pstyle("target-label");if(u||(!c||!c.value)&&(!d||!d.value)&&(!h||!h.value))return;e.textAlign="center",e.textBaseline="bottom"}var f,p=!n;n&&(f=n,e.translate(-f.x1,-f.y1)),null==a?(o.drawText(e,t,null,p,i),t.isEdge()&&(o.drawText(e,t,"source",p,i),o.drawText(e,t,"target",p,i))):o.drawText(e,t,a,p,i),n&&e.translate(f.x1,f.y1)},Od.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,a=t.pstyle("font-size").pfValue+"px",i=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+a+" "+i,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Od.getTextAngle=function(e,t){var n,r=e._private.rscratch,a=t?t+"-":"",i=e.pstyle(a+"text-rotation");if("autorotate"===i.strValue){var o=pt(r,"labelAngle",t);n=e.isEdge()?o:0}else n="none"===i.strValue?0:i.pfValue;return n},Od.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=t._private.rscratch,o=a?t.effectiveOpacity():1;if(!a||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=pt(i,"labelX",n),c=pt(i,"labelY",n),d=this.getLabelText(t,n);if(null!=d&&""!==d&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,a);var h,f=n?n+"-":"",p=pt(i,"labelWidth",n),v=pt(i,"labelHeight",n),g=t.pstyle(f+"text-margin-x").pfValue,y=t.pstyle(f+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=g,c+=y,0!==(h=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(h),u=0,c=0),x){case"top":break;case"center":c+=v/2;break;case"bottom":c+=v}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,k=t.pstyle("text-border-width").pfValue,T=t.pstyle("text-background-padding").pfValue,C=t.pstyle("text-background-shape").strValue,P="round-rectangle"===C||"roundrectangle"===C,S="circle"===C;if(w>0||k>0&&E>0){var B=e.fillStyle,D=e.strokeStyle,_=e.lineWidth,A=t.pstyle("text-background-color").value,M=t.pstyle("text-border-color").value,R=t.pstyle("text-border-style").value,I=w>0,N=k>0&&E>0,L=u-T;switch(b){case"left":L-=p;break;case"center":L-=p/2}var z=c-v-T,O=p+2*T,V=v+2*T;if(I&&(e.fillStyle="rgba(".concat(A[0],",").concat(A[1],",").concat(A[2],",").concat(w*o,")")),N&&(e.strokeStyle="rgba(".concat(M[0],",").concat(M[1],",").concat(M[2],",").concat(E*o,")"),e.lineWidth=k,e.setLineDash))switch(R){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=k/4,e.setLineDash([]);break;default:e.setLineDash([])}if(P?(e.beginPath(),Vd(e,L,z,O,V,2)):S?(e.beginPath(),function(e,t,n,r,a){var i=Math.min(r,a)/2,o=t+r/2,s=n+a/2;e.beginPath(),e.arc(o,s,i,0,2*Math.PI),e.closePath()}(e,L,z,O,V)):(e.beginPath(),e.rect(L,z,O,V)),I&&e.fill(),N&&e.stroke(),N&&"double"===R){var F=k/2;e.beginPath(),P?Vd(e,L+F,z+F,O-2*F,V-2*F,2):e.rect(L+F,z+F,O-2*F,V-2*F),e.stroke()}e.fillStyle=B,e.strokeStyle=D,e.lineWidth=_,e.setLineDash&&e.setLineDash([])}var X=2*t.pstyle("text-outline-width").pfValue;if(X>0&&(e.lineWidth=X),"wrap"===t.pstyle("text-wrap").value){var j=pt(i,"labelWrapCachedLines",n),Y=pt(i,"labelLineHeight",n),q=p/2,W=this.getLabelJustification(t);switch("auto"===W||("left"===b?"left"===W?u+=-p:"center"===W&&(u+=-q):"center"===b?"left"===W?u+=-q:"right"===W&&(u+=q):"right"===b&&("center"===W?u+=q:"right"===W&&(u+=p))),x){case"top":case"center":case"bottom":c-=(j.length-1)*Y}for(var U=0;U0&&e.strokeText(j[U],u,c),e.fillText(j[U],u,c),c+=Y}else X>0&&e.strokeText(d,u,c),e.fillText(d,u,c);0!==h&&(e.rotate(-h),e.translate(-s,-l))}}};var Fd={drawNode:function(e,t,n){var r,a,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,d=t.position();if(Q(d.x)&&Q(d.y)&&(!s||t.visible())){var h,f,p=s?t.effectiveOpacity():1,v=l.usePaths(),g=!1,y=t.padding();r=t.width()+2*y,a=t.height()+2*y,n&&(f=n,e.translate(-f.x1,-f.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E0&&void 0!==arguments[0]?arguments[0]:S;l.eleFillStyle(e,t,n)},Y=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:N;l.colorStrokeStyle(e,B[0],B[1],B[2],t)},q=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V;l.colorStrokeStyle(e,z[0],z[1],z[2],t)},W=function(e,t,n,r){var a,i=l.nodePathCache=l.nodePathCache||[],o=He("polygon"===n?n+","+r.join(","):n,""+t,""+e,""+X),s=i[o],u=!1;return null!=s?(a=s,u=!0,c.pathCache=a):(a=new Path2D,i[o]=c.pathCache=a),{path:a,cacheHit:u}},U=t.pstyle("shape").strValue,H=t.pstyle("shape-polygon-points").pfValue;if(v){e.translate(d.x,d.y);var K=W(r,a,U,H);h=K.path,g=K.cacheHit}var G=function(){if(!g){var n=d;v&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(h||e,n.x,n.y,r,a,X,c)}v?e.fill(h):e.fill()},Z=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=u.backgrounding,i=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;l.hasPie(t)&&(l.drawPie(e,t,i),n&&(v||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,X,c)))},J=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;l.hasStripe(t)&&(e.save(),v?e.clip(c.pathCache):(l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,X,c),e.clip()),l.drawStripe(e,t,i),e.restore(),n&&(v||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,X,c)))},ee=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:p),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),v?e.fill(h):e.fill())},te=function(){if(P>0){if(e.lineWidth=P,e.lineCap=A,e.lineJoin=_,e.setLineDash)switch(D){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash(R),e.lineDashOffset=I;break;case"solid":case"double":e.setLineDash([])}if("center"!==M){if(e.save(),e.lineWidth*=2,"inside"===M)v?e.clip(h):e.clip();else{var t=new Path2D;t.rect(-r/2-P,-a/2-P,r+2*P,a+2*P),t.addPath(h),e.clip(t,"evenodd")}v?e.stroke(h):e.stroke(),e.restore()}else v?e.stroke(h):e.stroke();if("double"===D){e.lineWidth=P/3;var n=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",v?e.stroke(h):e.stroke(),e.globalCompositeOperation=n}e.setLineDash&&e.setLineDash([])}},ne=function(){if(L>0){if(e.lineWidth=L,e.lineCap="butt",e.setLineDash)switch(O){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=d;v&&(n={x:0,y:0});var i=l.getNodeShape(t),o=P;"inside"===M&&(o=0),"outside"===M&&(o*=2);var s,u=(r+o+(L+F))/r,c=(a+o+(L+F))/a,h=r*u,f=a*c,p=l.nodeShapes[i].points;if(v)s=W(h,f,i,p).path;if("ellipse"===i)l.drawEllipsePath(s||e,n.x,n.y,h,f);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(i)){var g=0,y=0,m=0;"round-diamond"===i?g=1.4*(o+F+L):"round-heptagon"===i?(g=1.075*(o+F+L),m=-(o/2+F+L)/35):"round-hexagon"===i?g=1.12*(o+F+L):"round-pentagon"===i?(g=1.13*(o+F+L),m=-(o/2+F+L)/15):"round-tag"===i?(g=1.12*(o+F+L),y=.07*(o/2+L+F)):"round-triangle"===i&&(g=(o+F+L)*(Math.PI/2),m=-(o+F/2+L)/Math.PI),0!==g&&(h=r*(u=(r+g)/r),["round-hexagon","round-tag"].includes(i)||(f=a*(c=(a+g)/a)));for(var b=h/2,x=f/2,w=(X="auto"===X?In(h,f):X)+(o+L+F)/2,E=new Array(p.length/2),k=new Array(p.length/2),T=0;T0){if(r=r||n.position(),null==a||null==i){var d=n.padding();a=n.width()+2*d,i=n.height()+2*d}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,a+2*o,i+2*o,c),t.fill()}}}};Fd.drawNodeOverlay=Xd("overlay"),Fd.drawNodeUnderlay=Xd("underlay"),Fd.hasPie=function(e){return(e=e[0])._private.hasPie},Fd.hasStripe=function(e){return(e=e[0])._private.hasStripe},Fd.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var a,i=t.cy().style(),o=t.pstyle("pie-size"),s=t.pstyle("pie-hole"),l=t.pstyle("pie-start-angle").pfValue,u=r.x,c=r.y,d=t.width(),h=t.height(),f=Math.min(d,h)/2,p=0;if(this.usePaths()&&(u=0,c=0),"%"===o.units?f*=o.pfValue:void 0!==o.pfValue&&(f=o.pfValue/2),"%"===s.units?a=f*s.pfValue:void 0!==s.pfValue&&(a=s.pfValue/2),!(a>=f))for(var v=1;v<=i.pieBackgroundN;v++){var g=t.pstyle("pie-"+v+"-background-size").value,y=t.pstyle("pie-"+v+"-background-color").value,m=t.pstyle("pie-"+v+"-background-opacity").value*n,b=g/100;b+p>1&&(b=1-p);var x=1.5*Math.PI+2*Math.PI*p,w=(x+=l)+2*Math.PI*b;0===g||p>=1||p+b>1||(0===a?(e.beginPath(),e.moveTo(u,c),e.arc(u,c,f,x,w),e.closePath()):(e.beginPath(),e.arc(u,c,f,x,w),e.arc(u,c,a,w,x,!0),e.closePath()),this.colorFillStyle(e,y[0],y[1],y[2],m),e.fill(),p+=b)}},Fd.drawStripe=function(e,t,n,r){t=t[0],r=r||t.position();var a=t.cy().style(),i=r.x,o=r.y,s=t.width(),l=t.height(),u=0,c=this.usePaths();e.save();var d=t.pstyle("stripe-direction").value,h=t.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":e.rotate(-Math.PI/2)}var f=s,p=l;"%"===h.units?(f*=h.pfValue,p*=h.pfValue):void 0!==h.pfValue&&(f=h.pfValue,p=h.pfValue),c&&(i=0,o=0),o-=f/2,i-=p/2;for(var v=1;v<=a.stripeBackgroundN;v++){var g=t.pstyle("stripe-"+v+"-background-size").value,y=t.pstyle("stripe-"+v+"-background-color").value,m=t.pstyle("stripe-"+v+"-background-opacity").value*n,b=g/100;b+u>1&&(b=1-u),0===g||u>=1||u+b>1||(e.beginPath(),e.rect(i,o+p*u,f,p*b),e.closePath(),this.colorFillStyle(e,y[0],y[1],y[2],m),e.fill(),u+=b)}e.restore()};var jd,Yd={};function qd(e,t,n){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error(e.getShaderInfoLog(r));return r}function Wd(e,t,n){void 0===n&&(n=t);var r=e.makeOffscreenCanvas(t,n),a=r.context=r.getContext("2d");return r.clear=function(){return a.clearRect(0,0,r.width,r.height)},r.clear(),r}function Ud(e){var t=e.pixelRatio,n=e.cy.zoom(),r=e.cy.pan();return{zoom:n*t,pan:{x:r.x*t,y:r.y*t}}}function Hd(e){return"solid"===e.pstyle("background-fill").value&&("none"===e.pstyle("background-image").strValue&&(0===e.pstyle("border-width").value||(0===e.pstyle("border-opacity").value||"solid"===e.pstyle("border-style").value)))}function Kd(e,t){if(e.length!==t.length)return!1;for(var n=0;n>8&255)/255,n[2]=(e>>16&255)/255,n[3]=(e>>24&255)/255,n}function $d(e){return e[0]+(e[1]<<8)+(e[2]<<16)+(e[3]<<24)}function Qd(e,t){switch(t){case"float":return[1,e.FLOAT,4];case"vec2":return[2,e.FLOAT,4];case"vec3":return[3,e.FLOAT,4];case"vec4":return[4,e.FLOAT,4];case"int":return[1,e.INT,4];case"ivec2":return[2,e.INT,4]}}function Jd(e,t,n){switch(t){case e.FLOAT:return new Float32Array(n);case e.INT:return new Int32Array(n)}}function eh(e,t,n,r,a,i){switch(t){case e.FLOAT:return new Float32Array(n.buffer,i*r,a);case e.INT:return new Int32Array(n.buffer,i*r,a)}}function th(e,t,n,r){var a=l(Qd(e,n),3),i=a[0],o=a[1],s=a[2],u=Jd(e,o,t*i),c=i*s,d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,t*c,e.DYNAMIC_DRAW),e.enableVertexAttribArray(r),o===e.FLOAT?e.vertexAttribPointer(r,i,o,!1,c,0):o===e.INT&&e.vertexAttribIPointer(r,i,o,c,0),e.vertexAttribDivisor(r,1),e.bindBuffer(e.ARRAY_BUFFER,null);for(var h=new Array(t),f=0;ft.minMbLowQualFrames&&(t.motionBlurPxRatio=t.mbPxRBlurry)),t.clearingMotionBlur&&(t.motionBlurPxRatio=1),t.textureDrawLastFrame&&!d&&(c[t.NODE]=!0,c[t.SELECT_BOX]=!0);var m=n.style(),b=n.zoom(),x=void 0!==o?o:b,w=n.pan(),E={x:w.x,y:w.y},k={zoom:b,pan:{x:w.x,y:w.y}},T=t.prevViewport;void 0===T||k.zoom!==T.zoom||k.pan.x!==T.pan.x||k.pan.y!==T.pan.y||v&&!p||(t.motionBlurPxRatio=1),s&&(E=s),x*=l,E.x*=l,E.y*=l;var C=t.getCachedZSortedEles();function P(e,n,r,a,i){var o=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",t.colorFillStyle(e,255,255,255,t.motionBlurTransparency),e.fillRect(n,r,a,i),e.globalCompositeOperation=o}function S(e,n){var i,l,c,d;t.clearingMotionBlur||e!==u.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]?(i=E,l=x,c=t.canvasWidth,d=t.canvasHeight):(i={x:w.x*f,y:w.y*f},l=b*f,c=t.canvasWidth*f,d=t.canvasHeight*f),e.setTransform(1,0,0,1,0,0),"motionBlur"===n?P(e,0,0,c,d):r||void 0!==n&&!n||e.clearRect(0,0,c,d),a||(e.translate(i.x,i.y),e.scale(l,l)),s&&e.translate(s.x,s.y),o&&e.scale(o,o)}if(d||(t.textureDrawLastFrame=!1),d){if(t.textureDrawLastFrame=!0,!t.textureCache){t.textureCache={},t.textureCache.bb=n.mutableElements().boundingBox(),t.textureCache.texture=t.data.bufferCanvases[t.TEXTURE_BUFFER];var B=t.data.bufferContexts[t.TEXTURE_BUFFER];B.setTransform(1,0,0,1,0,0),B.clearRect(0,0,t.canvasWidth*t.textureMult,t.canvasHeight*t.textureMult),t.render({forcedContext:B,drawOnlyNodeLayer:!0,forcedPxRatio:l*t.textureMult}),(k=t.textureCache.viewport={zoom:n.zoom(),pan:n.pan(),width:t.canvasWidth,height:t.canvasHeight}).mpan={x:(0-k.pan.x)/k.zoom,y:(0-k.pan.y)/k.zoom}}c[t.DRAG]=!1,c[t.NODE]=!1;var D=u.contexts[t.NODE],_=t.textureCache.texture;k=t.textureCache.viewport;D.setTransform(1,0,0,1,0,0),h?P(D,0,0,k.width,k.height):D.clearRect(0,0,k.width,k.height);var A=m.core("outside-texture-bg-color").value,M=m.core("outside-texture-bg-opacity").value;t.colorFillStyle(D,A[0],A[1],A[2],M),D.fillRect(0,0,k.width,k.height);b=n.zoom();S(D,!1),D.clearRect(k.mpan.x,k.mpan.y,k.width/k.zoom/l,k.height/k.zoom/l),D.drawImage(_,k.mpan.x,k.mpan.y,k.width/k.zoom/l,k.height/k.zoom/l)}else t.textureOnViewport&&!r&&(t.textureCache=null);var R=n.extent(),I=t.pinching||t.hoverData.dragging||t.swipePanning||t.data.wheelZooming||t.hoverData.draggingEles||t.cy.animated(),N=t.hideEdgesOnViewport&&I,L=[];if(L[t.NODE]=!c[t.NODE]&&h&&!t.clearedForMotionBlur[t.NODE]||t.clearingMotionBlur,L[t.NODE]&&(t.clearedForMotionBlur[t.NODE]=!0),L[t.DRAG]=!c[t.DRAG]&&h&&!t.clearedForMotionBlur[t.DRAG]||t.clearingMotionBlur,L[t.DRAG]&&(t.clearedForMotionBlur[t.DRAG]=!0),c[t.NODE]||a||i||L[t.NODE]){var z=h&&!L[t.NODE]&&1!==f;S(D=r||(z?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]:u.contexts[t.NODE]),h&&!z?"motionBlur":void 0),N?t.drawCachedNodes(D,C.nondrag,l,R):t.drawLayeredElements(D,C.nondrag,l,R),t.debug&&t.drawDebugPoints(D,C.nondrag),a||h||(c[t.NODE]=!1)}if(!i&&(c[t.DRAG]||a||L[t.DRAG])){z=h&&!L[t.DRAG]&&1!==f;S(D=r||(z?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]:u.contexts[t.DRAG]),h&&!z?"motionBlur":void 0),N?t.drawCachedNodes(D,C.drag,l,R):t.drawCachedElements(D,C.drag,l,R),t.debug&&t.drawDebugPoints(D,C.drag),a||h||(c[t.DRAG]=!1)}if(this.drawSelectionRectangle(e,S),h&&1!==f){var O=u.contexts[t.NODE],V=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE],F=u.contexts[t.DRAG],X=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG],j=function(e,n,r){e.setTransform(1,0,0,1,0,0),r||!y?e.clearRect(0,0,t.canvasWidth,t.canvasHeight):P(e,0,0,t.canvasWidth,t.canvasHeight);var a=f;e.drawImage(n,0,0,t.canvasWidth*a,t.canvasHeight*a,0,0,t.canvasWidth,t.canvasHeight)};(c[t.NODE]||L[t.NODE])&&(j(O,V,L[t.NODE]),c[t.NODE]=!1),(c[t.DRAG]||L[t.DRAG])&&(j(F,X,L[t.DRAG]),c[t.DRAG]=!1)}t.prevViewport=k,t.clearingMotionBlur&&(t.clearingMotionBlur=!1,t.motionBlurCleared=!0,t.motionBlur=!0),h&&(t.motionBlurTimeout=setTimeout(function(){t.motionBlurTimeout=null,t.clearedForMotionBlur[t.NODE]=!1,t.clearedForMotionBlur[t.DRAG]=!1,t.motionBlur=!1,t.clearingMotionBlur=!d,t.mbFrames=0,c[t.NODE]=!0,c[t.DRAG]=!0,t.redraw()},100)),r||n.emit("render")},Yd.drawSelectionRectangle=function(e,t){var n=this,r=n.cy,a=n.data,i=r.style(),o=e.drawOnlyNodeLayer,s=e.drawAllLayers,l=a.canvasNeedsRedraw,u=e.forcedContext;if(n.showFps||!o&&l[n.SELECT_BOX]&&!s){var c=u||a.contexts[n.SELECT_BOX];if(t(c),1==n.selection[4]&&(n.hoverData.selecting||n.touchData.selecting)){var d=n.cy.zoom(),h=i.core("selection-box-border-width").value/d;c.lineWidth=h,c.fillStyle="rgba("+i.core("selection-box-color").value[0]+","+i.core("selection-box-color").value[1]+","+i.core("selection-box-color").value[2]+","+i.core("selection-box-opacity").value+")",c.fillRect(n.selection[0],n.selection[1],n.selection[2]-n.selection[0],n.selection[3]-n.selection[1]),h>0&&(c.strokeStyle="rgba("+i.core("selection-box-border-color").value[0]+","+i.core("selection-box-border-color").value[1]+","+i.core("selection-box-border-color").value[2]+","+i.core("selection-box-opacity").value+")",c.strokeRect(n.selection[0],n.selection[1],n.selection[2]-n.selection[0],n.selection[3]-n.selection[1]))}if(a.bgActivePosistion&&!n.hoverData.selecting){d=n.cy.zoom();var f=a.bgActivePosistion;c.fillStyle="rgba("+i.core("active-bg-color").value[0]+","+i.core("active-bg-color").value[1]+","+i.core("active-bg-color").value[2]+","+i.core("active-bg-opacity").value+")",c.beginPath(),c.arc(f.x,f.y,i.core("active-bg-size").pfValue/d,0,2*Math.PI),c.fill()}var p=n.lastRedrawTime;if(n.showFps&&p){p=Math.round(p);var v=Math.round(1e3/p),g="1 frame = "+p+" ms = "+v+" fps";if(c.setTransform(1,0,0,1,0,0),c.fillStyle="rgba(255, 0, 0, 0.75)",c.strokeStyle="rgba(255, 0, 0, 0.75)",c.font="30px Arial",!jd){var y=c.measureText(g);jd=y.actualBoundingBoxAscent}c.fillText(g,0,jd);c.strokeRect(0,jd+10,250,20),c.fillRect(0,jd+10,250*Math.min(v/60,1),20)}s||(l[n.SELECT_BOX]=!1)}};var nh="undefined"!=typeof Float32Array?Float32Array:Array;function rh(){var e=new nh(9);return nh!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function ah(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function ih(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],h=n[0],f=n[1];return e[0]=r,e[1]=a,e[2]=i,e[3]=o,e[4]=s,e[5]=l,e[6]=h*r+f*o+u,e[7]=h*a+f*s+c,e[8]=h*i+f*l+d,e}function oh(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],h=Math.sin(n),f=Math.cos(n);return e[0]=f*r+h*o,e[1]=f*a+h*s,e[2]=f*i+h*l,e[3]=f*o-h*r,e[4]=f*s-h*a,e[5]=f*l-h*i,e[6]=u,e[7]=c,e[8]=d,e}function sh(e,t,n){var r=n[0],a=n[1];return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=a*t[3],e[4]=a*t[4],e[5]=a*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var lh=function(){return i(function e(t,n,r,i){a(this,e),this.debugID=Math.floor(1e4*Math.random()),this.r=t,this.texSize=n,this.texRows=r,this.texHeight=Math.floor(n/r),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=i(t,n,n),this.scratch=i(t,n,this.texHeight,"scratch")},[{key:"lock",value:function(){this.locked=!0}},{key:"getKeys",value:function(){return new Set(this.keyToLocation.keys())}},{key:"getScale",value:function(e){var t=e.w,n=e.h,r=this.texHeight,a=this.texSize,i=r/n,o=t*i,s=n*i;return o>a&&(o=t*(i=a/t),s=n*i),{scale:i,texW:o,texH:s}}},{key:"draw",value:function(e,t,n){var r=this;if(this.locked)throw new Error("can't draw, atlas is locked");var a=this.texSize,i=this.texRows,o=this.texHeight,s=this.getScale(t),l=s.scale,u=s.texW,c=s.texH,d=function(e,r){if(n&&r){var a=r.context,i=e.x,s=e.row,u=i,c=o*s;a.save(),a.translate(u,c),a.scale(l,l),n(a,t),a.restore()}},h=[null,null],f=function(){d(r.freePointer,r.canvas),h[0]={x:r.freePointer.x,y:r.freePointer.row*o,w:u,h:c},h[1]={x:r.freePointer.x+u,y:r.freePointer.row*o,w:0,h:c},r.freePointer.x+=u,r.freePointer.x==a&&(r.freePointer.x=0,r.freePointer.row++)},p=function(){r.freePointer.x=0,r.freePointer.row++};if(this.freePointer.x+u<=a)f();else{if(this.freePointer.row>=i-1)return!1;this.freePointer.x===a?(p(),f()):this.enableWrapping?function(){var e=r.scratch,t=r.canvas;e.clear(),d({x:0,row:0},e);var n=a-r.freePointer.x,i=u-n,s=o,l=r.freePointer.x,f=r.freePointer.row*o,p=n;t.context.drawImage(e,0,0,p,s,l,f,p,s),h[0]={x:l,y:f,w:p,h:c};var v=n,g=(r.freePointer.row+1)*o,y=i;t&&t.context.drawImage(e,v,0,y,s,0,g,y,s),h[1]={x:0,y:g,w:y,h:c},r.freePointer.x=i,r.freePointer.row++}():(p(),f())}return this.keyToLocation.set(e,h),this.needsBuffer=!0,h}},{key:"getOffsets",value:function(e){return this.keyToLocation.get(e)}},{key:"isEmpty",value:function(){return 0===this.freePointer.x&&0===this.freePointer.row}},{key:"canFit",value:function(e){if(this.locked)return!1;var t=this.texSize,n=this.texRows,r=this.getScale(e).texW;return!(this.freePointer.x+r>t)||this.freePointer.row1&&void 0!==arguments[1]?arguments[1]:{},a=r.forceRedraw,i=void 0!==a&&a,s=r.filterEle,l=void 0===s?function(){return!0}:s,u=r.filterType,c=void 0===u?function(){return!0}:u,d=!1,h=!1,f=o(e);try{for(f.s();!(t=f.n()).done;){var p=t.value;if(l(p)){var v,g=o(this.renderTypes.values());try{var y=function(){var e=v.value,t=e.type;if(c(t)){var r=n.collections.get(e.collection),a=e.getKey(p),o=Array.isArray(a)?a:[a];if(i)o.forEach(function(e){return r.markKeyForGC(e)}),h=!0;else{var s=e.getID?e.getID(p):p.id(),l=n._key(t,s),u=n.typeAndIdToKey.get(l);void 0===u||Kd(o,u)||(d=!0,n.typeAndIdToKey.delete(l),u.forEach(function(e){return r.markKeyForGC(e)}))}}};for(g.s();!(v=g.n()).done;)y()}catch(m){g.e(m)}finally{g.f()}}}}catch(m){f.e(m)}finally{f.f()}return h&&(this.gc(),d=!1),d}},{key:"gc",value:function(){var e,t=o(this.collections.values());try{for(t.s();!(e=t.n()).done;){e.value.gc()}}catch(n){t.e(n)}finally{t.f()}}},{key:"getOrCreateAtlas",value:function(e,t,n,r){var a=this.renderTypes.get(t),i=this.collections.get(a.collection),o=!1,s=i.draw(r,n,function(t){a.drawClipped?(t.save(),t.beginPath(),t.rect(0,0,n.w,n.h),t.clip(),a.drawElement(t,e,n,!0,!0),t.restore()):a.drawElement(t,e,n,!0,!0),o=!0});if(o){var l=a.getID?a.getID(e):e.id(),u=this._key(t,l);this.typeAndIdToKey.has(u)?this.typeAndIdToKey.get(u).push(r):this.typeAndIdToKey.set(u,[r])}return s}},{key:"getAtlasInfo",value:function(e,t){var n=this,r=this.renderTypes.get(t),a=r.getKey(e);return(Array.isArray(a)?a:[a]).map(function(a){var i=r.getBoundingBox(e,a),o=n.getOrCreateAtlas(e,t,i,a),s=l(o.getOffsets(a),2),u=s[0];return{atlas:o,tex:u,tex1:u,tex2:s[1],bb:i}})}},{key:"getDebugInfo",value:function(){var e,t=[],n=o(this.collections);try{for(n.s();!(e=n.n()).done;){var r=l(e.value,2),a=r[0],i=r[1].getCounts(),s=i.keyCount,u=i.atlasCount;t.push({type:a,keyCount:s,atlasCount:u})}}catch(c){n.e(c)}finally{n.f()}return t}}])}(),dh=function(){return i(function e(t){a(this,e),this.globalOptions=t,this.atlasSize=t.webglTexSize,this.maxAtlasesPerBatch=t.webglTexPerBatch,this.batchAtlases=[]},[{key:"getMaxAtlasesPerBatch",value:function(){return this.maxAtlasesPerBatch}},{key:"getAtlasSize",value:function(){return this.atlasSize}},{key:"getIndexArray",value:function(){return Array.from({length:this.maxAtlasesPerBatch},function(e,t){return t})}},{key:"startBatch",value:function(){this.batchAtlases=[]}},{key:"getAtlasCount",value:function(){return this.batchAtlases.length}},{key:"getAtlases",value:function(){return this.batchAtlases}},{key:"canAddToCurrentBatch",value:function(e){return this.batchAtlases.length!==this.maxAtlasesPerBatch||this.batchAtlases.includes(e)}},{key:"getAtlasIndexForBatch",value:function(e){var t=this.batchAtlases.indexOf(e);if(t<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(e),t=this.batchAtlases.length-1}return t}}])}(),hh={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},fh=1,ph=2,vh=function(){return i(function e(t,n,r){a(this,e),this.r=t,this.gl=n,this.maxInstances=r.webglBatchSize,this.atlasSize=r.webglTexSize,this.bgColor=r.bgColor,this.debug=r.webglDebug,this.batchDebugInfo=[],r.enableWrapping=!0,r.createTextureCanvas=Wd,this.atlasManager=new ch(t,r),this.batchManager=new dh(r),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(hh.SCREEN),this.pickingProgram=this._createShaderProgram(hh.PICKING),this.vao=this._createVAO()},[{key:"addAtlasCollection",value:function(e,t){this.atlasManager.addAtlasCollection(e,t)}},{key:"addTextureAtlasRenderType",value:function(e,t){this.atlasManager.addRenderType(e,t)}},{key:"addSimpleShapeRenderType",value:function(e,t){this.simpleShapeOptions.set(e,t)}},{key:"invalidate",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).type,n=this.atlasManager;return t?n.invalidate(e,{filterType:function(e){return e===t},forceRedraw:!0}):n.invalidate(e)}},{key:"gc",value:function(){this.atlasManager.gc()}},{key:"_createShaderProgram",value:function(e){var t=this.gl,n="#version 300 es\n precision highp float;\n\n uniform mat3 uPanZoomMatrix;\n uniform int uAtlasSize;\n \n // instanced\n in vec2 aPosition; // a vertex from the unit square\n \n in mat3 aTransform; // used to transform verticies, eg into a bounding box\n in int aVertType; // the type of thing we are rendering\n\n // the z-index that is output when using picking mode\n in vec4 aIndex;\n \n // For textures\n in int aAtlasId; // which shader unit/atlas to use\n in vec4 aTex; // x/y/w/h of texture in atlas\n\n // for edges\n in vec4 aPointAPointB;\n in vec4 aPointCPointD;\n in vec2 aLineWidth; // also used for node border width\n\n // simple shapes\n in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left]\n in vec4 aColor; // also used for edges\n in vec4 aBorderColor; // aLineWidth is used for border width\n\n // output values passed to the fragment shader\n out vec2 vTexCoord;\n out vec4 vColor;\n out vec2 vPosition;\n // flat values are not interpolated\n flat out int vAtlasId; \n flat out int vVertType;\n flat out vec2 vTopRight;\n flat out vec2 vBotLeft;\n flat out vec4 vCornerRadius;\n flat out vec4 vBorderColor;\n flat out vec2 vBorderWidth;\n flat out vec4 vIndex;\n \n void main(void) {\n int vid = gl_VertexID;\n vec2 position = aPosition; // TODO make this a vec3, simplifies some code below\n\n if(aVertType == ".concat(0,") {\n float texX = aTex.x; // texture coordinates\n float texY = aTex.y;\n float texW = aTex.z;\n float texH = aTex.w;\n\n if(vid == 1 || vid == 2 || vid == 4) {\n texX += texW;\n }\n if(vid == 2 || vid == 4 || vid == 5) {\n texY += texH;\n }\n\n float d = float(uAtlasSize);\n vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(4," || aVertType == ").concat(7," \n || aVertType == ").concat(5," || aVertType == ").concat(6,") { // simple shapes\n\n // the bounding box is needed by the fragment shader\n vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat\n vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat\n vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated\n\n // calculations are done in the fragment shader, just pass these along\n vColor = aColor;\n vCornerRadius = aCornerRadius;\n vBorderColor = aBorderColor;\n vBorderWidth = aLineWidth;\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(1,") {\n vec2 source = aPointAPointB.xy;\n vec2 target = aPointAPointB.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n // stretch the unit square into a long skinny rectangle\n vec2 xBasis = target - source;\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y;\n\n gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\n vColor = aColor;\n } \n else if(aVertType == ").concat(2,") {\n vec2 pointA = aPointAPointB.xy;\n vec2 pointB = aPointAPointB.zw;\n vec2 pointC = aPointCPointD.xy;\n vec2 pointD = aPointCPointD.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n vec2 p0, p1, p2, pos;\n if(position.x == 0.0) { // The left side of the unit square\n p0 = pointA;\n p1 = pointB;\n p2 = pointC;\n pos = position;\n } else { // The right side of the unit square, use same approach but flip the geometry upside down\n p0 = pointD;\n p1 = pointC;\n p2 = pointB;\n pos = vec2(0.0, -position.y);\n }\n\n vec2 p01 = p1 - p0;\n vec2 p12 = p2 - p1;\n vec2 p21 = p1 - p2;\n\n // Find the normal vector.\n vec2 tangent = normalize(normalize(p12) + normalize(p01));\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n // Find the vector perpendicular to p0 -> p1.\n vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\n\n // Determine the bend direction.\n float sigma = sign(dot(p01 + p21, normal));\n float width = aLineWidth[0];\n\n if(sign(pos.y) == -sigma) {\n // This is an intersecting vertex. Adjust the position so that there's no overlap.\n vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n } else {\n // This is a non-intersecting vertex. Treat it like a mitre join.\n vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n }\n\n vColor = aColor;\n } \n else if(aVertType == ").concat(3," && vid < 3) {\n // massage the first triangle into an edge arrow\n if(vid == 0)\n position = vec2(-0.15, -0.3);\n if(vid == 1)\n position = vec2( 0.0, 0.0);\n if(vid == 2)\n position = vec2( 0.15, -0.3);\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n vColor = aColor;\n }\n else {\n gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\n }\n\n vAtlasId = aAtlasId;\n vVertType = aVertType;\n vIndex = aIndex;\n }\n "),r=this.batchManager.getIndexArray(),a="#version 300 es\n precision highp float;\n\n // declare texture unit for each texture atlas in the batch\n ".concat(r.map(function(e){return"uniform sampler2D uTexture".concat(e,";")}).join("\n\t"),"\n\n uniform vec4 uBGColor;\n uniform float uZoom;\n\n in vec2 vTexCoord;\n in vec4 vColor;\n in vec2 vPosition; // model coordinates\n\n flat in int vAtlasId;\n flat in vec4 vIndex;\n flat in int vVertType;\n flat in vec2 vTopRight;\n flat in vec2 vBotLeft;\n flat in vec4 vCornerRadius;\n flat in vec4 vBorderColor;\n flat in vec2 vBorderWidth;\n\n out vec4 outColor;\n\n ").concat("\n float circleSD(vec2 p, float r) {\n return distance(vec2(0), p) - r; // signed distance\n }\n","\n ").concat("\n float rectangleSD(vec2 p, vec2 b) {\n vec2 d = abs(p)-b;\n return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0);\n }\n","\n ").concat("\n float roundRectangleSD(vec2 p, vec2 b, vec4 cr) {\n cr.xy = (p.x > 0.0) ? cr.xy : cr.zw;\n cr.x = (p.y > 0.0) ? cr.x : cr.y;\n vec2 q = abs(p) - b + cr.x;\n return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x;\n }\n","\n ").concat("\n float ellipseSD(vec2 p, vec2 ab) {\n p = abs( p ); // symmetry\n\n // find root with Newton solver\n vec2 q = ab*(p-ab);\n float w = (q.x1.0) ? d : -d;\n }\n","\n\n vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha\n return vec4( \n top.rgb + (bot.rgb * (1.0 - top.a)),\n top.a + (bot.a * (1.0 - top.a)) \n );\n }\n\n vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance\n // scale to the zoom level so that borders don't look blurry when zoomed in\n // note 1.5 is an aribitrary value chosen because it looks good\n return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); \n }\n\n void main(void) {\n if(vVertType == ").concat(0,") {\n // look up the texel from the texture unit\n ").concat(r.map(function(e){return"if(vAtlasId == ".concat(e,") outColor = texture(uTexture").concat(e,", vTexCoord);")}).join("\n\telse "),"\n } \n else if(vVertType == ").concat(3,") {\n // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';\n outColor = blend(vColor, uBGColor);\n outColor.a = 1.0; // make opaque, masks out line under arrow\n }\n else if(vVertType == ").concat(4," && vBorderWidth == vec2(0.0)) { // simple rectangle with no border\n outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done\n }\n else if(vVertType == ").concat(4," || vVertType == ").concat(7," \n || vVertType == ").concat(5," || vVertType == ").concat(6,") { // use SDF\n\n float outerBorder = vBorderWidth[0];\n float innerBorder = vBorderWidth[1];\n float borderPadding = outerBorder * 2.0;\n float w = vTopRight.x - vBotLeft.x - borderPadding;\n float h = vTopRight.y - vBotLeft.y - borderPadding;\n vec2 b = vec2(w/2.0, h/2.0); // half width, half height\n vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center\n\n float d; // signed distance\n if(vVertType == ").concat(4,") {\n d = rectangleSD(p, b);\n } else if(vVertType == ").concat(7," && w == h) {\n d = circleSD(p, b.x); // faster than ellipse\n } else if(vVertType == ").concat(7,") {\n d = ellipseSD(p, b);\n } else {\n d = roundRectangleSD(p, b, vCornerRadius.wzyx);\n }\n\n // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling\n // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box\n if(d > 0.0) {\n if(d > outerBorder) {\n discard;\n } else {\n outColor = distInterp(vBorderColor, vec4(0), d - outerBorder);\n }\n } else {\n if(d > innerBorder) {\n vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;\n vec4 innerBorderColor = blend(vBorderColor, vColor);\n outColor = distInterp(innerBorderColor, outerColor, d);\n } \n else {\n vec4 outerColor;\n if(innerBorder == 0.0 && outerBorder == 0.0) {\n outerColor = vec4(0);\n } else if(innerBorder == 0.0) {\n outerColor = vBorderColor;\n } else {\n outerColor = blend(vBorderColor, vColor);\n }\n outColor = distInterp(vColor, outerColor, d - innerBorder);\n }\n }\n }\n else {\n outColor = vColor;\n }\n\n ").concat(e.picking?"if(outColor.a == 0.0) discard;\n else outColor = vIndex;":"","\n }\n "),i=function(e,t,n){var r=qd(e,e.VERTEX_SHADER,t),a=qd(e,e.FRAGMENT_SHADER,n),i=e.createProgram();if(e.attachShader(i,r),e.attachShader(i,a),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS))throw new Error("Could not initialize shaders");return i}(t,n,a);i.aPosition=t.getAttribLocation(i,"aPosition"),i.aIndex=t.getAttribLocation(i,"aIndex"),i.aVertType=t.getAttribLocation(i,"aVertType"),i.aTransform=t.getAttribLocation(i,"aTransform"),i.aAtlasId=t.getAttribLocation(i,"aAtlasId"),i.aTex=t.getAttribLocation(i,"aTex"),i.aPointAPointB=t.getAttribLocation(i,"aPointAPointB"),i.aPointCPointD=t.getAttribLocation(i,"aPointCPointD"),i.aLineWidth=t.getAttribLocation(i,"aLineWidth"),i.aColor=t.getAttribLocation(i,"aColor"),i.aCornerRadius=t.getAttribLocation(i,"aCornerRadius"),i.aBorderColor=t.getAttribLocation(i,"aBorderColor"),i.uPanZoomMatrix=t.getUniformLocation(i,"uPanZoomMatrix"),i.uAtlasSize=t.getUniformLocation(i,"uAtlasSize"),i.uBGColor=t.getUniformLocation(i,"uBGColor"),i.uZoom=t.getUniformLocation(i,"uZoom"),i.uTextures=[];for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:hh.SCREEN;this.panZoomMatrix=e,this.renderTarget=t,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()}},{key:"startBatch",value:function(){this.instanceCount=0,this.batchManager.startBatch()}},{key:"endFrame",value:function(){this.endBatch()}},{key:"_isVisible",value:function(e,t){return!!e.visible()&&(!t||!t.isVisible||t.isVisible(e))}},{key:"drawTexture",value:function(e,t,n){var r=this.atlasManager,a=this.batchManager,i=r.getRenderTypeOpts(n);if(this._isVisible(e,i)&&(!e.isEdge()||this._isValidEdge(e))){if(this.renderTarget.picking&&i.getTexPickingMode){var s=i.getTexPickingMode(e);if(s===fh)return;if(s==ph)return void this.drawPickingRectangle(e,t,n)}var u,c=o(r.getAtlasInfo(e,n));try{for(c.s();!(u=c.n()).done;){var d=u.value,h=d.atlas,f=d.tex1,p=d.tex2;a.canAddToCurrentBatch(h)||this.endBatch();for(var v=a.getAtlasIndexForBatch(h),g=0,y=[[f,!0],[p,!1]];g=this.maxInstances&&this.endBatch()}}}}catch(T){c.e(T)}finally{c.f()}}}},{key:"setTransformMatrix",value:function(e,t,n,r){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=0;if(n.shapeProps&&n.shapeProps.padding&&(i=e.pstyle(n.shapeProps.padding).pfValue),r){var o=r.bb,s=r.tex1,l=r.tex2,u=s.w/(s.w+l.w);a||(u=1-u);var c=this._getAdjustedBB(o,i,a,u);this._applyTransformMatrix(t,c,n,e)}else{var d=n.getBoundingBox(e),h=this._getAdjustedBB(d,i,!0,1);this._applyTransformMatrix(t,h,n,e)}}},{key:"_applyTransformMatrix",value:function(e,t,n,r){var a,i;ah(e);var o=n.getRotation?n.getRotation(r):0;if(0!==o){var s=n.getRotationPoint(r);ih(e,e,[s.x,s.y]),oh(e,e,o);var l=n.getRotationOffset(r);a=l.x+(t.xOffset||0),i=l.y+(t.yOffset||0)}else a=t.x1,i=t.y1;ih(e,e,[a,i]),sh(e,e,[t.w,t.h])}},{key:"_getAdjustedBB",value:function(e,t,n,r){var a=e.x1,i=e.y1,o=e.w,s=e.h;t&&(a-=t,i-=t,o+=2*t,s+=2*t);var l=0,u=o*r;return n&&r<1?o=u:!n&&r<1&&(a+=l=o-u,o=u),{x1:a,y1:i,w:o,h:s,xOffset:l,yOffset:e.yOffset}}},{key:"drawPickingRectangle",value:function(e,t,n){var r=this.atlasManager.getRenderTypeOpts(n),a=this.instanceCount;this.vertTypeBuffer.getView(a)[0]=4,Zd(t,this.indexBuffer.getView(a)),Gd([0,0,0],1,this.colorBuffer.getView(a));var i=this.transformBuffer.getMatrixView(a);this.setTransformMatrix(e,i,r),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},{key:"drawNode",value:function(e,t,n){var r=this.simpleShapeOptions.get(n);if(this._isVisible(e,r)){var a=r.shapeProps,i=this._getVertTypeForShape(e,a.shape);if(void 0===i||r.isSimple&&!r.isSimple(e))this.drawTexture(e,t,n);else{var o=this.instanceCount;if(this.vertTypeBuffer.getView(o)[0]=i,5===i||6===i){var s=r.getBoundingBox(e),l=this._getCornerRadius(e,a.radius,s),u=this.cornerRadiusBuffer.getView(o);u[0]=l,u[1]=l,u[2]=l,u[3]=l,6===i&&(u[0]=0,u[2]=0)}Zd(t,this.indexBuffer.getView(o)),Gd(e.pstyle(a.color).value,e.pstyle(a.opacity).value,this.colorBuffer.getView(o));var c=this.lineWidthBuffer.getView(o);if(c[0]=0,c[1]=0,a.border){var d=e.pstyle("border-width").value;if(d>0){Gd(e.pstyle("border-color").value,e.pstyle("border-opacity").value,this.borderColorBuffer.getView(o));var h=e.pstyle("border-position").value;if("inside"===h)c[0]=0,c[1]=-d;else if("outside"===h)c[0]=d,c[1]=0;else{var f=d/2;c[0]=f,c[1]=-f}}}var p=this.transformBuffer.getMatrixView(o);this.setTransformMatrix(e,p,r),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},{key:"_getVertTypeForShape",value:function(e,t){switch(e.pstyle(t).value){case"rectangle":return 4;case"ellipse":return 7;case"roundrectangle":case"round-rectangle":return 5;case"bottom-round-rectangle":return 6;default:return}}},{key:"_getCornerRadius",value:function(e,t,n){var r=n.w,a=n.h;if("auto"===e.pstyle(t).value)return Rn(r,a);var i=e.pstyle(t).pfValue,o=r/2,s=a/2;return Math.min(i,s,o)}},{key:"drawEdgeArrow",value:function(e,t,n){if(e.visible()){var r,a,i,o=e._private.rscratch;if("source"===n?(r=o.arrowStartX,a=o.arrowStartY,i=o.srcArrowAngle):(r=o.arrowEndX,a=o.arrowEndY,i=o.tgtArrowAngle),!(isNaN(r)||null==r||isNaN(a)||null==a||isNaN(i)||null==i))if("none"!==e.pstyle(n+"-arrow-shape").value){var s=e.pstyle(n+"-arrow-color").value,l=e.pstyle("opacity").value*e.pstyle("line-opacity").value,u=e.pstyle("width").pfValue,c=e.pstyle("arrow-scale").value,d=this.r.getArrowWidth(u,c),h=this.instanceCount,f=this.transformBuffer.getMatrixView(h);ah(f),ih(f,f,[r,a]),sh(f,f,[d,d]),oh(f,f,i),this.vertTypeBuffer.getView(h)[0]=3,Zd(t,this.indexBuffer.getView(h)),Gd(s,l,this.colorBuffer.getView(h)),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},{key:"drawEdgeLine",value:function(e,t){if(e.visible()){var n=this._getEdgePoints(e);if(n){var r=e.pstyle("opacity").value,a=e.pstyle("line-opacity").value,i=e.pstyle("width").pfValue,o=e.pstyle("line-color").value,s=r*a;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),4==n.length){var l=this.instanceCount;this.vertTypeBuffer.getView(l)[0]=1,Zd(t,this.indexBuffer.getView(l)),Gd(o,s,this.colorBuffer.getView(l)),this.lineWidthBuffer.getView(l)[0]=i;var u=this.pointAPointBBuffer.getView(l);u[0]=n[0],u[1]=n[1],u[2]=n[2],u[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var c=0;c=this.maxInstances&&this.endBatch()}}}}},{key:"_isValidEdge",value:function(e){var t=e._private.rscratch;return!t.badLine&&null!=t.allpts&&!isNaN(t.allpts[0])}},{key:"_getEdgePoints",value:function(e){var t=e._private.rscratch;if(this._isValidEdge(e)){var n=t.allpts;if(4==n.length)return n;var r=this._getNumSegments(e);return this._getCurveSegmentPoints(n,r)}}},{key:"_getNumSegments",value:function(e){return Math.min(Math.max(15,5),this.maxInstances)}},{key:"_getCurveSegmentPoints",value:function(e,t){if(4==e.length)return e;for(var n=Array(2*(t+1)),r=0;r<=t;r++)if(0==r)n[0]=e[0],n[1]=e[1];else if(r==t)n[2*r]=e[e.length-2],n[2*r+1]=e[e.length-1];else{var a=r/t;this._setCurvePoint(e,a,n,2*r)}return n}},{key:"_setCurvePoint",value:function(e,t,n,r){if(!(e.length<=2)){for(var a=Array(e.length-2),i=0;i0}},u=function(e){return"yes"===e.pstyle("text-events").strValue?ph:fh},c=function(e){var t=e.position(),n=t.x,r=t.y,a=e.outerWidth(),i=e.outerHeight();return{w:a,h:i,x1:n-a/2,y1:r-i/2}};n.drawing.addAtlasCollection("node",{texRows:e.webglTexRowsNodes}),n.drawing.addAtlasCollection("label",{texRows:e.webglTexRows}),n.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:t.getStyleKey,getBoundingBox:t.getElementBox,drawElement:t.drawElement}),n.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:c,isSimple:Hd,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),n.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:c,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),n.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:c,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),n.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:u,getKey:mh(t.getLabelKey,null),getBoundingBox:bh(t.getLabelBox,null),drawClipped:!0,drawElement:t.drawLabel,getRotation:a(null),getRotationPoint:t.getLabelRotationPoint,getRotationOffset:t.getLabelRotationOffset,isVisible:i("label")}),n.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:u,getKey:mh(t.getSourceLabelKey,"source"),getBoundingBox:bh(t.getSourceLabelBox,"source"),drawClipped:!0,drawElement:t.drawSourceLabel,getRotation:a("source"),getRotationPoint:t.getSourceLabelRotationPoint,getRotationOffset:t.getSourceLabelRotationOffset,isVisible:i("source-label")}),n.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:u,getKey:mh(t.getTargetLabelKey,"target"),getBoundingBox:bh(t.getTargetLabelBox,"target"),drawClipped:!0,drawElement:t.drawTargetLabel,getRotation:a("target"),getRotationPoint:t.getTargetLabelRotationPoint,getRotationOffset:t.getTargetLabelRotationOffset,isVisible:i("target-label")});var d=Me(function(){console.log("garbage collect flag set"),n.data.gc=!0},1e4);n.onUpdateEleCalcs(function(e,t){var r=!1;t&&t.length>0&&(r|=n.drawing.invalidate(t)),r&&d()}),function(e){var t=e.render;e.render=function(n){n=n||{};var r=e.cy;e.webgl&&(r.zoom()>hd?(!function(e){var t=e.data.contexts[e.WEBGL];t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}(e),t.call(e,n)):(!function(e){var t=function(t){t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.canvasWidth,e.canvasHeight),t.restore()};t(e.data.contexts[e.NODE]),t(e.data.contexts[e.DRAG])}(e),Eh(e,n,hh.SCREEN)))};var n=e.matchCanvasSize;e.matchCanvasSize=function(t){n.call(e,t),e.pickingFrameBuffer.setFramebufferAttachmentSizes(e.canvasWidth,e.canvasHeight),e.pickingFrameBuffer.needsDraw=!0},e.findNearestElements=function(t,n,r,a){return function(e,t,n){var r,a,i,s=function(e,t,n){var r,a,i,o,s=Ud(e),u=s.pan,c=s.zoom,d=function(e,t,n,r,a){var i=r*n+t.x,o=a*n+t.y;return[i,o=Math.round(e.canvasHeight-o)]}(e,u,c,t,n),h=l(d,2),f=h[0],p=h[1],v=6;if(r=f-v/2,a=p-v/2,o=v,0===(i=v)||0===o)return[];var g=e.data.contexts[e.WEBGL];g.bindFramebuffer(g.FRAMEBUFFER,e.pickingFrameBuffer),e.pickingFrameBuffer.needsDraw&&(g.viewport(0,0,g.canvas.width,g.canvas.height),Eh(e,null,hh.PICKING),e.pickingFrameBuffer.needsDraw=!1);var y=i*o,m=new Uint8Array(4*y);g.readPixels(r,a,i,o,g.RGBA,g.UNSIGNED_BYTE,m),g.bindFramebuffer(g.FRAMEBUFFER,null);for(var b=new Set,x=0;x=0&&b.add(w)}return b}(e,t,n),u=e.getCachedZSortedEles(),c=o(s);try{for(c.s();!(i=c.n()).done;){var d=u[i.value];if(!r&&d.isNode()&&(r=d),!a&&d.isEdge()&&(a=d),r&&a)break}}catch(h){c.e(h)}finally{c.f()}return[r,a].filter(Boolean)}(e,t,n)};var r=e.invalidateCachedZSortedEles;e.invalidateCachedZSortedEles=function(){r.call(e),e.pickingFrameBuffer.needsDraw=!0};var a=e.notify;e.notify=function(t,n){a.call(e,t,n),"viewport"===t||"bounds"===t?e.pickingFrameBuffer.needsDraw=!0:"background"===t&&e.drawing.invalidate(n,{type:"node-body"})}}(n)};var mh=function(e,t){return function(n){var r=e(n),a=yh(n,t);return a.length>1?a.map(function(e,t){return"".concat(r,"_").concat(t)}):r}},bh=function(e,t){return function(n,r){var a=e(n);if("string"==typeof r){var i=r.indexOf("_");if(i>0){var o=Number(r.substring(i+1)),s=yh(n,t),l=a.h/s.length,u=l*o,c=a.y1+u;return{x1:a.x1,w:a.w,y1:c,h:l,yOffset:u}}}return a}};function xh(e,t){var n=e.canvasWidth,r=e.canvasHeight,a=Ud(e),i=a.pan,o=a.zoom;t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,n,r),t.translate(i.x,i.y),t.scale(o,o)}function wh(e,t,n){var r=e.drawing;t+=1,n.isNode()?(r.drawNode(n,t,"node-underlay"),r.drawNode(n,t,"node-body"),r.drawTexture(n,t,"label"),r.drawNode(n,t,"node-overlay")):(r.drawEdgeLine(n,t),r.drawEdgeArrow(n,t,"source"),r.drawEdgeArrow(n,t,"target"),r.drawTexture(n,t,"label"),r.drawTexture(n,t,"edge-source-label"),r.drawTexture(n,t,"edge-target-label"))}function Eh(e,t,n){var r;e.webglDebug&&(r=performance.now());var a=e.drawing,i=0;if(n.screen&&e.data.canvasNeedsRedraw[e.SELECT_BOX]&&function(e,t){e.drawSelectionRectangle(t,function(t){return xh(e,t)})}(e,t),e.data.canvasNeedsRedraw[e.NODE]||n.picking){var s=e.data.contexts[e.WEBGL];n.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=function(e){var t=e.canvasWidth,n=e.canvasHeight,r=Ud(e),a=r.pan,i=r.zoom,o=rh();ih(o,o,[a.x,a.y]),sh(o,o,[i,i]);var s=rh();!function(e,t,n){e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/n,e[5]=0,e[6]=-1,e[7]=1,e[8]=1}(s,t,n);var l,u,c,d,h,f,p,v,g,y,m,b,x,w,E,k,T,C,P,S,B,D=rh();return l=D,c=o,d=(u=s)[0],h=u[1],f=u[2],p=u[3],v=u[4],g=u[5],y=u[6],m=u[7],b=u[8],x=c[0],w=c[1],E=c[2],k=c[3],T=c[4],C=c[5],P=c[6],S=c[7],B=c[8],l[0]=x*d+w*p+E*y,l[1]=x*h+w*v+E*m,l[2]=x*f+w*g+E*b,l[3]=k*d+T*p+C*y,l[4]=k*h+T*v+C*m,l[5]=k*f+T*g+C*b,l[6]=P*d+S*p+B*y,l[7]=P*h+S*v+B*m,l[8]=P*f+S*g+B*b,D}(e),u=e.getCachedZSortedEles();if(i=u.length,a.startFrame(l,n),n.screen){for(var c=0;c0&&i>0){h.clearRect(0,0,a,i),h.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)h.translate(-n.x1*l,-n.y1*l),h.scale(l,l),this.drawElements(h,f),h.scale(1/l,1/l),h.translate(n.x1*l,n.y1*l);else{var p=t.pan(),v={x:p.x*l,y:p.y*l};l*=t.zoom(),h.translate(v.x,v.y),h.scale(l,l),this.drawElements(h,f),h.scale(1/l,1/l),h.translate(-v.x,-v.y)}e.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=e.bg,h.rect(0,0,a,i),h.fill())}return d},_h.png=function(e){return Mh(e,this.bufferCanvasImage(e),"image/png")},_h.jpg=function(e){return Mh(e,this.bufferCanvasImage(e),"image/jpeg")};var Rh={nodeShapeImpl:function(e,t,n,r,a,i,o,s){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,a,i);case"polygon":return this.drawPolygonPath(t,n,r,a,i,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,a,i,o,s);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,a,i,s);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,a,i,o,s);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,a,i,s);case"barrel":return this.drawBarrelPath(t,n,r,a,i)}}},Ih=Lh,Nh=Lh.prototype;function Lh(e){var t=this,n=t.cy.window().document;e.webgl&&(Nh.CANVAS_LAYERS=t.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),t.data={canvases:new Array(Nh.CANVAS_LAYERS),contexts:new Array(Nh.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Nh.CANVAS_LAYERS),bufferCanvases:new Array(Nh.BUFFER_COUNT),bufferContexts:new Array(Nh.CANVAS_LAYERS)};var r="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";t.data.canvasContainer=n.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[r]=a,i.position="relative",i.zIndex="0",i.overflow="hidden";var o=e.cy.container();o.appendChild(t.data.canvasContainer),o.style[r]=a;var s={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};p&&p.userAgent.match(/msie|trident|edge/i)&&(s["-ms-touch-action"]="none",s["touch-action"]="none");for(var l=0;l{e.d(n,{diagram:()=>ct});var i=e(67633),s=e(40797),r=e(70451);function o(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e>i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e>s||void 0===e&&s>=s)&&(e=s)}return e}function c(t){return t.target.depth}function l(t,n){return t.sourceLinks.length?t.depth:n-1}function a(t,n){let e=0;if(void 0===n)for(let i of t)(i=+i)&&(e+=i);else{let i=-1;for(let s of t)(s=+n(s,++i,t))&&(e+=s)}return e}function h(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e=s)&&(e=s)}return e}function u(t){return function(){return t}}function f(t,n){return d(t.source,n.source)||t.index-n.index}function y(t,n){return d(t.target,n.target)||t.index-n.index}function d(t,n){return t.y0-n.y0}function p(t){return t.value}function g(t){return t.index}function _(t){return t.nodes}function k(t){return t.links}function x(t,n){const e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function m({nodes:t}){for(const n of t){let t=n.y0,e=t;for(const i of n.sourceLinks)i.y0=t+i.width/2,t+=i.width;for(const i of n.targetLinks)i.y1=e+i.width/2,e+=i.width}}function v(){let t,n,e,i=0,s=0,r=1,c=1,v=24,b=8,w=g,L=l,S=_,E=k,K=6;function A(){const l={nodes:S.apply(null,arguments),links:E.apply(null,arguments)};return function({nodes:t,links:n}){for(const[e,s]of t.entries())s.index=e,s.sourceLinks=[],s.targetLinks=[];const i=new Map(t.map((n,e)=>[w(n,e,t),n]));for(const[e,s]of n.entries()){s.index=e;let{source:t,target:n}=s;"object"!=typeof t&&(t=s.source=x(i,t)),"object"!=typeof n&&(n=s.target=x(i,n)),t.sourceLinks.push(s),n.targetLinks.push(s)}if(null!=e)for(const{sourceLinks:s,targetLinks:r}of t)s.sort(e),r.sort(e)}(l),function({nodes:t}){for(const n of t)n.value=void 0===n.fixedValue?Math.max(a(n.sourceLinks,p),a(n.targetLinks,p)):n.fixedValue}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.depth=s;for(const{target:n}of t.sourceLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.height=s;for(const{source:n}of t.targetLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function(e){const l=function({nodes:t}){const e=h(t,t=>t.depth)+1,s=(r-i-v)/(e-1),o=new Array(e);for(const n of t){const t=Math.max(0,Math.min(e-1,Math.floor(L.call(null,n,e))));n.layer=t,n.x0=i+t*s,n.x1=n.x0+v,o[t]?o[t].push(n):o[t]=[n]}if(n)for(const i of o)i.sort(n);return o}(e);t=Math.min(b,(c-s)/(h(l,t=>t.length)-1)),function(n){const e=o(n,n=>(c-s-(n.length-1)*t)/a(n,p));for(const i of n){let n=s;for(const s of i){s.y0=n,s.y1=n+s.value*e,n=s.y1+t;for(const t of s.sourceLinks)t.width=t.value*e}n=(c-n+t)/(i.length+1);for(let t=0;t0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,P(t)}void 0===n&&r.sort(d),T(r,i)}}function I(t,e,i){for(let s=t.length-2;s>=0;--s){const r=t[s];for(const t of r){let n=0,i=0;for(const{target:e,value:r}of t.sourceLinks){let s=r*(e.layer-t.layer);n+=$(t,e)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,P(t)}void 0===n&&r.sort(d),T(r,i)}}function T(n,e){const i=n.length>>1,r=n[i];N(n,r.y0-t,i-1,e),D(n,r.y1+t,i+1,e),N(n,c,n.length-1,e),D(n,s,0,e)}function D(n,e,i,s){for(;i1e-6&&(r.y0+=o,r.y1+=o),e=r.y1+t}}function N(n,e,i,s){for(;i>=0;--i){const r=n[i],o=(r.y1-e)*s;o>1e-6&&(r.y0-=o,r.y1-=o),e=r.y0-t}}function P({sourceLinks:t,targetLinks:n}){if(void 0===e){for(const{source:{sourceLinks:t}}of n)t.sort(y);for(const{target:{targetLinks:n}}of t)n.sort(f)}}function C(t){if(void 0===e)for(const{sourceLinks:n,targetLinks:e}of t)n.sort(y),e.sort(f)}function O(n,e){let i=n.y0-(n.sourceLinks.length-1)*t/2;for(const{target:s,width:r}of n.sourceLinks){if(s===e)break;i+=r+t}for(const{source:t,width:s}of e.targetLinks){if(t===n)break;i-=s}return i}function $(n,e){let i=e.y0-(e.targetLinks.length-1)*t/2;for(const{source:s,width:r}of e.targetLinks){if(s===n)break;i+=r+t}for(const{target:t,width:s}of n.sourceLinks){if(t===e)break;i-=s}return i}return A.update=function(t){return m(t),t},A.nodeId=function(t){return arguments.length?(w="function"==typeof t?t:u(t),A):w},A.nodeAlign=function(t){return arguments.length?(L="function"==typeof t?t:u(t),A):L},A.nodeSort=function(t){return arguments.length?(n=t,A):n},A.nodeWidth=function(t){return arguments.length?(v=+t,A):v},A.nodePadding=function(n){return arguments.length?(b=t=+n,A):b},A.nodes=function(t){return arguments.length?(S="function"==typeof t?t:u(t),A):S},A.links=function(t){return arguments.length?(E="function"==typeof t?t:u(t),A):E},A.linkSort=function(t){return arguments.length?(e=t,A):e},A.size=function(t){return arguments.length?(i=s=0,r=+t[0],c=+t[1],A):[r-i,c-s]},A.extent=function(t){return arguments.length?(i=+t[0][0],r=+t[1][0],s=+t[0][1],c=+t[1][1],A):[[i,s],[r,c]]},A.iterations=function(t){return arguments.length?(K=+t,A):K},A}var b=Math.PI,w=2*b,L=1e-6,S=w-L;function E(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function K(){return new E}E.prototype=K.prototype={constructor:E,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,s,r){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+s)+","+(this._y1=+r)},arcTo:function(t,n,e,i,s){t=+t,n=+n,e=+e,i=+i,s=+s;var r=this._x1,o=this._y1,c=e-t,l=i-n,a=r-t,h=o-n,u=a*a+h*h;if(s<0)throw new Error("negative radius: "+s);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(u>L)if(Math.abs(h*c-l*a)>L&&s){var f=e-r,y=i-o,d=c*c+l*l,p=f*f+y*y,g=Math.sqrt(d),_=Math.sqrt(u),k=s*Math.tan((b-Math.acos((d+u-p)/(2*g*_)))/2),x=k/_,m=k/g;Math.abs(x-1)>L&&(this._+="L"+(t+x*a)+","+(n+x*h)),this._+="A"+s+","+s+",0,0,"+ +(h*f>a*y)+","+(this._x1=t+m*c)+","+(this._y1=n+m*l)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,s,r){t=+t,n=+n,r=!!r;var o=(e=+e)*Math.cos(i),c=e*Math.sin(i),l=t+o,a=n+c,h=1^r,u=r?i-s:s-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+l+","+a:(Math.abs(this._x1-l)>L||Math.abs(this._y1-a)>L)&&(this._+="L"+l+","+a),e&&(u<0&&(u=u%w+w),u>S?this._+="A"+e+","+e+",0,1,"+h+","+(t-o)+","+(n-c)+"A"+e+","+e+",0,1,"+h+","+(this._x1=l)+","+(this._y1=a):u>L&&(this._+="A"+e+","+e+",0,"+ +(u>=b)+","+h+","+(this._x1=t+e*Math.cos(s))+","+(this._y1=n+e*Math.sin(s))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};const A=K;var M=Array.prototype.slice;function I(t){return function(){return t}}function T(t){return t[0]}function D(t){return t[1]}function N(t){return t.source}function P(t){return t.target}function C(t){var n=N,e=P,i=T,s=D,r=null;function o(){var o,c=M.call(arguments),l=n.apply(this,c),a=e.apply(this,c);if(r||(r=o=A()),t(r,+i.apply(this,(c[0]=l,c)),+s.apply(this,c),+i.apply(this,(c[0]=a,c)),+s.apply(this,c)),o)return r=null,o+""||null}return o.source=function(t){return arguments.length?(n=t,o):n},o.target=function(t){return arguments.length?(e=t,o):e},o.x=function(t){return arguments.length?(i="function"==typeof t?t:I(+t),o):i},o.y=function(t){return arguments.length?(s="function"==typeof t?t:I(+t),o):s},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o}function O(t,n,e,i,s){t.moveTo(n,e),t.bezierCurveTo(n=(n+i)/2,e,n,s,i,s)}function $(t){return[t.source.x1,t.y0]}function j(t){return[t.target.x0,t.y1]}function z(){return C(O).source($).target(j)}var U=function(){var t=(0,s.K2)(function(t,n,e,i){for(e=e||{},i=t.length;i--;e[t[i]]=n);return e},"o"),n=[1,9],e=[1,10],i=[1,5,10,12],r={trace:(0,s.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:(0,s.K2)(function(t,n,e,i,s,r,o){var c=r.length-1;switch(s){case 7:const t=i.findOrCreateNode(r[c-4].trim().replaceAll('""','"')),n=i.findOrCreateNode(r[c-2].trim().replaceAll('""','"')),e=parseFloat(r[c].trim());i.addLink(t,n,e);break;case 8:case 9:case 11:this.$=r[c];break;case 10:this.$=r[c-1]}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:e},{1:[2,6],7:11,10:[1,12]},t(e,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(e,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:e},{15:18,16:7,17:8,18:n,20:e},{18:[1,19]},t(e,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:n,20:e},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:(0,s.K2)(function(t,n){if(!n.recoverable){var e=new Error(t);throw e.hash=n,e}this.trace(t)},"parseError"),parse:(0,s.K2)(function(t){var n=this,e=[0],i=[],r=[null],o=[],c=this.table,l="",a=0,h=0,u=0,f=o.slice.call(arguments,1),y=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);y.setInput(t,d.yy),d.yy.lexer=y,d.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var g=y.yylloc;o.push(g);var _=y.options&&y.options.ranges;function k(){var t;return"number"!=typeof(t=i.pop()||y.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=n.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,s.K2)(function(t){e.length=e.length-2*t,r.length=r.length-t,o.length=o.length-t},"popStack"),(0,s.K2)(k,"lex");for(var x,m,v,b,w,L,S,E,K,A={};;){if(v=e[e.length-1],this.defaultActions[v]?b=this.defaultActions[v]:(null==x&&(x=k()),b=c[v]&&c[v][x]),void 0===b||!b.length||!b[0]){var M="";for(L in K=[],c[v])this.terminals_[L]&&L>2&&K.push("'"+this.terminals_[L]+"'");M=y.showPosition?"Parse error on line "+(a+1)+":\n"+y.showPosition()+"\nExpecting "+K.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==x?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(M,{text:y.match,token:this.terminals_[x]||x,line:y.yylineno,loc:g,expected:K})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+v+", token: "+x);switch(b[0]){case 1:e.push(x),r.push(y.yytext),o.push(y.yylloc),e.push(b[1]),x=null,m?(x=m,m=null):(h=y.yyleng,l=y.yytext,a=y.yylineno,g=y.yylloc,u>0&&u--);break;case 2:if(S=this.productions_[b[1]][1],A.$=r[r.length-S],A._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},_&&(A._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[l,h,a,d.yy,b[1],r,o].concat(f))))return w;S&&(e=e.slice(0,-1*S*2),r=r.slice(0,-1*S),o=o.slice(0,-1*S)),e.push(this.productions_[b[1]][0]),r.push(A.$),o.push(A._$),E=c[e[e.length-2]][e[e.length-1]],e.push(E);break;case 3:return!0}}return!0},"parse")},o=function(){return{EOF:1,parseError:(0,s.K2)(function(t,n){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,n)},"parseError"),setInput:(0,s.K2)(function(t,n){return this.yy=n||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,s.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,s.K2)(function(t){var n=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===i.length?this.yylloc.first_column:0)+i[i.length-e.length].length-e[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},"unput"),more:(0,s.K2)(function(){return this._more=!0,this},"more"),reject:(0,s.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,s.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,s.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,s.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,s.K2)(function(){var t=this.pastInput(),n=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+n+"^"},"showPosition"),test_match:(0,s.K2)(function(t,n){var e,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},"test_match"),next:(0,s.K2)(function(){if(this.done)return this.EOF;var t,n,e,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;rn[0].length)){if(n=e,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,s[r])))return t;if(this._backtrack){n=!1;continue}return!1}if(!this.options.flex)break}return n?!1!==(t=this.test_match(n,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,s.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,s.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,s.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,s.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,s.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,s.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,s.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,s.K2)(function(t,n,e,i){switch(e){case 0:case 1:return this.pushState("csv"),4;case 2:return 10;case 3:return 5;case 4:return 12;case 5:return this.pushState("escaped_text"),18;case 6:return 20;case 7:return this.popState("escaped_text"),18;case 8:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:sankey\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[2,3,4,5,6,7,8],inclusive:!1},escaped_text:{rules:[7,8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8],inclusive:!0}}}}();function c(){this.yy={}}return r.lexer=o,(0,s.K2)(c,"Parser"),c.prototype=r,r.Parser=c,new c}();U.parser=U;var F=U,W=[],G=[],V=new Map,X=(0,s.K2)(()=>{W=[],G=[],V=new Map,(0,i.IU)()},"clear"),Y=class{constructor(t,n,e=0){this.source=t,this.target=n,this.value=e}static{(0,s.K2)(this,"SankeyLink")}},q=(0,s.K2)((t,n,e)=>{W.push(new Y(t,n,e))},"addLink"),Q=class{constructor(t){this.ID=t}static{(0,s.K2)(this,"SankeyNode")}},R=(0,s.K2)(t=>{t=i.Y2.sanitizeText(t,(0,i.D7)());let n=V.get(t);return void 0===n&&(n=new Q(t),V.set(t,n),G.push(n)),n},"findOrCreateNode"),B=(0,s.K2)(()=>G,"getNodes"),Z=(0,s.K2)(()=>W,"getLinks"),H=(0,s.K2)(()=>({nodes:G.map(t=>({id:t.ID})),links:W.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),J={nodesMap:V,getConfig:(0,s.K2)(()=>(0,i.D7)().sankey,"getConfig"),getNodes:B,getLinks:Z,getGraph:H,addLink:q,findOrCreateNode:R,getAccTitle:i.iN,setAccTitle:i.SV,getAccDescription:i.m7,setAccDescription:i.EI,getDiagramTitle:i.ab,setDiagramTitle:i.ke,clear:X},tt=class t{static{(0,s.K2)(this,"Uid")}static{this.count=0}static next(n){return new t(n+ ++t.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}},nt={left:function(t){return t.depth},right:function(t,n){return n-1-t.height},center:function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?o(t.sourceLinks,c)-1:0},justify:l},et=(0,s.K2)(function(t,n,e,o){const{securityLevel:c,sankey:l}=(0,i.D7)(),a=i.ME.sankey;let h;"sandbox"===c&&(h=(0,r.Ltv)("#i"+n));const u="sandbox"===c?(0,r.Ltv)(h.nodes()[0].contentDocument.body):(0,r.Ltv)("body"),f="sandbox"===c?u.select(`[id="${n}"]`):(0,r.Ltv)(`[id="${n}"]`),y=l?.width??a.width,d=l?.height??a.width,p=l?.useMaxWidth??a.useMaxWidth,g=l?.nodeAlignment??a.nodeAlignment,_=l?.prefix??a.prefix,k=l?.suffix??a.suffix,x=l?.showValues??a.showValues,m=o.db.getGraph(),b=nt[g];v().nodeId(t=>t.id).nodeWidth(10).nodePadding(10+(x?15:0)).nodeAlign(b).extent([[0,0],[y,d]])(m);const w=(0,r.UMr)(r.zt);f.append("g").attr("class","nodes").selectAll(".node").data(m.nodes).join("g").attr("class","node").attr("id",t=>(t.uid=tt.next("node-")).id).attr("transform",function(t){return"translate("+t.x0+","+t.y0+")"}).attr("x",t=>t.x0).attr("y",t=>t.y0).append("rect").attr("height",t=>t.y1-t.y0).attr("width",t=>t.x1-t.x0).attr("fill",t=>w(t.id));const L=(0,s.K2)(({id:t,value:n})=>x?`${t}\n${_}${Math.round(100*n)/100}${k}`:t,"getText");f.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(m.nodes).join("text").attr("x",t=>t.x0(t.y1+t.y0)/2).attr("dy",(x?"0":"0.35")+"em").attr("text-anchor",t=>t.x0(t.uid=tt.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",t=>t.source.x1).attr("x2",t=>t.target.x0);t.append("stop").attr("offset","0%").attr("stop-color",t=>w(t.source.id)),t.append("stop").attr("offset","100%").attr("stop-color",t=>w(t.target.id))}let K;switch(E){case"gradient":K=(0,s.K2)(t=>t.uid,"coloring");break;case"source":K=(0,s.K2)(t=>w(t.source.id),"coloring");break;case"target":K=(0,s.K2)(t=>w(t.target.id),"coloring");break;default:K=E}S.append("path").attr("d",z()).attr("stroke",K).attr("stroke-width",t=>Math.max(1,t.width)),(0,i.ot)(void 0,f,0,p)},"draw"),it={draw:et},st=(0,s.K2)(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,"\n").trim(),"prepareTextForParsing"),rt=(0,s.K2)(t=>`.label {\n font-family: ${t.fontFamily};\n }`,"getStyles"),ot=F.parse.bind(F);F.parse=t=>ot(st(t));var ct={styles:rt,parser:F,db:J,renderer:it}}}]); \ No newline at end of file diff --git a/assets/js/1746.0cae81fa.js b/assets/js/1746.0cae81fa.js new file mode 100644 index 0000000..a3efdad --- /dev/null +++ b/assets/js/1746.0cae81fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1746],{21152:(t,e,s)=>{s.d(e,{P:()=>a});var i=s(67633),n=s(40797),a=(0,n.K2)((t,e,s,a)=>{t.attr("class",s);const{width:l,height:o,x:c,y:h}=r(t,e);(0,i.a$)(t,o,l,a);const d=u(c,h,l,o,e);t.attr("viewBox",d),n.Rm.debug(`viewBox configured: ${d} with padding: ${e}`)},"setupViewPortForSVG"),r=(0,n.K2)((t,e)=>{const s=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:s.width+2*e,height:s.height+2*e,x:s.x,y:s.y}},"calculateDimensionsWithPadding"),u=(0,n.K2)((t,e,s,i,n)=>`${t-n} ${e-n} ${s} ${i}`,"createViewBox")},52501:(t,e,s)=>{s.d(e,{o:()=>i});var i=(0,s(40797).K2)(()=>"\n /* Font Awesome icon styling - consolidated */\n .label-icon {\n display: inline-block;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n \n .node .label-icon path {\n fill: currentColor;\n stroke: revert;\n stroke-width: revert;\n }\n","getIconStyles")},71746:(t,e,s)=>{s.d(e,{Lh:()=>k,NM:()=>m,_$:()=>d,tM:()=>b});var i=s(52501),n=s(89625),a=s(21152),r=s(10045),u=s(13226),l=s(67633),o=s(40797),c=s(70451),h=function(){var t=(0,o.K2)(function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},"o"),e=[1,18],s=[1,19],i=[1,20],n=[1,41],a=[1,42],r=[1,26],u=[1,24],l=[1,25],c=[1,32],h=[1,33],d=[1,34],p=[1,45],A=[1,35],y=[1,36],g=[1,37],C=[1,38],m=[1,27],b=[1,28],E=[1,29],k=[1,30],T=[1,31],f=[1,44],D=[1,46],F=[1,43],B=[1,47],_=[1,9],S=[1,8,9],N=[1,58],L=[1,59],$=[1,60],x=[1,61],v=[1,62],I=[1,63],O=[1,64],w=[1,8,9,41],R=[1,76],P=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],K=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],M=[13,60,86,100,102,103],G=[13,60,73,74,86,100,102,103],U=[13,60,68,69,70,71,72,86,100,102,103],Y=[1,100],z=[1,117],Q=[1,113],W=[1,109],X=[1,115],j=[1,110],V=[1,111],q=[1,112],H=[1,114],J=[1,116],Z=[22,48,60,61,82,86,87,88,89,90],tt=[1,8,9,39,41,44],et=[1,8,9,22],st=[1,145],it=[1,8,9,61],nt=[1,8,9,22,48,60,61,82,86,87,88,89,90],at={trace:(0,o.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,emptyBody:47,SPACE:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",48:"SPACE",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:(0,o.K2)(function(t,e,s,i,n,a,r){var u=a.length-1;switch(n){case 8:this.$=a[u-1];break;case 9:case 10:case 13:case 15:this.$=a[u];break;case 11:case 14:this.$=a[u-2]+"."+a[u];break;case 12:case 16:case 100:this.$=a[u-1]+a[u];break;case 17:case 18:this.$=a[u-1]+"~"+a[u]+"~";break;case 19:i.addRelation(a[u]);break;case 20:a[u-1].title=i.cleanupLabel(a[u]),i.addRelation(a[u-1]);break;case 31:this.$=a[u].trim(),i.setAccTitle(this.$);break;case 32:case 33:this.$=a[u].trim(),i.setAccDescription(this.$);break;case 34:i.addClassesToNamespace(a[u-3],a[u-1]);break;case 35:i.addClassesToNamespace(a[u-4],a[u-1]);break;case 36:this.$=a[u],i.addNamespace(a[u]);break;case 37:case 51:case 64:case 97:this.$=[a[u]];break;case 38:this.$=[a[u-1]];break;case 39:a[u].unshift(a[u-2]),this.$=a[u];break;case 41:i.setCssClass(a[u-2],a[u]);break;case 42:i.addMembers(a[u-3],a[u-1]);break;case 44:i.setCssClass(a[u-5],a[u-3]),i.addMembers(a[u-5],a[u-1]);break;case 45:this.$=a[u],i.addClass(a[u]);break;case 46:this.$=a[u-1],i.addClass(a[u-1]),i.setClassLabel(a[u-1],a[u]);break;case 50:i.addAnnotation(a[u],a[u-2]);break;case 52:a[u].push(a[u-1]),this.$=a[u];break;case 53:case 55:case 56:break;case 54:i.addMember(a[u-1],i.cleanupLabel(a[u]));break;case 57:this.$={id1:a[u-2],id2:a[u],relation:a[u-1],relationTitle1:"none",relationTitle2:"none"};break;case 58:this.$={id1:a[u-3],id2:a[u],relation:a[u-1],relationTitle1:a[u-2],relationTitle2:"none"};break;case 59:this.$={id1:a[u-3],id2:a[u],relation:a[u-2],relationTitle1:"none",relationTitle2:a[u-1]};break;case 60:this.$={id1:a[u-4],id2:a[u],relation:a[u-2],relationTitle1:a[u-3],relationTitle2:a[u-1]};break;case 61:i.addNote(a[u],a[u-1]);break;case 62:i.addNote(a[u]);break;case 63:this.$=a[u-2],i.defineClass(a[u-1],a[u]);break;case 65:this.$=a[u-2].concat([a[u]]);break;case 66:i.setDirection("TB");break;case 67:i.setDirection("BT");break;case 68:i.setDirection("RL");break;case 69:i.setDirection("LR");break;case 70:this.$={type1:a[u-2],type2:a[u],lineType:a[u-1]};break;case 71:this.$={type1:"none",type2:a[u],lineType:a[u-1]};break;case 72:this.$={type1:a[u-1],type2:"none",lineType:a[u]};break;case 73:this.$={type1:"none",type2:"none",lineType:a[u]};break;case 74:this.$=i.relationType.AGGREGATION;break;case 75:this.$=i.relationType.EXTENSION;break;case 76:this.$=i.relationType.COMPOSITION;break;case 77:this.$=i.relationType.DEPENDENCY;break;case 78:this.$=i.relationType.LOLLIPOP;break;case 79:this.$=i.lineType.LINE;break;case 80:this.$=i.lineType.DOTTED_LINE;break;case 81:case 87:this.$=a[u-2],i.setClickEvent(a[u-1],a[u]);break;case 82:case 88:this.$=a[u-3],i.setClickEvent(a[u-2],a[u-1]),i.setTooltip(a[u-2],a[u]);break;case 83:this.$=a[u-2],i.setLink(a[u-1],a[u]);break;case 84:this.$=a[u-3],i.setLink(a[u-2],a[u-1],a[u]);break;case 85:this.$=a[u-3],i.setLink(a[u-2],a[u-1]),i.setTooltip(a[u-2],a[u]);break;case 86:this.$=a[u-4],i.setLink(a[u-3],a[u-2],a[u]),i.setTooltip(a[u-3],a[u-1]);break;case 89:this.$=a[u-3],i.setClickEvent(a[u-2],a[u-1],a[u]);break;case 90:this.$=a[u-4],i.setClickEvent(a[u-3],a[u-2],a[u-1]),i.setTooltip(a[u-3],a[u]);break;case 91:this.$=a[u-3],i.setLink(a[u-2],a[u]);break;case 92:this.$=a[u-4],i.setLink(a[u-3],a[u-1],a[u]);break;case 93:this.$=a[u-4],i.setLink(a[u-3],a[u-1]),i.setTooltip(a[u-3],a[u]);break;case 94:this.$=a[u-5],i.setLink(a[u-4],a[u-2],a[u]),i.setTooltip(a[u-4],a[u-1]);break;case 95:this.$=a[u-2],i.setCssStyle(a[u-1],a[u]);break;case 96:i.setCssClass(a[u-1],a[u]);break;case 98:a[u-2].push(a[u]),this.$=a[u-2]}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:s,37:i,38:22,42:n,43:23,46:a,49:r,51:u,52:l,54:c,56:h,57:d,60:p,62:A,63:y,64:g,65:C,75:m,76:b,78:E,82:k,83:T,86:f,100:D,102:F,103:B},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(_,[2,5],{8:[1,48]}),{8:[1,49]},t(S,[2,19],{22:[1,50]}),t(S,[2,21]),t(S,[2,22]),t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,27]),t(S,[2,28]),t(S,[2,29]),t(S,[2,30]),{34:[1,51]},{36:[1,52]},t(S,[2,33]),t(S,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:N,69:L,70:$,71:x,72:v,73:I,74:O}),{39:[1,65]},t(w,[2,40],{39:[1,67],44:[1,66]}),t(S,[2,55]),t(S,[2,56]),{16:68,60:p,86:f,100:D,102:F},{16:39,17:40,19:69,60:p,86:f,100:D,102:F,103:B},{16:39,17:40,19:70,60:p,86:f,100:D,102:F,103:B},{16:39,17:40,19:71,60:p,86:f,100:D,102:F,103:B},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:p,86:f,100:D,102:F,103:B},{13:R,55:75},{58:77,60:[1,78]},t(S,[2,66]),t(S,[2,67]),t(S,[2,68]),t(S,[2,69]),t(P,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:p,86:f,100:D,102:F,103:B}),t(P,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:p,86:f,100:D,102:F,103:B},{16:39,17:40,19:86,60:p,86:f,100:D,102:F,103:B},t(K,[2,123]),t(K,[2,124]),t(K,[2,125]),t(K,[2,126]),t([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),t(_,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:e,35:s,37:i,42:n,46:a,49:r,51:u,52:l,54:c,56:h,57:d,60:p,62:A,63:y,64:g,65:C,75:m,76:b,78:E,82:k,83:T,86:f,100:D,102:F,103:B}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:s,37:i,38:22,42:n,43:23,46:a,49:r,51:u,52:l,54:c,56:h,57:d,60:p,62:A,63:y,64:g,65:C,75:m,76:b,78:E,82:k,83:T,86:f,100:D,102:F,103:B},t(S,[2,20]),t(S,[2,31]),t(S,[2,32]),{13:[1,90],16:39,17:40,19:89,60:p,86:f,100:D,102:F,103:B},{53:91,66:56,67:57,68:N,69:L,70:$,71:x,72:v,73:I,74:O},t(S,[2,54]),{67:92,73:I,74:O},t(M,[2,73],{66:93,68:N,69:L,70:$,71:x,72:v}),t(G,[2,74]),t(G,[2,75]),t(G,[2,76]),t(G,[2,77]),t(G,[2,78]),t(U,[2,79]),t(U,[2,80]),{8:[1,95],24:96,40:94,43:23,46:a},{16:97,60:p,86:f,100:D,102:F},{41:[1,99],45:98,51:Y},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:z,48:Q,59:106,60:W,82:X,84:107,85:108,86:j,87:V,88:q,89:H,90:J},{60:[1,118]},{13:R,55:119},t(S,[2,62]),t(S,[2,128]),{22:z,48:Q,59:120,60:W,61:[1,121],82:X,84:107,85:108,86:j,87:V,88:q,89:H,90:J},t(Z,[2,64]),{16:39,17:40,19:122,60:p,86:f,100:D,102:F,103:B},t(P,[2,16]),t(P,[2,17]),t(P,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:p,86:f,100:D,102:F,103:B},{39:[2,10]},t(tt,[2,45],{11:125,12:[1,126]}),t(_,[2,7]),{9:[1,127]},t(et,[2,57]),{16:39,17:40,19:128,60:p,86:f,100:D,102:F,103:B},{13:[1,130],16:39,17:40,19:129,60:p,86:f,100:D,102:F,103:B},t(M,[2,72],{66:131,68:N,69:L,70:$,71:x,72:v}),t(M,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:a},{8:[1,134],41:[2,37]},t(w,[2,41],{39:[1,135]}),{41:[1,136]},t(w,[2,43]),{41:[2,51],45:137,51:Y},{16:39,17:40,19:138,60:p,86:f,100:D,102:F,103:B},t(S,[2,81],{13:[1,139]}),t(S,[2,83],{13:[1,141],77:[1,140]}),t(S,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},t(S,[2,95],{61:st}),t(it,[2,97],{85:146,22:z,48:Q,60:W,82:X,86:j,87:V,88:q,89:H,90:J}),t(nt,[2,99]),t(nt,[2,101]),t(nt,[2,102]),t(nt,[2,103]),t(nt,[2,104]),t(nt,[2,105]),t(nt,[2,106]),t(nt,[2,107]),t(nt,[2,108]),t(nt,[2,109]),t(S,[2,96]),t(S,[2,61]),t(S,[2,63],{61:st}),{60:[1,147]},t(P,[2,14]),{15:148,16:84,17:85,60:p,86:f,100:D,102:F,103:B},{39:[2,12]},t(tt,[2,46]),{13:[1,149]},{1:[2,4]},t(et,[2,59]),t(et,[2,58]),{16:39,17:40,19:150,60:p,86:f,100:D,102:F,103:B},t(M,[2,70]),t(S,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:a},{45:153,51:Y},t(w,[2,42]),{41:[2,52]},t(S,[2,50]),t(S,[2,82]),t(S,[2,84]),t(S,[2,85],{77:[1,154]}),t(S,[2,88]),t(S,[2,89],{13:[1,155]}),t(S,[2,91],{13:[1,157],77:[1,156]}),{22:z,48:Q,60:W,82:X,84:158,85:108,86:j,87:V,88:q,89:H,90:J},t(nt,[2,100]),t(Z,[2,65]),{39:[2,11]},{14:[1,159]},t(et,[2,60]),t(S,[2,35]),{41:[2,39]},{41:[1,160]},t(S,[2,86]),t(S,[2,90]),t(S,[2,92]),t(S,[2,93],{77:[1,161]}),t(it,[2,98],{85:146,22:z,48:Q,60:W,82:X,86:j,87:V,88:q,89:H,90:J}),t(tt,[2,8]),t(w,[2,44]),t(S,[2,94])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},parseError:(0,o.K2)(function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},"parseError"),parse:(0,o.K2)(function(t){var e=this,s=[0],i=[],n=[null],a=[],r=this.table,u="",l=0,c=0,h=0,d=a.slice.call(arguments,1),p=Object.create(this.lexer),A={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(A.yy[y]=this.yy[y]);p.setInput(t,A.yy),A.yy.lexer=p,A.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var g=p.yylloc;a.push(g);var C=p.options&&p.options.ranges;function m(){var t;return"number"!=typeof(t=i.pop()||p.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,o.K2)(function(t){s.length=s.length-2*t,n.length=n.length-t,a.length=a.length-t},"popStack"),(0,o.K2)(m,"lex");for(var b,E,k,T,f,D,F,B,_,S={};;){if(k=s[s.length-1],this.defaultActions[k]?T=this.defaultActions[k]:(null==b&&(b=m()),T=r[k]&&r[k][b]),void 0===T||!T.length||!T[0]){var N="";for(D in _=[],r[k])this.terminals_[D]&&D>2&&_.push("'"+this.terminals_[D]+"'");N=p.showPosition?"Parse error on line "+(l+1)+":\n"+p.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(N,{text:p.match,token:this.terminals_[b]||b,line:p.yylineno,loc:g,expected:_})}if(T[0]instanceof Array&&T.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+b);switch(T[0]){case 1:s.push(b),n.push(p.yytext),a.push(p.yylloc),s.push(T[1]),b=null,E?(b=E,E=null):(c=p.yyleng,u=p.yytext,l=p.yylineno,g=p.yylloc,h>0&&h--);break;case 2:if(F=this.productions_[T[1]][1],S.$=n[n.length-F],S._$={first_line:a[a.length-(F||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(F||1)].first_column,last_column:a[a.length-1].last_column},C&&(S._$.range=[a[a.length-(F||1)].range[0],a[a.length-1].range[1]]),void 0!==(f=this.performAction.apply(S,[u,c,l,A.yy,T[1],n,a].concat(d))))return f;F&&(s=s.slice(0,-1*F*2),n=n.slice(0,-1*F),a=a.slice(0,-1*F)),s.push(this.productions_[T[1]][0]),n.push(S.$),a.push(S._$),B=r[s[s.length-2]][s[s.length-1]],s.push(B);break;case 3:return!0}}return!0},"parse")},rt=function(){return{EOF:1,parseError:(0,o.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,o.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,o.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,o.K2)(function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,o.K2)(function(){return this._more=!0,this},"more"),reject:(0,o.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,o.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,o.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,o.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,o.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,o.K2)(function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},"test_match"),next:(0,o.K2)(function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;ae[0].length)){if(e=s,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,o.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,o.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,o.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,o.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,o.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,o.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,o.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:(0,o.K2)(function(t,e,s,i){switch(s){case 0:return 62;case 1:return 63;case 2:return 64;case 3:return 65;case 4:case 5:case 14:case 31:case 36:case 40:case 47:break;case 6:return this.begin("acc_title"),33;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),35;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 19:case 22:case 24:case 58:case 61:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 35:return 8;case 15:case 16:return 7;case 17:case 37:case 45:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 79;case 23:return 80;case 25:return"STR";case 26:this.begin("string");break;case 27:return 82;case 28:return 57;case 29:return this.begin("namespace"),42;case 30:case 39:return this.popState(),8;case 32:return this.begin("namespace-body"),39;case 33:case 43:return this.popState(),41;case 34:case 44:return"EOF_IN_STRUCT";case 38:return this.begin("class"),46;case 41:return this.popState(),this.popState(),41;case 42:return this.begin("class-body"),39;case 46:return"OPEN_IN_STRUCT";case 48:return"MEMBER";case 49:return 83;case 50:return 75;case 51:return 76;case 52:return 78;case 53:return 54;case 54:return 56;case 55:return 49;case 56:return 50;case 57:return 81;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:case 65:case 66:case 67:return 77;case 68:case 69:return 69;case 70:case 71:return 71;case 72:return 70;case 73:return 68;case 74:return 72;case 75:return 73;case 76:return 74;case 77:return 22;case 78:return 44;case 79:return 100;case 80:return 18;case 81:return"PLUS";case 82:return 87;case 83:return 61;case 84:case 85:return 89;case 86:return 90;case 87:case 88:return"EQUALS";case 89:return 60;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 86;case 94:return 102;case 95:case 96:return 48;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}}}();function ut(){this.yy={}}return at.lexer=rt,(0,o.K2)(ut,"Parser"),ut.prototype=at,at.Parser=ut,new ut}();h.parser=h;var d=h,p=["#","+","~","-",""],A=class{static{(0,o.K2)(this,"ClassMember")}constructor(t,e){this.memberType=e,this.visibility="",this.classifier="",this.text="";const s=(0,l.jZ)(t,(0,l.D7)());this.parseMember(s)}getDisplayDetails(){let t=this.visibility+(0,l.QO)(this.id);"method"===this.memberType&&(t+=`(${(0,l.QO)(this.parameters.trim())})`,this.returnType&&(t+=" : "+(0,l.QO)(this.returnType))),t=t.trim();return{displayText:t,cssStyle:this.parseClassifier()}}parseMember(t){let e="";if("method"===this.memberType){const s=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(t);if(s){const t=s[1]?s[1].trim():"";if(p.includes(t)&&(this.visibility=t),this.id=s[2],this.parameters=s[3]?s[3].trim():"",e=s[4]?s[4].trim():"",this.returnType=s[5]?s[5].trim():"",""===e){const t=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(t)&&(e=t,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const s=t.length,i=t.substring(0,1),n=t.substring(s-1);p.includes(i)&&(this.visibility=i),/[$*]/.exec(n)&&(e=n),this.id=t.substring(""===this.visibility?0:1,""===e?s:s-1)}this.classifier=e,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();const s=`${this.visibility?"\\"+this.visibility:""}${(0,l.QO)(this.id)}${"method"===this.memberType?`(${(0,l.QO)(this.parameters)})${this.returnType?" : "+(0,l.QO)(this.returnType):""}`:""}`;this.text=s.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}},y="classId-",g=0,C=(0,o.K2)(t=>l.Y2.sanitizeText(t,(0,l.D7)()),"sanitizeText"),m=class{constructor(){this.relations=[],this.classes=new Map,this.styleClasses=new Map,this.notes=[],this.interfaces=[],this.namespaces=new Map,this.namespaceCounter=0,this.functions=[],this.lineType={LINE:0,DOTTED_LINE:1},this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},this.setupToolTips=(0,o.K2)(t=>{let e=(0,c.Ltv)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,c.Ltv)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,c.Ltv)(t).select("svg").selectAll("g.node").on("mouseover",t=>{const s=(0,c.Ltv)(t.currentTarget);if(null===s.attr("title"))return;const i=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(s.attr("title")).style("left",window.scrollX+i.left+(i.right-i.left)/2+"px").style("top",window.scrollY+i.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"
")),s.classed("hover",!0)}).on("mouseout",t=>{e.transition().duration(500).style("opacity",0);(0,c.Ltv)(t.currentTarget).classed("hover",!1)})},"setupToolTips"),this.direction="TB",this.setAccTitle=l.SV,this.getAccTitle=l.iN,this.setAccDescription=l.EI,this.getAccDescription=l.m7,this.setDiagramTitle=l.ke,this.getDiagramTitle=l.ab,this.getConfig=(0,o.K2)(()=>(0,l.D7)().class,"getConfig"),this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{(0,o.K2)(this,"ClassDB")}splitClassNameAndType(t){const e=l.Y2.sanitizeText(t,(0,l.D7)());let s="",i=e;if(e.indexOf("~")>0){const t=e.split("~");i=C(t[0]),s=C(t[1])}return{className:i,type:s}}setClassLabel(t,e){const s=l.Y2.sanitizeText(t,(0,l.D7)());e&&(e=C(e));const{className:i}=this.splitClassNameAndType(s);this.classes.get(i).label=e,this.classes.get(i).text=`${e}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(t){const e=l.Y2.sanitizeText(t,(0,l.D7)()),{className:s,type:i}=this.splitClassNameAndType(e);if(this.classes.has(s))return;const n=l.Y2.sanitizeText(s,(0,l.D7)());this.classes.set(n,{id:n,type:i,label:n,text:`${n}${i?`<${i}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:y+n+"-"+g}),g++}addInterface(t,e){const s={id:`interface${this.interfaces.length}`,label:t,classId:e};this.interfaces.push(s)}lookUpDomId(t){const e=l.Y2.sanitizeText(t,(0,l.D7)());if(this.classes.has(e))return this.classes.get(e).domId;throw new Error("Class not found: "+e)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",(0,l.IU)()}getClass(t){return this.classes.get(t)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(t){o.Rm.debug("Adding relation: "+JSON.stringify(t));const e=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];t.relation.type1!==this.relationType.LOLLIPOP||e.includes(t.relation.type2)?t.relation.type2!==this.relationType.LOLLIPOP||e.includes(t.relation.type1)?(this.addClass(t.id1),this.addClass(t.id2)):(this.addClass(t.id1),this.addInterface(t.id2,t.id1),t.id2="interface"+(this.interfaces.length-1)):(this.addClass(t.id2),this.addInterface(t.id1,t.id2),t.id1="interface"+(this.interfaces.length-1)),t.id1=this.splitClassNameAndType(t.id1).className,t.id2=this.splitClassNameAndType(t.id2).className,t.relationTitle1=l.Y2.sanitizeText(t.relationTitle1.trim(),(0,l.D7)()),t.relationTitle2=l.Y2.sanitizeText(t.relationTitle2.trim(),(0,l.D7)()),this.relations.push(t)}addAnnotation(t,e){const s=this.splitClassNameAndType(t).className;this.classes.get(s).annotations.push(e)}addMember(t,e){this.addClass(t);const s=this.splitClassNameAndType(t).className,i=this.classes.get(s);if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?i.annotations.push(C(t.substring(2,t.length-2))):t.indexOf(")")>0?i.methods.push(new A(t,"method")):t&&i.members.push(new A(t,"attribute"))}}addMembers(t,e){Array.isArray(e)&&(e.reverse(),e.forEach(e=>this.addMember(t,e)))}addNote(t,e){const s={id:`note${this.notes.length}`,class:e,text:t};this.notes.push(s)}cleanupLabel(t){return t.startsWith(":")&&(t=t.substring(1)),C(t.trim())}setCssClass(t,e){t.split(",").forEach(t=>{let s=t;/\d/.exec(t[0])&&(s=y+s);const i=this.classes.get(s);i&&(i.cssClasses+=" "+e)})}defineClass(t,e){for(const s of t){let t=this.styleClasses.get(s);void 0===t&&(t={id:s,styles:[],textStyles:[]},this.styleClasses.set(s,t)),e&&e.forEach(e=>{if(/color/.exec(e)){const s=e.replace("fill","bgFill");t.textStyles.push(s)}t.styles.push(e)}),this.classes.forEach(t=>{t.cssClasses.includes(s)&&t.styles.push(...e.flatMap(t=>t.split(",")))})}}setTooltip(t,e){t.split(",").forEach(t=>{void 0!==e&&(this.classes.get(t).tooltip=C(e))})}getTooltip(t,e){return e&&this.namespaces.has(e)?this.namespaces.get(e).classes.get(t).tooltip:this.classes.get(t).tooltip}setLink(t,e,s){const i=(0,l.D7)();t.split(",").forEach(t=>{let n=t;/\d/.exec(t[0])&&(n=y+n);const a=this.classes.get(n);a&&(a.link=u._K.formatUrl(e,i),"sandbox"===i.securityLevel?a.linkTarget="_top":a.linkTarget="string"==typeof s?C(s):"_blank")}),this.setCssClass(t,"clickable")}setClickEvent(t,e,s){t.split(",").forEach(t=>{this.setClickFunc(t,e,s),this.classes.get(t).haveCallback=!0}),this.setCssClass(t,"clickable")}setClickFunc(t,e,s){const i=l.Y2.sanitizeText(t,(0,l.D7)());if("loose"!==(0,l.D7)().securityLevel)return;if(void 0===e)return;const n=i;if(this.classes.has(n)){const t=this.lookUpDomId(n);let i=[];if("string"==typeof s){i=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t{const s=document.querySelector(`[id="${t}"]`);null!==s&&s.addEventListener("click",()=>{u._K.runFunc(e,...i)},!1)})}}bindFunctions(t){this.functions.forEach(e=>{e(t)})}getDirection(){return this.direction}setDirection(t){this.direction=t}addNamespace(t){this.namespaces.has(t)||(this.namespaces.set(t,{id:t,classes:new Map,children:{},domId:y+t+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(t){return this.namespaces.get(t)}getNamespaces(){return this.namespaces}addClassesToNamespace(t,e){if(this.namespaces.has(t))for(const s of e){const{className:e}=this.splitClassNameAndType(s);this.classes.get(e).parent=t,this.namespaces.get(t).classes.set(e,this.classes.get(e))}}setCssStyle(t,e){const s=this.classes.get(t);if(e&&s)for(const i of e)i.includes(",")?s.styles.push(...i.split(",")):s.styles.push(i)}getArrowMarker(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}getData(){const t=[],e=[],s=(0,l.D7)();for(const n of this.namespaces.keys()){const e=this.namespaces.get(n);if(e){const i={id:e.id,label:e.id,isGroup:!0,padding:s.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:s.look};t.push(i)}}for(const n of this.classes.keys()){const e=this.classes.get(n);if(e){const i=e;i.parentId=e.parent,i.look=s.look,t.push(i)}}let i=0;for(const n of this.notes){i++;const a={id:n.id,label:n.text,isGroup:!1,shape:"note",padding:s.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${s.themeVariables.noteBkgColor}`,`stroke: ${s.themeVariables.noteBorderColor}`],look:s.look};t.push(a);const r=this.classes.get(n.class)?.id??"";if(r){const t={id:`edgeNote${i}`,start:n.id,end:r,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:s.look};e.push(t)}}for(const n of this.interfaces){const e={id:n.id,label:n.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:s.look};t.push(e)}i=0;for(const n of this.relations){i++;const t={id:(0,u.rY)(n.id1,n.id2,{prefix:"id",counter:i}),start:n.id1,end:n.id2,type:"normal",label:n.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(n.relation.type1),arrowTypeEnd:this.getArrowMarker(n.relation.type2),startLabelRight:"none"===n.relationTitle1?"":n.relationTitle1,endLabelLeft:"none"===n.relationTitle2?"":n.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:n.style||"",pattern:1==n.relation.lineType?"dashed":"solid",look:s.look};e.push(t)}return{nodes:t,edges:e,other:{},config:s,direction:this.getDirection()}}},b=(0,o.K2)(t=>`g.classGroup text {\n fill: ${t.nodeBorder||t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n\n.labelBkg {\n background: ${t.mainBkg};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n ${(0,i.o)()}\n`,"getStyles"),E=(0,o.K2)((t,e="TB")=>{if(!t.doc)return e;let s=e;for(const i of t.doc)"dir"===i.stmt&&(s=i.value);return s},"getDir"),k={getClasses:(0,o.K2)(function(t,e){return e.db.getClasses()},"getClasses"),draw:(0,o.K2)(async function(t,e,s,i){o.Rm.info("REF0:"),o.Rm.info("Drawing class diagram (v3)",e);const{securityLevel:c,state:h,layout:d}=(0,l.D7)(),p=i.db.getData(),A=(0,n.A)(e,c);p.type=i.type,p.layoutAlgorithm=(0,r.q7)(d),p.nodeSpacing=h?.nodeSpacing||50,p.rankSpacing=h?.rankSpacing||50,p.markers=["aggregation","extension","composition","dependency","lollipop"],p.diagramId=e,await(0,r.XX)(p,A);u._K.insertTitle(A,"classDiagramTitleText",h?.titleTopMargin??25,i.db.getDiagramTitle()),(0,a.P)(A,8,"classDiagram",h?.useMaxWidth??!0)},"draw"),getDir:E}},89625:(t,e,s)=>{s.d(e,{A:()=>a});var i=s(40797),n=s(70451),a=(0,i.K2)((t,e)=>{let s;"sandbox"===e&&(s=(0,n.Ltv)("#i"+t));return("sandbox"===e?(0,n.Ltv)(s.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id="${t}"]`)},"getDiagramElement")}}]); \ No newline at end of file diff --git a/assets/js/17896441.0bf3733d.js b/assets/js/17896441.0bf3733d.js new file mode 100644 index 0000000..8fcc420 --- /dev/null +++ b/assets/js/17896441.0bf3733d.js @@ -0,0 +1,2 @@ +/*! For license information please see 17896441.0bf3733d.js.LICENSE.txt */ +(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[8401],{241:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=r(41917).A.Symbol},387:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={tocCollapsibleButton:"tocCollapsibleButton_dxRj",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_TSyC"}},1788:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(21312)),o=r(36513),s=r(30911),l=r(97481);e.default=function({editUrl:t}){return(0,i.jsxs)("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:o.ThemeClassNames.common.editThisPage,children:[(0,i.jsx)(s.IconEdit,{}),(0,i.jsx)(l.Typography,{variant:"body2",children:(0,i.jsx)(a.default,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})})]})}},1801:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(90565);const i=function(t,e){var r=e?(0,n.A)(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}},1804:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>x});r(96540);var n=r(34164),i=r(17559),a=r(60542),o=r(70331),s=r.n(o),l=r(1788),c=r.n(l),h=r(21312),u=r(36266),d=r(74848);function p({lastUpdatedAt:t}){const e=new Date(t),r=(0,u.i)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(e);return(0,d.jsx)(h.default,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,d.jsx)("b",{children:(0,d.jsx)("time",{dateTime:e.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function f({lastUpdatedBy:t}){return(0,d.jsx)(h.default,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,d.jsx)("b",{children:t})},children:" by {user}"})}function g({lastUpdatedAt:t,lastUpdatedBy:e}){return(0,d.jsxs)("span",{className:i.G.common.lastUpdated,children:[(0,d.jsx)(h.default,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,d.jsx)(p,{lastUpdatedAt:t}):"",byUser:e?(0,d.jsx)(f,{lastUpdatedBy:e}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const m={lastUpdated:"lastUpdated_JAkA"};function y({className:t,editUrl:e,lastUpdatedAt:r,lastUpdatedBy:i}){return(0,d.jsxs)("div",{className:(0,n.A)("row",t),children:[(0,d.jsx)("div",{className:"col",children:e&&(0,d.jsx)(c(),{editUrl:e})}),(0,d.jsx)("div",{className:(0,n.A)("col",m.lastUpdated),children:(r||i)&&(0,d.jsx)(g,{lastUpdatedAt:r,lastUpdatedBy:i})})]})}function x(){const{metadata:t}=(0,a.useDoc)(),{editUrl:e,lastUpdatedAt:r,lastUpdatedBy:o,tags:l}=t,c=l.length>0,h=!!(e||r||o);return c||h?(0,d.jsxs)("footer",{className:(0,n.A)(i.G.docs.docFooter,"docusaurus-mt-lg"),children:[c&&(0,d.jsx)("div",{className:(0,n.A)("row margin-top--sm",i.G.docs.docFooterTagsRow),children:(0,d.jsx)("div",{className:"col",children:(0,d.jsx)(s(),{tags:l})})}),h&&(0,d.jsx)(y,{className:(0,n.A)("margin-top--sm",i.G.docs.docFooterEditMetaRow),editUrl:e,lastUpdatedAt:r,lastUpdatedBy:o})]}):null}},2509:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={breadcrumbsContainer:"breadcrumbsContainer_RLvU"}},3219:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(72453),i=r(74886);const a=t=>{const{r:e,g:r,b:a}=i.A.parse(t),o=.2126*n.A.channel.toLinear(e)+.7152*n.A.channel.toLinear(r)+.0722*n.A.channel.toLinear(a);return n.A.lang.round(o)},o=t=>a(t)>=.5,s=t=>!o(t)},3767:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(24326),i=r(6832);const a=function(t){return(0,n.A)(function(e,r){var n=-1,a=r.length,o=a>1?r[a-1]:void 0,s=a>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&(0,i.A)(r[0],r[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++n{"use strict";r.d(e,{A:()=>n});const n=function(t){return function(e,r,n){for(var i=-1,a=Object(e),o=n(e),s=o.length;s--;){var l=o[t?s:++i];if(!1===r(a[l],l,a))break}return e}}()},5164:(t,e,r)=>{"use strict";r.d(e,{IU:()=>x,Jo:()=>L,T_:()=>w,g0:()=>O,jP:()=>C});var n=r(28698),i=r(5894),a=r(63245),o=r(32387),s=r(30092),l=r(13226),c=r(67633),h=r(40797),u=r(70451),d=r(29893),p=(0,h.K2)((t,e,r,n,i,a)=>{e.arrowTypeStart&&g(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&g(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),f={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},g=(0,h.K2)((t,e,r,n,i,a,o)=>{const s=f[r];if(!s)return void h.Rm.warn(`Unknown arrow type: ${r}`);const l=`${i}_${a}-${s.type}${"start"===e?"Start":"End"}`;if(o&&""!==o.trim()){const r=`${l}_${o.replace(/[^\dA-Za-z]/g,"_")}`;if(!document.getElementById(r)){const t=document.getElementById(l);if(t){const e=t.cloneNode(!0);e.id=r;e.querySelectorAll("path, circle, line").forEach(t=>{t.setAttribute("stroke",o),s.fill&&t.setAttribute("fill",o)}),t.parentNode?.appendChild(e)}}t.attr(`marker-${e}`,`url(${n}#${r})`)}else t.attr(`marker-${e}`,`url(${n}#${l})`)},"addEdgeMarker"),m=new Map,y=new Map,x=(0,h.K2)(()=>{m.clear(),y.clear()},"clear"),b=(0,h.K2)(t=>t?t.reduce((t,e)=>t+";"+e,""):"","getLabelStyles"),C=(0,h.K2)(async(t,e)=>{let r=(0,c._3)((0,c.D7)().flowchart.htmlLabels);const{labelStyles:n}=(0,o.GX)(e);e.labelStyle=n;const a=await(0,s.GZ)(t,e.label,{style:e.labelStyle,useHtmlLabels:r,addSvgBackground:!0,isNode:!1});h.Rm.info("abc82",e,e.labelType);const l=t.insert("g").attr("class","edgeLabel"),d=l.insert("g").attr("class","label").attr("data-id",e.id);d.node().appendChild(a);let p,f=a.getBBox();if(r){const t=a.children[0],e=(0,u.Ltv)(a);f=t.getBoundingClientRect(),e.attr("width",f.width),e.attr("height",f.height)}if(d.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),m.set(e.id,l),e.width=f.width,e.height=f.height,e.startLabelLeft){const r=await(0,i.DA)(e.startLabelLeft,b(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");p=a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),y.get(e.id)||y.set(e.id,{}),y.get(e.id).startLeft=n,k(p,e.startLabelLeft)}if(e.startLabelRight){const r=await(0,i.DA)(e.startLabelRight,b(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");p=n.node().appendChild(r),a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),y.get(e.id)||y.set(e.id,{}),y.get(e.id).startRight=n,k(p,e.startLabelRight)}if(e.endLabelLeft){const r=await(0,i.DA)(e.endLabelLeft,b(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");p=a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),n.node().appendChild(r),y.get(e.id)||y.set(e.id,{}),y.get(e.id).endLeft=n,k(p,e.endLabelLeft)}if(e.endLabelRight){const r=await(0,i.DA)(e.endLabelRight,b(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");p=a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),n.node().appendChild(r),y.get(e.id)||y.set(e.id,{}),y.get(e.id).endRight=n,k(p,e.endLabelRight)}return a},"insertEdgeLabel");function k(t,e){(0,c.D7)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}(0,h.K2)(k,"setTerminalWidth");var w=(0,h.K2)((t,e)=>{h.Rm.debug("Moving label abc88 ",t.id,t.label,m.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath;const n=(0,c.D7)(),{subGraphTitleTotalMargin:i}=(0,a.O)(n);if(t.label){const n=m.get(t.id);let a=t.x,o=t.y;if(r){const n=l._K.calcLabelPosition(r);h.Rm.debug("Moving label "+t.label+" from (",a,",",o,") to (",n.x,",",n.y,") abc88"),e.updatedPath&&(a=n.x,o=n.y)}n.attr("transform",`translate(${a}, ${o+i/2})`)}if(t.startLabelLeft){const e=y.get(t.id).startLeft;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.startLabelRight){const e=y.get(t.id).startRight;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelLeft){const e=y.get(t.id).endLeft;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelRight){const e=y.get(t.id).endRight;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}},"positionEdgeLabel"),_=(0,h.K2)((t,e)=>{const r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),o=t.width/2,s=t.height/2;return i>=o||a>=s},"outsideNode"),v=(0,h.K2)((t,e,r)=>{h.Rm.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(r)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,a=Math.abs(n-r.x),o=t.width/2;let s=r.xMath.abs(n-e.x)*l){let t=r.y{h.Rm.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(t=>{if(h.Rm.info("abc88 checking point",t,e),_(e,t)||i)h.Rm.warn("abc88 outside",t,n),n=t,i||r.push(t);else{const a=v(e,n,t);h.Rm.debug("abc88 inside",t,n,a),h.Rm.debug("abc88 intersection",a,e);let o=!1;r.forEach(t=>{o=o||t.x===a.x&&t.y===a.y}),r.some(t=>t.x===a.x&&t.y===a.y)?h.Rm.warn("abc88 no intersect",a,r):r.push(a),i=!0}}),h.Rm.debug("returning points",r),r},"cutPathAtIntersect");function T(t){const e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===o.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-o.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}(0,h.K2)(T,"extractCornerPoints");var A=(0,h.K2)(function(t,e,r){const n=e.x-t.x,i=e.y-t.y,a=r/Math.sqrt(n*n+i*i);return{x:e.x-a*n,y:e.y-a*i}},"findAdjacentPoint"),M=(0,h.K2)(function(t){const{cornerPointPositions:e}=T(t),r=[];for(let n=0;n10&&Math.abs(i.y-e.y)>=10){h.Rm.debug("Corner point fixing",Math.abs(i.x-e.x),Math.abs(i.y-e.y));const t=5;d=a.x===o.x?{x:l<0?o.x-t+u:o.x+t-u,y:c<0?o.y-u:o.y+u}:{x:l<0?o.x-u:o.x+u,y:c<0?o.y-t+u:o.y+t-u}}else h.Rm.debug("Corner point skipping fixing",Math.abs(i.x-e.x),Math.abs(i.y-e.y));r.push(d,s)}else r.push(t[n]);return r},"fixCorners"),B=(0,h.K2)((t,e,r)=>{const n=t-e-r,i=Math.floor(n/4);return`0 ${e} ${Array(i).fill("2 2").join(" ")} ${r}`},"generateDashArray"),L=(0,h.K2)(function(t,e,r,i,a,s,f,g=!1){const{handDrawnSeed:m}=(0,c.D7)();let y=e.points,x=!1;const b=a;var C=s;const k=[];for(const n in e.cssCompiledStyles)(0,o.KX)(n)||k.push(e.cssCompiledStyles[n]);h.Rm.debug("UIO intersect check",e.points,C.x,b.x),C.intersect&&b.intersect&&!g&&(y=y.slice(1,e.points.length-1),y.unshift(b.intersect(y[0])),h.Rm.debug("Last point UIO",e.start,"--\x3e",e.end,y[y.length-1],C,C.intersect(y[y.length-1])),y.push(C.intersect(y[y.length-1])));const w=btoa(JSON.stringify(y));e.toCluster&&(h.Rm.info("to cluster abc88",r.get(e.toCluster)),y=S(e.points,r.get(e.toCluster).node),x=!0),e.fromCluster&&(h.Rm.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(y,null,2)),y=S(y.reverse(),r.get(e.fromCluster).node).reverse(),x=!0);let _=y.filter(t=>!Number.isNaN(t.y));_=M(_);let v=u.qrM;switch(v=u.lUB,e.curve){case"linear":v=u.lUB;break;case"basis":default:v=u.qrM;break;case"cardinal":v=u.y8u;break;case"bumpX":v=u.Wi0;break;case"bumpY":v=u.PGM;break;case"catmullRom":v=u.oDi;break;case"monotoneX":v=u.nVG;break;case"monotoneY":v=u.uxU;break;case"natural":v=u.Xf2;break;case"step":v=u.GZz;break;case"stepAfter":v=u.UPb;break;case"stepBefore":v=u.dyv}const{x:T,y:A}=(0,n.RI)(e),L=(0,u.n8j)().x(T).y(A).curve(v);let $,D;switch(e.thickness){case"normal":default:$="edge-thickness-normal";break;case"thick":$="edge-thickness-thick";break;case"invisible":$="edge-thickness-invisible"}switch(e.pattern){case"solid":default:$+=" edge-pattern-solid";break;case"dotted":$+=" edge-pattern-dotted";break;case"dashed":$+=" edge-pattern-dashed"}let N="rounded"===e.curve?F(E(_,e),5):L(_);const O=Array.isArray(e.style)?e.style:[e.style];let j=O.find(t=>t?.startsWith("stroke:")),I=!1;if("handDrawn"===e.look){const r=d.A.svg(t);Object.assign([],_);const n=r.path(N,{roughness:.3,seed:m});$+=" transition",D=(0,u.Ltv)(n).select("path").attr("id",e.id).attr("class"," "+$+(e.classes?" "+e.classes:"")).attr("style",O?O.reduce((t,e)=>t+";"+e,""):"");let i=D.attr("d");D.attr("d",i),t.node().appendChild(D.node())}else{const r=k.join(";"),i=O?O.reduce((t,e)=>t+e+";",""):"";let a="";e.animate&&(a=" edge-animation-fast"),e.animation&&(a=" edge-animation-"+e.animation);const o=(r?r+";"+i+";":i)+";"+(O?O.reduce((t,e)=>t+";"+e,""):"");D=t.append("path").attr("d",N).attr("id",e.id).attr("class"," "+$+(e.classes?" "+e.classes:"")+(a??"")).attr("style",o),j=o.match(/stroke:([^;]+)/)?.[1],I=!0===e.animate||!!e.animation||r.includes("animation");const s=D.node(),l="function"==typeof s.getTotalLength?s.getTotalLength():0,c=n.Nq[e.arrowTypeStart]||0,h=n.Nq[e.arrowTypeEnd]||0;if("neo"===e.look&&!I){const t=`stroke-dasharray: ${"dotted"===e.pattern||"dashed"===e.pattern?B(l,c,h):`0 ${c} ${l-c-h} ${h}`}; stroke-dashoffset: 0;`;D.attr("style",t+D.attr("style"))}}D.attr("data-edge",!0),D.attr("data-et","edge"),D.attr("data-id",e.id),D.attr("data-points",w),e.showPoints&&_.forEach(e=>{t.append("circle").style("stroke","red").style("fill","red").attr("r",1).attr("cx",e.x).attr("cy",e.y)});let R="";((0,c.D7)().flowchart.arrowMarkerAbsolute||(0,c.D7)().state.arrowMarkerAbsolute)&&(R=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,R=R.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),h.Rm.info("arrowTypeStart",e.arrowTypeStart),h.Rm.info("arrowTypeEnd",e.arrowTypeEnd),p(D,e,R,f,i,j);const K=y[Math.floor(y.length/2)];l._K.isLabelCoordinateInPath(K,D.attr("d"))||(x=!0);let P={};return x&&(P.updatedPath=y),P.originalPath=e.points,P},"insertEdge");function F(t,e){if(t.length<2)return"";let r="";const n=t.length,i=1e-5;for(let a=0;a({...t}));if(t.length>=2&&n.hq[e.arrowTypeStart]){const i=n.hq[e.arrowTypeStart],a=t[0],o=t[1],{angle:s}=$(a,o),l=i*Math.cos(s),c=i*Math.sin(s);r[0].x=a.x+l,r[0].y=a.y+c}const i=t.length;if(i>=2&&n.hq[e.arrowTypeEnd]){const a=n.hq[e.arrowTypeEnd],o=t[i-1],s=t[i-2],{angle:l}=$(s,o),c=a*Math.cos(l),h=a*Math.sin(l);r[i-1].x=o.x-c,r[i-1].y=o.y-h}return r}(0,h.K2)(F,"generateRoundedPath"),(0,h.K2)($,"calculateDeltaAndAngle"),(0,h.K2)(E,"applyMarkerOffsetsToPoints");var D=(0,h.K2)((t,e,r,n)=>{e.forEach(e=>{N[e](t,r,n)})},"insertMarkers"),N={extension:(0,h.K2)((t,e,r)=>{h.Rm.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),composition:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),aggregation:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),dependency:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),lollipop:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),point:(0,h.K2)((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),circle:(0,h.K2)((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),cross:(0,h.K2)((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),barb:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),only_one:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),zero_or_one:(0,h.K2)((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");const i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),one_or_more:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),zero_or_more:(0,h.K2)((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");const i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),requirement_arrow:(0,h.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d","M0,0\n L20,10\n M20,10\n L0,20")},"requirement_arrow"),requirement_contains:(0,h.K2)((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains")},O=D},5254:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},5894:(t,e,r)=>{"use strict";r.d(e,{DA:()=>k,IU:()=>L,U:()=>B,U7:()=>Te,U_:()=>Me,Zk:()=>u,aP:()=>_e,gh:()=>Ae,lC:()=>p,on:()=>Se});var n=r(63245),i=r(32387),a=r(30092),o=r(13226),s=r(67633),l=r(40797),c=r(70451),h=r(29893),u=(0,l.K2)(async(t,e,r)=>{let n;const i=e.useHtmlLabels||(0,s._3)((0,s.D7)()?.htmlLabels);n=r||"node default";const h=t.insert("g").attr("class",n).attr("id",e.domId||e.id),u=h.insert("g").attr("class","label").attr("style",(0,o.KL)(e.labelStyle));let d;d=void 0===e.label?"":"string"==typeof e.label?e.label:e.label[0];const p=await(0,a.GZ)(u,(0,s.jZ)((0,o.Sm)(d),(0,s.D7)()),{useHtmlLabels:i,width:e.width||(0,s.D7)().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img});let f=p.getBBox();const g=(e?.padding??0)/2;if(i){const t=p.children[0],e=(0,c.Ltv)(p),r=t.getElementsByTagName("img");if(r){const t=""===d.replace(/]*>/g,"").trim();await Promise.all([...r].map(e=>new Promise(r=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,s.D7)().fontSize?(0,s.D7)().fontSize:window.getComputedStyle(document.body).fontSize,r=5,[n=s.UI.fontSize]=(0,o.I5)(t),i=n*r+"px";e.style.minWidth=i,e.style.maxWidth=i}else e.style.width="100%";r(e)}(0,l.K2)(n,"setupImage"),setTimeout(()=>{e.complete&&n()}),e.addEventListener("error",n),e.addEventListener("load",n)})))}f=t.getBoundingClientRect(),e.attr("width",f.width),e.attr("height",f.height)}return i?u.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"):u.attr("transform","translate(0, "+-f.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:h,bbox:f,halfPadding:g,label:u}},"labelHelper"),d=(0,l.K2)(async(t,e,r)=>{const n=r.useHtmlLabels||(0,s._3)((0,s.D7)()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),l=await(0,a.GZ)(i,(0,s.jZ)((0,o.Sm)(e),(0,s.D7)()),{useHtmlLabels:n,width:r.width||(0,s.D7)()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img});let h=l.getBBox();const u=r.padding/2;if((0,s._3)((0,s.D7)()?.flowchart?.htmlLabels)){const t=l.children[0],e=(0,c.Ltv)(l);h=t.getBoundingClientRect(),e.attr("width",h.width),e.attr("height",h.height)}return n?i.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):i.attr("transform","translate(0, "+-h.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:h,halfPadding:u,label:i}},"insertLabel"),p=(0,l.K2)((t,e)=>{const r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),f=(0,l.K2)((t,e)=>("handDrawn"===t.look?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");function g(t){const e=t.map((t,e)=>`${0===e?"M":"L"}${t.x},${t.y}`);return e.push("Z"),e.join(" ")}function m(t,e,r,n,i,a){const o=[],s=r-t,l=n-e,c=s/a,h=2*Math.PI/c,u=e+l/2;for(let d=0;d<=50;d++){const e=t+d/50*s,r=u+i*Math.sin(h*(e-t));o.push({x:e,y:r})}return o}function y(t,e,r,n,i,a){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;c{var r,n,i=t.x,a=t.y,o=e.x-i,s=e.y-a,l=t.width/2,c=t.height/2;return Math.abs(s)*l>Math.abs(o)*c?(s<0&&(c=-c),r=0===s?0:c*o/s,n=c):(o<0&&(l=-l),r=l,n=0===o?0:l*s/o),{x:i+r,y:a+n}},"intersectRect");function b(t,e){e&&t.attr("style",e)}async function C(t){const e=(0,c.Ltv)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=(0,s.D7)();let i=t.label;t.label&&(0,s.Wi)(t.label)&&(i=await(0,s.dj)(t.label.replace(s.Y2.lineBreakRegex,"\n"),n));const a='"+i+"";return r.html((0,s.jZ)(a,n)),b(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}(0,l.K2)(b,"applyStyle"),(0,l.K2)(C,"addHtmlLabel");var k=(0,l.K2)(async(t,e,r,n)=>{let i=t||"";if("object"==typeof i&&(i=i[0]),(0,s._3)((0,s.D7)().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
"),l.Rm.info("vertexText"+i);const t={isNode:n,label:(0,o.Sm)(i).replace(/fa[blrs]?:fa-[\w-]+/g,t=>``),labelStyle:e?e.replace("fill:","color:"):e};return await C(t)}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let n=[];n="string"==typeof i?i.split(/\\n|\n|/gi):Array.isArray(i)?i:[];for(const e of n){const n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),r?n.setAttribute("class","title-row"):n.setAttribute("class","row"),n.textContent=e.trim(),t.appendChild(n)}return t}},"createLabel"),w=(0,l.K2)((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD"),_=(0,l.K2)(async(t,e)=>{l.Rm.info("Creating subgraph rect for ",e.id,e);const r=(0,s.D7)(),{themeVariables:o,handDrawnSeed:u}=r,{clusterBkg:d,clusterBorder:p}=o,{labelStyles:f,nodeStyles:g,borderStyles:m,backgroundStyles:y}=(0,i.GX)(e),b=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),C=(0,s._3)(r.flowchart.htmlLabels),k=b.insert("g").attr("class","cluster-label "),_=await(0,a.GZ)(k,e.label,{style:e.labelStyle,useHtmlLabels:C,isNode:!0});let v=_.getBBox();if((0,s._3)(r.flowchart.htmlLabels)){const t=_.children[0],e=(0,c.Ltv)(_);v=t.getBoundingClientRect(),e.attr("width",v.width),e.attr("height",v.height)}const S=e.width<=v.width+e.padding?v.width+e.padding:e.width;e.width<=v.width+e.padding?e.diff=(S-e.width)/2-e.padding:e.diff=-e.padding;const T=e.height,A=e.x-S/2,M=e.y-T/2;let B;if(l.Rm.trace("Data ",e,JSON.stringify(e)),"handDrawn"===e.look){const t=h.A.svg(b),r=(0,i.Fr)(e,{roughness:.7,fill:d,stroke:p,fillWeight:3,seed:u}),n=t.path(w(A,M,S,T,0),r);B=b.insert(()=>(l.Rm.debug("Rough node insert CXC",n),n),":first-child"),B.select("path:nth-child(2)").attr("style",m.join(";")),B.select("path").attr("style",y.join(";").replace("fill","stroke"))}else B=b.insert("rect",":first-child"),B.attr("style",g).attr("rx",e.rx).attr("ry",e.ry).attr("x",A).attr("y",M).attr("width",S).attr("height",T);const{subGraphTitleTopMargin:L}=(0,n.O)(r);if(k.attr("transform",`translate(${e.x-v.width/2}, ${e.y-e.height/2+L})`),f){const t=k.select("span");t&&t.attr("style",f)}const F=B.node().getBBox();return e.offsetX=0,e.width=F.width,e.height=F.height,e.offsetY=v.height-e.padding/2,e.intersect=function(t){return x(e,t)},{cluster:b,labelBBox:v}},"rect"),v=(0,l.K2)((t,e)=>{const r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");const o=n.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return x(e,t)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),S=(0,l.K2)(async(t,e)=>{const r=(0,s.D7)(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:o,compositeTitleBackground:l,nodeBorder:u}=n,d=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),p=d.insert("g",":first-child"),f=d.insert("g").attr("class","cluster-label");let g=d.append("rect");const m=f.node().appendChild(await k(e.label,e.labelStyle,void 0,!0));let y=m.getBBox();if((0,s._3)(r.flowchart.htmlLabels)){const t=m.children[0],e=(0,c.Ltv)(m);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}const b=0*e.padding,C=b/2,_=(e.width<=y.width+e.padding?y.width+e.padding:e.width)+b;e.width<=y.width+e.padding?e.diff=(_-e.width)/2-e.padding:e.diff=-e.padding;const v=e.height+b,S=e.height+b-y.height-6,T=e.x-_/2,A=e.y-v/2;e.width=_;const M=e.y-e.height/2-C+y.height+2;let B;if("handDrawn"===e.look){const t=e.cssClasses.includes("statediagram-cluster-alt"),r=h.A.svg(d),n=e.rx||e.ry?r.path(w(T,A,_,v,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):r.rectangle(T,A,_,v,{seed:i});B=d.insert(()=>n,":first-child");const s=r.rectangle(T,M,_,S,{fill:t?a:o,fillStyle:t?"hachure":"solid",stroke:u,seed:i});B=d.insert(()=>n,":first-child"),g=d.insert(()=>s)}else{B=p.insert("rect",":first-child");const t="outer";B.attr("class",t).attr("x",T).attr("y",A).attr("width",_).attr("height",v).attr("data-look",e.look),g.attr("class","inner").attr("x",T).attr("y",M).attr("width",_).attr("height",S)}f.attr("transform",`translate(${e.x-y.width/2}, ${A+1-((0,s._3)(r.flowchart.htmlLabels)?0:3)})`);const L=B.node().getBBox();return e.height=L.height,e.offsetX=0,e.offsetY=y.height-e.padding/2,e.labelBBox=y,e.intersect=function(t){return x(e,t)},{cluster:d,labelBBox:y}},"roundedWithTitle"),T=(0,l.K2)(async(t,e)=>{l.Rm.info("Creating subgraph rect for ",e.id,e);const r=(0,s.D7)(),{themeVariables:o,handDrawnSeed:u}=r,{clusterBkg:d,clusterBorder:p}=o,{labelStyles:f,nodeStyles:g,borderStyles:m,backgroundStyles:y}=(0,i.GX)(e),b=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),C=(0,s._3)(r.flowchart.htmlLabels),k=b.insert("g").attr("class","cluster-label "),_=await(0,a.GZ)(k,e.label,{style:e.labelStyle,useHtmlLabels:C,isNode:!0,width:e.width});let v=_.getBBox();if((0,s._3)(r.flowchart.htmlLabels)){const t=_.children[0],e=(0,c.Ltv)(_);v=t.getBoundingClientRect(),e.attr("width",v.width),e.attr("height",v.height)}const S=e.width<=v.width+e.padding?v.width+e.padding:e.width;e.width<=v.width+e.padding?e.diff=(S-e.width)/2-e.padding:e.diff=-e.padding;const T=e.height,A=e.x-S/2,M=e.y-T/2;let B;if(l.Rm.trace("Data ",e,JSON.stringify(e)),"handDrawn"===e.look){const t=h.A.svg(b),r=(0,i.Fr)(e,{roughness:.7,fill:d,stroke:p,fillWeight:4,seed:u}),n=t.path(w(A,M,S,T,e.rx),r);B=b.insert(()=>(l.Rm.debug("Rough node insert CXC",n),n),":first-child"),B.select("path:nth-child(2)").attr("style",m.join(";")),B.select("path").attr("style",y.join(";").replace("fill","stroke"))}else B=b.insert("rect",":first-child"),B.attr("style",g).attr("rx",e.rx).attr("ry",e.ry).attr("x",A).attr("y",M).attr("width",S).attr("height",T);const{subGraphTitleTopMargin:L}=(0,n.O)(r);if(k.attr("transform",`translate(${e.x-v.width/2}, ${e.y-e.height/2+L})`),f){const t=k.select("span");t&&t.attr("style",f)}const F=B.node().getBBox();return e.offsetX=0,e.width=F.width,e.height=F.height,e.offsetY=v.height-e.padding/2,e.intersect=function(t){return x(e,t)},{cluster:b,labelBBox:v}},"kanbanSection"),A={rect:_,squareRect:_,roundedWithTitle:S,noteGroup:v,divider:(0,l.K2)((t,e)=>{const r=(0,s.D7)(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,o=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=o.insert("g",":first-child"),c=0*e.padding,u=e.width+c;e.diff=-e.padding;const d=e.height+c,p=e.x-u/2,f=e.y-d/2;let g;if(e.width=u,"handDrawn"===e.look){const t=h.A.svg(o).rectangle(p,f,u,d,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});g=o.insert(()=>t,":first-child")}else{g=l.insert("rect",":first-child");const t="divider";g.attr("class",t).attr("x",p).attr("y",f).attr("width",u).attr("height",d).attr("data-look",e.look)}const m=g.node().getBBox();return e.height=m.height,e.offsetX=0,e.offsetY=0,e.intersect=function(t){return x(e,t)},{cluster:o,labelBBox:{}}},"divider"),kanbanSection:T},M=new Map,B=(0,l.K2)(async(t,e)=>{const r=e.shape||"rect",n=await A[r](t,e);return M.set(e.id,n),n},"insertCluster"),L=(0,l.K2)(()=>{M=new Map},"clear");function F(t,e){return t.intersect(e)}(0,l.K2)(F,"intersectNode");var $=F;function E(t,e,r,n){var i=t.x,a=t.y,o=i-n.x,s=a-n.y,l=Math.sqrt(e*e*s*s+r*r*o*o),c=Math.abs(e*r*o/l);n.x0}(0,l.K2)(j,"intersectLine"),(0,l.K2)(I,"sameSign");var R=j;function K(t,e,r){let n=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach(function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)}):(o=Math.min(o,e.x),s=Math.min(s,e.y));let l=n-t.width/2-o,c=i-t.height/2-s;for(let h=0;h1&&a.sort(function(t,e){let n=t.x-r.x,i=t.y-r.y,a=Math.sqrt(n*n+i*i),o=e.x-r.x,s=e.y-r.y,l=Math.sqrt(o*o+s*s);return ag,":first-child");return m.attr("class","anchor").attr("style",(0,o.KL)(c)),p(e,m),e.intersect=function(t){return l.Rm.info("Circle intersect",e,1,t),P.circle(e,1,t)},s}function q(t,e,r,n,i,a,o){const s=(t+r)/2,l=(e+n)/2,c=Math.atan2(n-e,r-t),h=(r-t)/2/i,u=(n-e)/2/a,d=Math.sqrt(h**2+u**2);if(d>1)throw new Error("The given radii are too small to create an arc between the points.");const p=Math.sqrt(1-d**2),f=s+p*a*Math.sin(c)*(o?-1:1),g=l-p*i*Math.cos(c)*(o?-1:1),m=Math.atan2((e-g)/a,(t-f)/i);let y=Math.atan2((n-g)/a,(r-f)/i)-m;o&&y<0&&(y+=2*Math.PI),!o&&y>0&&(y-=2*Math.PI);const x=[];for(let b=0;b<20;b++){const t=m+b/19*y,e=f+i*Math.cos(t),r=g+a*Math.sin(t);x.push({x:e,y:r})}return x}async function W(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=o.width+e.padding+20,l=o.height+e.padding,c=l/2,d=c/(2.5+l/50),{cssStyles:m}=e,y=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...q(-s/2,-l/2,-s/2,l/2,d,c,!1),{x:s/2,y:l/2},...q(s/2,l/2,s/2,-l/2,d,c,!0)],x=h.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=g(y),k=x.path(C,b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),m&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),w.attr("transform",`translate(${d/2}, 0)`),p(e,w),e.intersect=function(t){return P.polygon(e,y,t)},a}function H(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(t){return t.x+","+t.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}async function U(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=o.height+e.padding,l=o.width+e.padding+12,c=-s,d=[{x:12,y:c},{x:l,y:c},{x:l,y:0},{x:0,y:0},{x:0,y:c+12},{x:12,y:c}];let m;const{cssStyles:y}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=g(d),o=t.path(n,r);m=a.insert(()=>o,":first-child").attr("transform",`translate(${-l/2}, ${s/2})`),y&&m.attr("style",y)}else m=H(a,l,s,d);return n&&m.attr("style",n),p(e,m),e.intersect=function(t){return P.polygon(e,d,t)},a}function G(t,e){const{nodeStyles:r}=(0,i.GX)(e);e.label="";const n=t.insert("g").attr("class",f(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,o=Math.max(28,e.width??0),s=[{x:0,y:o/2},{x:o/2,y:0},{x:0,y:-o/2},{x:-o/2,y:0}],l=h.A.svg(n),c=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(c.roughness=0,c.fillStyle="solid");const u=g(s),d=l.path(u,c),p=n.insert(()=>d,":first-child");return a&&"handDrawn"!==e.look&&p.selectAll("path").attr("style",a),r&&"handDrawn"!==e.look&&p.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(t){return P.polygon(e,s,t)},n}async function Y(t,e,r){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;const{shapeSvg:s,bbox:c,halfPadding:d}=await u(t,e,f(e)),g=r?.padding??d,m=c.width/2+g;let y;const{cssStyles:x}=e;if("handDrawn"===e.look){const t=h.A.svg(s),r=(0,i.Fr)(e,{}),n=t.circle(0,0,2*m,r);y=s.insert(()=>n,":first-child"),y.attr("class","basic label-container").attr("style",(0,o.KL)(x))}else y=s.insert("circle",":first-child").attr("class","basic label-container").attr("style",a).attr("r",m).attr("cx",0).attr("cy",0);return p(e,y),e.calcIntersect=function(t,e){const r=t.width/2;return P.circle(t,r,e)},e.intersect=function(t){return l.Rm.info("Circle intersect",e,m,t),P.circle(e,m,t)},s}function X(t){const e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=2*t;return`M ${-n/2*e},${n/2*r} L ${n/2*e},${-n/2*r}\n M ${n/2*e},${n/2*r} L ${-n/2*e},${-n/2*r}`}function V(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r,e.label="";const a=t.insert("g").attr("class",f(e)).attr("id",e.domId??e.id),o=Math.max(30,e?.width??0),{cssStyles:s}=e,c=h.A.svg(a),u=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(u.roughness=0,u.fillStyle="solid");const d=c.circle(0,0,2*o,u),g=X(o),m=c.path(g,u),y=a.insert(()=>d,":first-child");return y.insert(()=>m),s&&"handDrawn"!==e.look&&y.selectAll("path").attr("style",s),n&&"handDrawn"!==e.look&&y.selectAll("path").attr("style",n),p(e,y),e.intersect=function(t){l.Rm.info("crossedCircle intersect",e,{radius:o,point:t});return P.circle(e,o,t)},a}function Z(t,e,r,n=100,i=0,a=180){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;cv,":first-child").attr("stroke-opacity",0),S.insert(()=>w,":first-child"),S.attr("class","text"),m&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${d}, 0)`),s.attr("transform",`translate(${-l/2+d-(o.x-(o.left??0))},${-c/2+(e.padding??0)/2-(o.y-(o.top??0))})`),p(e,S),e.intersect=function(t){return P.polygon(e,x,t)},a}function J(t,e,r,n=100,i=0,a=180){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;cv,":first-child").attr("stroke-opacity",0),S.insert(()=>w,":first-child"),S.attr("class","text"),m&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${-d}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(o.x-(o.left??0))},${-c/2+(e.padding??0)/2-(o.y-(o.top??0))})`),p(e,S),e.intersect=function(t){return P.polygon(e,x,t)},a}function et(t,e,r,n=100,i=0,a=180){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;cA,":first-child").attr("stroke-opacity",0),M.insert(()=>_,":first-child"),M.insert(()=>S,":first-child"),M.attr("class","text"),m&&"handDrawn"!==e.look&&M.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&M.selectAll("path").attr("style",n),M.attr("transform",`translate(${d-d/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(o.x-(o.left??0))},${-c/2+(e.padding??0)/2-(o.y-(o.top??0))})`),p(e,M),e.intersect=function(t){return P.polygon(e,b,t)},a}async function nt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(80,1.25*(o.width+2*(e.padding??0)),e?.width??0),l=Math.max(20,o.height+2*(e.padding??0),e?.height??0),c=l/2,{cssStyles:d}=e,m=h.A.svg(a),x=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(x.roughness=0,x.fillStyle="solid");const b=s-c,C=l/4,k=[{x:b,y:0},{x:C,y:0},{x:0,y:l/2},{x:C,y:l},{x:b,y:l},...y(-b,-l/2,c,50,270,90)],w=g(k),_=m.path(w,x),v=a.insert(()=>_,":first-child");return v.attr("class","basic label-container"),d&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",d),n&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",n),v.attr("transform",`translate(${-s/2}, ${-l/2})`),p(e,v),e.intersect=function(t){return P.polygon(e,k,t)},a}(0,l.K2)(z,"anchor"),(0,l.K2)(q,"generateArcPoints"),(0,l.K2)(W,"bowTieRect"),(0,l.K2)(H,"insertPolygonShape"),(0,l.K2)(U,"card"),(0,l.K2)(G,"choice"),(0,l.K2)(Y,"circle"),(0,l.K2)(X,"createLine"),(0,l.K2)(V,"crossedCircle"),(0,l.K2)(Z,"generateCirclePoints"),(0,l.K2)(Q,"curlyBraceLeft"),(0,l.K2)(J,"generateCirclePoints"),(0,l.K2)(tt,"curlyBraceRight"),(0,l.K2)(et,"generateCirclePoints"),(0,l.K2)(rt,"curlyBraces"),(0,l.K2)(nt,"curvedTrapezoid");var it=(0,l.K2)((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n].join(" "),"createCylinderPathD"),at=(0,l.K2)((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n].join(" "),"createOuterCylinderPathD"),ot=(0,l.K2)((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");async function st(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l}=await u(t,e,f(e)),c=Math.max(s.width+e.padding,e.width??0),d=c/2,g=d/(2.5+c/50),m=Math.max(s.height+g+e.padding,e.height??0);let y;const{cssStyles:x}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=at(0,0,c,m,d,g),n=ot(0,g,c,m,d,g),o=t.path(r,(0,i.Fr)(e,{})),s=t.path(n,(0,i.Fr)(e,{fill:"none"}));y=a.insert(()=>s,":first-child"),y=a.insert(()=>o,":first-child"),y.attr("class","basic label-container"),x&&y.attr("style",x)}else{const t=it(0,0,c,m,d,g);y=a.insert("path",":first-child").attr("d",t).attr("class","basic label-container").attr("style",(0,o.KL)(x)).attr("style",n)}return y.attr("label-offset-y",g),y.attr("transform",`translate(${-c/2}, ${-(m/2+g)})`),p(e,y),l.attr("transform",`translate(${-s.width/2-(s.x-(s.left??0))}, ${-s.height/2+(e.padding??0)/1.5-(s.y-(s.top??0))})`),e.intersect=function(t){const r=P.rect(e,t),n=r.x-(e.x??0);if(0!=d&&(Math.abs(n)<(e.width??0)/2||Math.abs(n)==(e.width??0)/2&&Math.abs(r.y-(e.y??0))>(e.height??0)/2-g)){let i=g*g*(1-n*n/(d*d));i>0&&(i=Math.sqrt(i)),i=g-i,t.y-(e.y??0)>0&&(i=-i),r.y+=i}return r},a}async function lt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=o.width+e.padding,c=o.height+e.padding,d=.2*c,g=-l/2,m=-c/2-d/2,{cssStyles:y}=e,x=h.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:g,y:m+d},{x:-g,y:m+d},{x:-g,y:-m},{x:g,y:-m},{x:g,y:m},{x:-g,y:m},{x:-g,y:m+d}],k=x.polygon(C.map(t=>[t.x,t.y]),b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),s.attr("transform",`translate(${g+(e.padding??0)/2-(o.x-(o.left??0))}, ${m+d+(e.padding??0)/2-(o.y-(o.top??0))})`),p(e,w),e.intersect=function(t){return P.rect(e,t)},a}async function ct(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,halfPadding:c}=await u(t,e,f(e)),d=s.width/2+c+5,g=s.width/2+c;let m;const{cssStyles:y}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{roughness:.2,strokeWidth:2.5}),n=(0,i.Fr)(e,{roughness:.2,strokeWidth:1.5}),s=t.circle(0,0,2*d,r),l=t.circle(0,0,2*g,n);m=a.insert("g",":first-child"),m.attr("class",(0,o.KL)(e.cssClasses)).attr("style",(0,o.KL)(y)),m.node()?.appendChild(s),m.node()?.appendChild(l)}else{m=a.insert("g",":first-child");const t=m.insert("circle",":first-child"),e=m.insert("circle");m.attr("class","basic label-container").attr("style",n),t.attr("class","outer-circle").attr("style",n).attr("r",d).attr("cx",0).attr("cy",0),e.attr("class","inner-circle").attr("style",n).attr("r",g).attr("cx",0).attr("cy",0)}return p(e,m),e.intersect=function(t){return l.Rm.info("DoubleCircle intersect",e,d,t),P.circle(e,d,t)},a}function ht(t,e,{config:{themeVariables:r}}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.label="",e.labelStyle=n;const o=t.insert("g").attr("class",f(e)).attr("id",e.domId??e.id),{cssStyles:s}=e,c=h.A.svg(o),{nodeBorder:u}=r,d=(0,i.Fr)(e,{fillStyle:"solid"});"handDrawn"!==e.look&&(d.roughness=0);const g=c.circle(0,0,14,d),m=o.insert(()=>g,":first-child");return m.selectAll("path").attr("style",`fill: ${u} !important;`),s&&s.length>0&&"handDrawn"!==e.look&&m.selectAll("path").attr("style",s),a&&"handDrawn"!==e.look&&m.selectAll("path").attr("style",a),p(e,m),e.intersect=function(t){l.Rm.info("filledCircle intersect",e,{radius:7,point:t});return P.circle(e,7,t)},o}async function ut(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),c=o.width+(e.padding??0),d=c+o.height,m=c+o.height,y=[{x:0,y:-d},{x:m,y:-d},{x:m/2,y:0}],{cssStyles:x}=e,b=h.A.svg(a),C=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=g(y),w=b.path(k,C),_=a.insert(()=>w,":first-child").attr("transform",`translate(${-d/2}, ${d/2})`);return x&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",x),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),e.width=c,e.height=d,p(e,_),s.attr("transform",`translate(${-o.width/2-(o.x-(o.left??0))}, ${-d/2+(e.padding??0)/2+(o.y-(o.top??0))})`),e.intersect=function(t){return l.Rm.info("Triangle intersect",e,y,t),P.polygon(e,y,t)},a}function dt(t,e,{dir:r,config:{state:n,themeVariables:a}}){const{nodeStyles:o}=(0,i.GX)(e);e.label="";const s=t.insert("g").attr("class",f(e)).attr("id",e.domId??e.id),{cssStyles:l}=e;let c=Math.max(70,e?.width??0),u=Math.max(10,e?.height??0);"LR"===r&&(c=Math.max(10,e?.width??0),u=Math.max(70,e?.height??0));const d=-1*c/2,g=-1*u/2,m=h.A.svg(s),y=(0,i.Fr)(e,{stroke:a.lineColor,fill:a.lineColor});"handDrawn"!==e.look&&(y.roughness=0,y.fillStyle="solid");const x=m.rectangle(d,g,c,u,y),b=s.insert(()=>x,":first-child");l&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",l),o&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",o),p(e,b);const C=n?.padding??0;return e.width&&e.height&&(e.width+=C/2||0,e.height+=C/2||0),e.intersect=function(t){return P.rect(e,t)},s}async function pt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(80,o.width+2*(e.padding??0),e?.width??0),c=Math.max(50,o.height+2*(e.padding??0),e?.height??0),d=c/2,{cssStyles:m}=e,x=h.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:-s/2,y:-c/2},{x:s/2-d,y:-c/2},...y(-s/2+d,0,d,50,90,270),{x:s/2-d,y:c/2},{x:-s/2,y:c/2}],k=g(C),w=x.path(k,b),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container"),m&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",m),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),p(e,_),e.intersect=function(t){l.Rm.info("Pill intersect",e,{radius:d,point:t});return P.polygon(e,C,t)},a}async function ft(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=o.height+(e.padding??0),l=o.width+2.5*(e.padding??0),{cssStyles:c}=e,d=h.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");let y=l/2;y+=y/6;const x=s/2,b=y-x/2,C=[{x:-b,y:-x},{x:0,y:-x},{x:b,y:-x},{x:y,y:0},{x:b,y:x},{x:0,y:x},{x:-b,y:x},{x:-y,y:0}],k=g(C),w=d.path(k,m),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container"),c&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",c),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),e.width=l,e.height=s,p(e,_),e.intersect=function(t){return P.polygon(e,C,t)},a}async function gt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.label="",e.labelStyle=r;const{shapeSvg:a}=await u(t,e,f(e)),o=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:c}=e,d=h.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");const y=[{x:0,y:0},{x:o,y:0},{x:0,y:s},{x:o,y:s}],x=g(y),b=d.path(x,m),C=a.insert(()=>b,":first-child");return C.attr("class","basic label-container"),c&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",c),n&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",n),C.attr("transform",`translate(${-o/2}, ${-s/2})`),p(e,C),e.intersect=function(t){l.Rm.info("Pill intersect",e,{points:y});return P.polygon(e,y,t)},a}async function mt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const s=e.assetHeight??48,c=e.assetWidth??48,d=Math.max(s,c),f=n?.wrappingWidth;e.width=Math.max(d,f??0);const{shapeSvg:g,bbox:m,label:y}=await u(t,e,"icon-shape default"),x="t"===e.pos,b=d,C=d,{nodeBorder:k}=r,{stylesMap:w}=(0,i.WW)(e),_=-C/2,v=-b/2,S=e.label?8:0,T=h.A.svg(g),A=(0,i.Fr)(e,{stroke:"none",fill:"none"});"handDrawn"!==e.look&&(A.roughness=0,A.fillStyle="solid");const M=T.rectangle(_,v,C,b,A),B=Math.max(C,m.width),L=b+m.height+S,F=T.rectangle(-B/2,-L/2,B,L,{...A,fill:"transparent",stroke:"none"}),$=g.insert(()=>M,":first-child"),E=g.insert(()=>F);if(e.icon){const t=g.append("g");t.html(`${await(0,a.WY)(e.icon,{height:d,width:d,fallbackPrefix:""})}`);const r=t.node().getBBox(),n=r.width,i=r.height,o=r.x,s=r.y;t.attr("transform",`translate(${-n/2-o},${x?m.height/2+S/2-i/2-s:-m.height/2-S/2-i/2-s})`),t.attr("style",`color: ${w.get("stroke")??k};`)}return y.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${x?-L/2:L/2-m.height})`),$.attr("transform",`translate(0,${x?m.height/2+S/2:-m.height/2-S/2})`),p(e,E),e.intersect=function(t){if(l.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=x?[{x:r-m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2+m.height+S},{x:r+C/2,y:n-i/2+m.height+S},{x:r+C/2,y:n+i/2},{x:r-C/2,y:n+i/2},{x:r-C/2,y:n-i/2+m.height+S},{x:r-m.width/2,y:n-i/2+m.height+S}]:[{x:r-C/2,y:n-i/2},{x:r+C/2,y:n-i/2},{x:r+C/2,y:n-i/2+b},{x:r+m.width/2,y:n-i/2+b},{x:r+m.width/2/2,y:n+i/2},{x:r-m.width/2,y:n+i/2},{x:r-m.width/2,y:n-i/2+b},{x:r-C/2,y:n-i/2+b}];return P.polygon(e,a,t)},g}async function yt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const s=e.assetHeight??48,c=e.assetWidth??48,d=Math.max(s,c),f=n?.wrappingWidth;e.width=Math.max(d,f??0);const{shapeSvg:g,bbox:m,label:y}=await u(t,e,"icon-shape default"),x=e.label?8:0,b="t"===e.pos,{nodeBorder:C,mainBkg:k}=r,{stylesMap:w}=(0,i.WW)(e),_=h.A.svg(g),v=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(v.roughness=0,v.fillStyle="solid");const S=w.get("fill");v.stroke=S??k;const T=g.append("g");e.icon&&T.html(`${await(0,a.WY)(e.icon,{height:d,width:d,fallbackPrefix:""})}`);const A=T.node().getBBox(),M=A.width,B=A.height,L=A.x,F=A.y,$=Math.max(M,B)*Math.SQRT2+40,E=_.circle(0,0,$,v),D=Math.max($,m.width),N=$+m.height+x,O=_.rectangle(-D/2,-N/2,D,N,{...v,fill:"transparent",stroke:"none"}),j=g.insert(()=>E,":first-child"),I=g.insert(()=>O);return T.attr("transform",`translate(${-M/2-L},${b?m.height/2+x/2-B/2-F:-m.height/2-x/2-B/2-F})`),T.attr("style",`color: ${w.get("stroke")??C};`),y.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${b?-N/2:N/2-m.height})`),j.attr("transform",`translate(0,${b?m.height/2+x/2:-m.height/2-x/2})`),p(e,I),e.intersect=function(t){l.Rm.info("iconSquare intersect",e,t);return P.rect(e,t)},g}async function xt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const s=e.assetHeight??48,c=e.assetWidth??48,d=Math.max(s,c),f=n?.wrappingWidth;e.width=Math.max(d,f??0);const{shapeSvg:g,bbox:m,halfPadding:y,label:x}=await u(t,e,"icon-shape default"),b="t"===e.pos,C=d+2*y,k=d+2*y,{nodeBorder:_,mainBkg:v}=r,{stylesMap:S}=(0,i.WW)(e),T=-k/2,A=-C/2,M=e.label?8:0,B=h.A.svg(g),L=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(L.roughness=0,L.fillStyle="solid");const F=S.get("fill");L.stroke=F??v;const $=B.path(w(T,A,k,C,5),L),E=Math.max(k,m.width),D=C+m.height+M,N=B.rectangle(-E/2,-D/2,E,D,{...L,fill:"transparent",stroke:"none"}),O=g.insert(()=>$,":first-child").attr("class","icon-shape2"),j=g.insert(()=>N);if(e.icon){const t=g.append("g");t.html(`${await(0,a.WY)(e.icon,{height:d,width:d,fallbackPrefix:""})}`);const r=t.node().getBBox(),n=r.width,i=r.height,o=r.x,s=r.y;t.attr("transform",`translate(${-n/2-o},${b?m.height/2+M/2-i/2-s:-m.height/2-M/2-i/2-s})`),t.attr("style",`color: ${S.get("stroke")??_};`)}return x.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${b?-D/2:D/2-m.height})`),O.attr("transform",`translate(0,${b?m.height/2+M/2:-m.height/2-M/2})`),p(e,j),e.intersect=function(t){if(l.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=b?[{x:r-m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2+m.height+M},{x:r+k/2,y:n-i/2+m.height+M},{x:r+k/2,y:n+i/2},{x:r-k/2,y:n+i/2},{x:r-k/2,y:n-i/2+m.height+M},{x:r-m.width/2,y:n-i/2+m.height+M}]:[{x:r-k/2,y:n-i/2},{x:r+k/2,y:n-i/2},{x:r+k/2,y:n-i/2+C},{x:r+m.width/2,y:n-i/2+C},{x:r+m.width/2/2,y:n+i/2},{x:r-m.width/2,y:n+i/2},{x:r-m.width/2,y:n-i/2+C},{x:r-k/2,y:n-i/2+C}];return P.polygon(e,a,t)},g}async function bt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const s=e.assetHeight??48,c=e.assetWidth??48,d=Math.max(s,c),f=n?.wrappingWidth;e.width=Math.max(d,f??0);const{shapeSvg:g,bbox:m,halfPadding:y,label:x}=await u(t,e,"icon-shape default"),b="t"===e.pos,C=d+2*y,k=d+2*y,{nodeBorder:_,mainBkg:v}=r,{stylesMap:S}=(0,i.WW)(e),T=-k/2,A=-C/2,M=e.label?8:0,B=h.A.svg(g),L=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(L.roughness=0,L.fillStyle="solid");const F=S.get("fill");L.stroke=F??v;const $=B.path(w(T,A,k,C,.1),L),E=Math.max(k,m.width),D=C+m.height+M,N=B.rectangle(-E/2,-D/2,E,D,{...L,fill:"transparent",stroke:"none"}),O=g.insert(()=>$,":first-child"),j=g.insert(()=>N);if(e.icon){const t=g.append("g");t.html(`${await(0,a.WY)(e.icon,{height:d,width:d,fallbackPrefix:""})}`);const r=t.node().getBBox(),n=r.width,i=r.height,o=r.x,s=r.y;t.attr("transform",`translate(${-n/2-o},${b?m.height/2+M/2-i/2-s:-m.height/2-M/2-i/2-s})`),t.attr("style",`color: ${S.get("stroke")??_};`)}return x.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${b?-D/2:D/2-m.height})`),O.attr("transform",`translate(0,${b?m.height/2+M/2:-m.height/2-M/2})`),p(e,j),e.intersect=function(t){if(l.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=b?[{x:r-m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2+m.height+M},{x:r+k/2,y:n-i/2+m.height+M},{x:r+k/2,y:n+i/2},{x:r-k/2,y:n+i/2},{x:r-k/2,y:n-i/2+m.height+M},{x:r-m.width/2,y:n-i/2+m.height+M}]:[{x:r-k/2,y:n-i/2},{x:r+k/2,y:n-i/2},{x:r+k/2,y:n-i/2+C},{x:r+m.width/2,y:n-i/2+C},{x:r+m.width/2/2,y:n+i/2},{x:r-m.width/2,y:n+i/2},{x:r-m.width/2,y:n-i/2+C},{x:r-k/2,y:n-i/2+C}];return P.polygon(e,a,t)},g}async function Ct(t,e,{config:{flowchart:r}}){const n=new Image;n.src=e?.img??"",await n.decode();const a=Number(n.naturalWidth.toString().replace("px","")),o=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=a/o;const{labelStyles:s}=(0,i.GX)(e);e.labelStyle=s;const c=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;const d=Math.max(e.label?c??0:0,e?.assetWidth??a),f="on"===e.constraint&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:d,g="on"===e.constraint?f/e.imageAspectRatio:e?.assetHeight??o;e.width=Math.max(f,c??0);const{shapeSvg:m,bbox:y,label:x}=await u(t,e,"image-shape default"),b="t"===e.pos,C=-f/2,k=-g/2,w=e.label?8:0,_=h.A.svg(m),v=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(v.roughness=0,v.fillStyle="solid");const S=_.rectangle(C,k,f,g,v),T=Math.max(f,y.width),A=g+y.height+w,M=_.rectangle(-T/2,-A/2,T,A,{...v,fill:"none",stroke:"none"}),B=m.insert(()=>S,":first-child"),L=m.insert(()=>M);if(e.img){const t=m.append("image");t.attr("href",e.img),t.attr("width",f),t.attr("height",g),t.attr("preserveAspectRatio","none"),t.attr("transform",`translate(${-f/2},${b?A/2-g:-A/2})`)}return x.attr("transform",`translate(${-y.width/2-(y.x-(y.left??0))},${b?-g/2-y.height/2-w/2:g/2-y.height/2+w/2})`),B.attr("transform",`translate(0,${b?y.height/2+w/2:-y.height/2-w/2})`),p(e,L),e.intersect=function(t){if(l.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=b?[{x:r-y.width/2,y:n-i/2},{x:r+y.width/2,y:n-i/2},{x:r+y.width/2,y:n-i/2+y.height+w},{x:r+f/2,y:n-i/2+y.height+w},{x:r+f/2,y:n+i/2},{x:r-f/2,y:n+i/2},{x:r-f/2,y:n-i/2+y.height+w},{x:r-y.width/2,y:n-i/2+y.height+w}]:[{x:r-f/2,y:n-i/2},{x:r+f/2,y:n-i/2},{x:r+f/2,y:n-i/2+g},{x:r+y.width/2,y:n-i/2+g},{x:r+y.width/2/2,y:n+i/2},{x:r-y.width/2,y:n+i/2},{x:r-y.width/2,y:n-i/2+g},{x:r-f/2,y:n-i/2+g}];return P.polygon(e,a,t)},m}async function kt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(o.width+2*(e.padding??0),e?.width??0),l=Math.max(o.height+2*(e.padding??0),e?.height??0),c=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}];let d;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=g(c),o=t.path(n,r);d=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&d.attr("style",m)}else d=H(a,s,l,c);return n&&d.attr("style",n),e.width=s,e.height=l,p(e,d),e.intersect=function(t){return P.polygon(e,c,t)},a}async function wt(t,e,r){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;const{shapeSvg:s,bbox:l}=await u(t,e,f(e)),c=Math.max(l.width+2*r.labelPaddingX,e?.width||0),d=Math.max(l.height+2*r.labelPaddingY,e?.height||0),g=-c/2,m=-d/2;let y,{rx:x,ry:b}=e;const{cssStyles:C}=e;if(r?.rx&&r.ry&&(x=r.rx,b=r.ry),"handDrawn"===e.look){const t=h.A.svg(s),r=(0,i.Fr)(e,{}),n=x||b?t.path(w(g,m,c,d,x||0),r):t.rectangle(g,m,c,d,r);y=s.insert(()=>n,":first-child"),y.attr("class","basic label-container").attr("style",(0,o.KL)(C))}else y=s.insert("rect",":first-child"),y.attr("class","basic label-container").attr("style",a).attr("rx",(0,o.KL)(x)).attr("ry",(0,o.KL)(b)).attr("x",g).attr("y",m).attr("width",c).attr("height",d);return p(e,y),e.calcIntersect=function(t,e){return P.rect(t,e)},e.intersect=function(t){return P.rect(e,t)},s}async function _t(t,e){const{shapeSvg:r,bbox:n,label:i}=await u(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-n.width/2-(n.x-(n.left??0))}, ${-n.height/2-(n.y-(n.top??0))})`),p(e,a),e.intersect=function(t){return P.rect(e,t)},r}async function vt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(o.width+(e.padding??0),e?.width??0),l=Math.max(o.height+(e.padding??0),e?.height??0),c=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-3*l/6,y:-l}];let d;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=g(c),o=t.path(n,r);d=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&d.attr("style",m)}else d=H(a,s,l,c);return n&&d.attr("style",n),e.width=s,e.height=l,p(e,d),e.intersect=function(t){return P.polygon(e,c,t)},a}async function St(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(o.width+(e.padding??0),e?.width??0),l=Math.max(o.height+(e.padding??0),e?.height??0),c=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}];let d;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=g(c),o=t.path(n,r);d=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&d.attr("style",m)}else d=H(a,s,l,c);return n&&d.attr("style",n),e.width=s,e.height=l,p(e,d),e.intersect=function(t){return P.polygon(e,c,t)},a}function Tt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.label="",e.labelStyle=r;const a=t.insert("g").attr("class",f(e)).attr("id",e.domId??e.id),{cssStyles:o}=e,s=Math.max(35,e?.width??0),c=Math.max(35,e?.height??0),u=[{x:s,y:0},{x:0,y:c+3.5},{x:s-14,y:c+3.5},{x:0,y:2*c},{x:s,y:c-3.5},{x:14,y:c-3.5}],d=h.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");const y=g(u),x=d.path(y,m),b=a.insert(()=>x,":first-child");return o&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",o),n&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(-${s/2},${-c})`),p(e,b),e.intersect=function(t){l.Rm.info("lightningBolt intersect",e,t);return P.polygon(e,u,t)},a}(0,l.K2)(st,"cylinder"),(0,l.K2)(lt,"dividedRectangle"),(0,l.K2)(ct,"doublecircle"),(0,l.K2)(ht,"filledCircle"),(0,l.K2)(ut,"flippedTriangle"),(0,l.K2)(dt,"forkJoin"),(0,l.K2)(pt,"halfRoundedRectangle"),(0,l.K2)(ft,"hexagon"),(0,l.K2)(gt,"hourglass"),(0,l.K2)(mt,"icon"),(0,l.K2)(yt,"iconCircle"),(0,l.K2)(xt,"iconRounded"),(0,l.K2)(bt,"iconSquare"),(0,l.K2)(Ct,"imageSquare"),(0,l.K2)(kt,"inv_trapezoid"),(0,l.K2)(wt,"drawRect"),(0,l.K2)(_t,"labelRect"),(0,l.K2)(vt,"lean_left"),(0,l.K2)(St,"lean_right"),(0,l.K2)(Tt,"lightningBolt");var At=(0,l.K2)((t,e,r,n,i,a,o)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n,`M${t},${e+a+o}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),Mt=(0,l.K2)((t,e,r,n,i,a,o)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n,`M${t},${e+a+o}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),Bt=(0,l.K2)((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");async function Lt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l}=await u(t,e,f(e)),c=Math.max(s.width+(e.padding??0),e.width??0),d=c/2,g=d/(2.5+c/50),m=Math.max(s.height+g+(e.padding??0),e.height??0),y=.1*m;let x;const{cssStyles:b}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=Mt(0,0,c,m,d,g,y),n=Bt(0,g,c,m,d,g),o=(0,i.Fr)(e,{}),s=t.path(r,o),l=t.path(n,o);a.insert(()=>l,":first-child").attr("class","line"),x=a.insert(()=>s,":first-child"),x.attr("class","basic label-container"),b&&x.attr("style",b)}else{const t=At(0,0,c,m,d,g,y);x=a.insert("path",":first-child").attr("d",t).attr("class","basic label-container").attr("style",(0,o.KL)(b)).attr("style",n)}return x.attr("label-offset-y",g),x.attr("transform",`translate(${-c/2}, ${-(m/2+g)})`),p(e,x),l.attr("transform",`translate(${-s.width/2-(s.x-(s.left??0))}, ${-s.height/2+g-(s.y-(s.top??0))})`),e.intersect=function(t){const r=P.rect(e,t),n=r.x-(e.x??0);if(0!=d&&(Math.abs(n)<(e.width??0)/2||Math.abs(n)==(e.width??0)/2&&Math.abs(r.y-(e.y??0))>(e.height??0)/2-g)){let i=g*g*(1-n*n/(d*d));i>0&&(i=Math.sqrt(i)),i=g-i,t.y-(e.y??0)>0&&(i=-i),r.y+=i}return r},a}async function Ft(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=c/4,g=c+d,{cssStyles:y}=e,x=h.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:-l/2-l/2*.1,y:-g/2},{x:-l/2-l/2*.1,y:g/2},...m(-l/2-l/2*.1,g/2,l/2+l/2*.1,g/2,d,.8),{x:l/2+l/2*.1,y:-g/2},{x:-l/2-l/2*.1,y:-g/2},{x:-l/2,y:-g/2},{x:-l/2,y:g/2*1.1},{x:-l/2,y:-g/2}],k=x.polygon(C.map(t=>[t.x,t.y]),b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),w.attr("transform",`translate(0,${-d/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(o.x-(o.left??0))},${-c/2+(e.padding??0)-d/2-(o.y-(o.top??0))})`),p(e,w),e.intersect=function(t){return P.polygon(e,C,t)},a}async function $t(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=-l/2,m=-c/2,{cssStyles:y}=e,x=h.A.svg(a),b=(0,i.Fr)(e,{}),C=[{x:d-5,y:m+5},{x:d-5,y:m+c+5},{x:d+l-5,y:m+c+5},{x:d+l-5,y:m+c},{x:d+l,y:m+c},{x:d+l,y:m+c-5},{x:d+l+5,y:m+c-5},{x:d+l+5,y:m-5},{x:d+5,y:m-5},{x:d+5,y:m},{x:d,y:m},{x:d,y:m+5}],k=[{x:d,y:m+5},{x:d+l-5,y:m+5},{x:d+l-5,y:m+c},{x:d+l,y:m+c},{x:d+l,y:m},{x:d,y:m}];"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const w=g(C),_=x.path(w,b),v=g(k),S=x.path(v,{...b,fill:"none"}),T=a.insert(()=>S,":first-child");return T.insert(()=>_,":first-child"),T.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-o.width/2-5-(o.x-(o.left??0))}, ${-o.height/2+5-(o.y-(o.top??0))})`),p(e,T),e.intersect=function(t){return P.polygon(e,C,t)},a}async function Et(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=c/4,y=c+d,x=-l/2,b=-y/2,{cssStyles:C}=e,k=m(x-5,b+y+5,x+l-5,b+y+5,d,.8),w=k?.[k.length-1],_=[{x:x-5,y:b+5},{x:x-5,y:b+y+5},...k,{x:x+l-5,y:w.y-5},{x:x+l,y:w.y-5},{x:x+l,y:w.y-10},{x:x+l+5,y:w.y-10},{x:x+l+5,y:b-5},{x:x+5,y:b-5},{x:x+5,y:b},{x:x,y:b},{x:x,y:b+5}],v=[{x:x,y:b+5},{x:x+l-5,y:b+5},{x:x+l-5,y:w.y-5},{x:x+l,y:w.y-5},{x:x+l,y:b},{x:x,y:b}],S=h.A.svg(a),T=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(T.roughness=0,T.fillStyle="solid");const A=g(_),M=S.path(A,T),B=g(v),L=S.path(B,T),F=a.insert(()=>M,":first-child");return F.insert(()=>L),F.attr("class","basic label-container"),C&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",C),n&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",n),F.attr("transform",`translate(0,${-d/2})`),s.attr("transform",`translate(${-o.width/2-5-(o.x-(o.left??0))}, ${-o.height/2+5-d/2-(o.y-(o.top??0))})`),p(e,F),e.intersect=function(t){return P.polygon(e,_,t)},a}async function Dt(t,e,{config:{themeVariables:r}}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;e.useHtmlLabels||!1!==(0,s.zj)().flowchart?.htmlLabels||(e.centerLabel=!0);const{shapeSvg:o,bbox:l,label:c}=await u(t,e,f(e)),d=Math.max(l.width+2*(e.padding??0),e?.width??0),g=Math.max(l.height+2*(e.padding??0),e?.height??0),m=-d/2,y=-g/2,{cssStyles:x}=e,b=h.A.svg(o),C=(0,i.Fr)(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=b.rectangle(m,y,d,g,C),w=o.insert(()=>k,":first-child");return w.attr("class","basic label-container"),x&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",x),a&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",a),c.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-l.height/2-(l.y-(l.top??0))})`),p(e,w),e.intersect=function(t){return P.rect(e,t)},o}(0,l.K2)(Lt,"linedCylinder"),(0,l.K2)(Ft,"linedWaveEdgedRect"),(0,l.K2)($t,"multiRect"),(0,l.K2)(Et,"multiWaveEdgedRectangle"),(0,l.K2)(Dt,"note");var Nt=(0,l.K2)((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");async function Ot(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=o.width+e.padding+(o.height+e.padding),l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];let c;const{cssStyles:d}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=Nt(0,0,s),o=t.path(n,r);c=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2+.5}, ${s/2})`),d&&c.attr("style",d)}else c=H(a,s,s,l),c.attr("transform",`translate(${-s/2+.5}, ${s/2})`);return n&&c.attr("style",n),p(e,c),e.calcIntersect=function(t,e){const r=t.width,n=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}],i=P.polygon(t,n,e);return{x:i.x-.5,y:i.y-.5}},e.intersect=function(t){return this.calcIntersect(e,t)},a}async function jt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=-Math.max(o.width+(e.padding??0),e?.width??0)/2,c=-Math.max(o.height+(e.padding??0),e?.height??0)/2,d=c/2,m=[{x:l+d,y:c},{x:l,y:0},{x:l+d,y:-c},{x:-l,y:-c},{x:-l,y:c}],{cssStyles:y}=e,x=h.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=g(m),k=x.path(C,b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),w.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-o.width/2-(o.x-(o.left??0))}, ${-o.height/2-(o.y-(o.top??0))})`),p(e,w),e.intersect=function(t){return P.polygon(e,m,t)},a}async function It(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);let a;e.labelStyle=r,a=e.cssClasses?"node "+e.cssClasses:"node default";const o=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=o.insert("g"),d=o.insert("g").attr("class","label").attr("style",n),f=e.description,g=e.label,m=d.node().appendChild(await k(g,e.labelStyle,!0,!0));let y={width:0,height:0};if((0,s._3)((0,s.D7)()?.flowchart?.htmlLabels)){const t=m.children[0],e=(0,c.Ltv)(m);y=t.getBoundingClientRect(),e.attr("width",y.width),e.attr("height",y.height)}l.Rm.info("Text 2",f);const x=f||[],b=m.getBBox(),C=d.node().appendChild(await k(x.join?x.join("
"):x,e.labelStyle,!0,!0)),_=C.children[0],v=(0,c.Ltv)(C);y=_.getBoundingClientRect(),v.attr("width",y.width),v.attr("height",y.height);const S=(e.padding||0)/2;(0,c.Ltv)(C).attr("transform","translate( "+(y.width>b.width?0:(b.width-y.width)/2)+", "+(b.height+S+5)+")"),(0,c.Ltv)(m).attr("transform","translate( "+(y.width(l.Rm.debug("Rough node insert CXC",n),a),":first-child"),L=o.insert(()=>(l.Rm.debug("Rough node insert CXC",n),n),":first-child")}else L=u.insert("rect",":first-child"),F=u.insert("line"),L.attr("class","outer title-state").attr("style",n).attr("x",-y.width/2-S).attr("y",-y.height/2-S).attr("width",y.width+(e.padding||0)).attr("height",y.height+(e.padding||0)),F.attr("class","divider").attr("x1",-y.width/2-S).attr("x2",y.width/2+S).attr("y1",-y.height/2-S+b.height+S).attr("y2",-y.height/2-S+b.height+S);return p(e,L),e.intersect=function(t){return P.rect(e,t)},o}function Rt(t,e,r,n,i,a,o){const s=(t+r)/2,l=(e+n)/2,c=Math.atan2(n-e,r-t),h=(r-t)/2/i,u=(n-e)/2/a,d=Math.sqrt(h**2+u**2);if(d>1)throw new Error("The given radii are too small to create an arc between the points.");const p=Math.sqrt(1-d**2),f=s+p*a*Math.sin(c)*(o?-1:1),g=l-p*i*Math.cos(c)*(o?-1:1),m=Math.atan2((e-g)/a,(t-f)/i);let y=Math.atan2((n-g)/a,(r-f)/i)-m;o&&y<0&&(y+=2*Math.PI),!o&&y>0&&(y-=2*Math.PI);const x=[];for(let b=0;b<20;b++){const t=m+b/19*y,e=f+i*Math.cos(t),r=g+a*Math.sin(t);x.push({x:e,y:r})}return x}async function Kt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=e?.padding??0,l=e?.padding??0,c=(e?.width?e?.width:o.width)+2*s,d=(e?.height?e?.height:o.height)+2*l,m=e.radius||5,y=e.taper||5,{cssStyles:x}=e,b=h.A.svg(a),C=(0,i.Fr)(e,{});e.stroke&&(C.stroke=e.stroke),"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=[{x:-c/2+y,y:-d/2},{x:c/2-y,y:-d/2},...Rt(c/2-y,-d/2,c/2,-d/2+y,m,m,!0),{x:c/2,y:-d/2+y},{x:c/2,y:d/2-y},...Rt(c/2,d/2-y,c/2-y,d/2,m,m,!0),{x:c/2-y,y:d/2},{x:-c/2+y,y:d/2},...Rt(-c/2+y,d/2,-c/2,d/2-y,m,m,!0),{x:-c/2,y:d/2-y},{x:-c/2,y:-d/2+y},...Rt(-c/2,-d/2+y,-c/2+y,-d/2,m,m,!0)],w=g(k),_=b.path(w,C),v=a.insert(()=>_,":first-child");return v.attr("class","basic label-container outer-path"),x&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",x),n&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",n),p(e,v),e.intersect=function(t){return P.polygon(e,k,t)},a}async function Pt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l}=await u(t,e,f(e)),c=e?.padding??0,d=Math.max(s.width+2*(e.padding??0),e?.width??0),g=Math.max(s.height+2*(e.padding??0),e?.height??0),m=-s.width/2-c,y=-s.height/2-c,{cssStyles:x}=e,b=h.A.svg(a),C=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=[{x:m,y:y},{x:m+d+8,y:y},{x:m+d+8,y:y+g},{x:m-8,y:y+g},{x:m-8,y:y},{x:m,y:y},{x:m,y:y+g}],w=b.polygon(k.map(t=>[t.x,t.y]),C),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container").attr("style",(0,o.KL)(x)),n&&"handDrawn"!==e.look&&_.selectAll("path").attr("style",n),x&&"handDrawn"!==e.look&&_.selectAll("path").attr("style",n),l.attr("transform",`translate(${-d/2+4+(e.padding??0)-(s.x-(s.left??0))},${-g/2+(e.padding??0)-(s.y-(s.top??0))})`),p(e,_),e.intersect=function(t){return P.rect(e,t)},a}async function zt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=-l/2,m=-c/2,{cssStyles:y}=e,x=h.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:d,y:m},{x:d,y:m+c},{x:d+l,y:m+c},{x:d+l,y:m-c/2}],k=g(C),w=x.path(k,b),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",y),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),_.attr("transform",`translate(0, ${c/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(o.x-(o.left??0))}, ${-c/4+(e.padding??0)-(o.y-(o.top??0))})`),p(e,_),e.intersect=function(t){return P.polygon(e,C,t)},a}async function qt(t,e){return wt(t,e,{rx:0,ry:0,classes:"",labelPaddingX:e.labelPaddingX??2*(e?.padding||0),labelPaddingY:1*(e?.padding||0)})}async function Wt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=o.height+e.padding,l=o.width+s/4+e.padding,c=s/2,{cssStyles:d}=e,m=h.A.svg(a),x=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(x.roughness=0,x.fillStyle="solid");const b=[{x:-l/2+c,y:-s/2},{x:l/2-c,y:-s/2},...y(-l/2+c,0,c,50,90,270),{x:l/2-c,y:s/2},...y(l/2-c,0,c,50,270,450)],C=g(b),k=m.path(C,x),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container outer-path"),d&&"handDrawn"!==e.look&&w.selectChildren("path").attr("style",d),n&&"handDrawn"!==e.look&&w.selectChildren("path").attr("style",n),p(e,w),e.intersect=function(t){return P.polygon(e,b,t)},a}async function Ht(t,e){return wt(t,e,{rx:5,ry:5,classes:"flowchart-node"})}function Ut(t,e,{config:{themeVariables:r}}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;const{cssStyles:o}=e,{lineColor:s,stateBorder:l,nodeBorder:c}=r,u=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),d=h.A.svg(u),f=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(f.roughness=0,f.fillStyle="solid");const g=d.circle(0,0,14,{...f,stroke:s,strokeWidth:2}),m=l??c,y=d.circle(0,0,5,{...f,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),x=u.insert(()=>g,":first-child");return x.insert(()=>y),o&&x.selectAll("path").attr("style",o),a&&x.selectAll("path").attr("style",a),p(e,x),e.intersect=function(t){return P.circle(e,7,t)},u}function Gt(t,e,{config:{themeVariables:r}}){const{lineColor:n}=r,a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let o;if("handDrawn"===e.look){const t=h.A.svg(a).circle(0,0,14,(0,i.ue)(n));o=a.insert(()=>t),o.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else o=a.insert("circle",":first-child"),o.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return p(e,o),e.intersect=function(t){return P.circle(e,7,t)},a}async function Yt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s}=await u(t,e,f(e)),l=(e?.padding||0)/2,c=s.width+e.padding,d=s.height+e.padding,g=-s.width/2-l,m=-s.height/2-l,y=[{x:0,y:0},{x:c,y:0},{x:c,y:-d},{x:0,y:-d},{x:0,y:0},{x:-8,y:0},{x:c+8,y:0},{x:c+8,y:-d},{x:-8,y:-d},{x:-8,y:0}];if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=t.rectangle(g-8,m,c+16,d,r),s=t.line(g,m,g,m+d,r),l=t.line(g+c,m,g+c,m+d,r);a.insert(()=>s,":first-child"),a.insert(()=>l,":first-child");const u=a.insert(()=>n,":first-child"),{cssStyles:f}=e;u.attr("class","basic label-container").attr("style",(0,o.KL)(f)),p(e,u)}else{const t=H(a,c,d,y);n&&t.attr("style",n),p(e,t)}return e.intersect=function(t){return P.polygon(e,y,t)},a}async function Xt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(o.width+2*(e.padding??0),e?.width??0),l=Math.max(o.height+2*(e.padding??0),e?.height??0),c=-s/2,d=-l/2,m=.2*l,y=.2*l,{cssStyles:x}=e,b=h.A.svg(a),C=(0,i.Fr)(e,{}),k=[{x:c-m/2,y:d},{x:c+s+m/2,y:d},{x:c+s+m/2,y:d+l},{x:c-m/2,y:d+l}],w=[{x:c+s-m/2,y:d+l},{x:c+s+m/2,y:d+l},{x:c+s+m/2,y:d+l-y}];"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const _=g(k),v=b.path(_,C),S=g(w),T=b.path(S,{...C,fillStyle:"solid"}),A=a.insert(()=>T,":first-child");return A.insert(()=>v,":first-child"),A.attr("class","basic label-container"),x&&"handDrawn"!==e.look&&A.selectAll("path").attr("style",x),n&&"handDrawn"!==e.look&&A.selectAll("path").attr("style",n),p(e,A),e.intersect=function(t){return P.polygon(e,k,t)},a}async function Vt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=c/4,y=.2*l,x=.2*c,b=c+d,{cssStyles:C}=e,k=h.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=[{x:-l/2-l/2*.1,y:b/2},...m(-l/2-l/2*.1,b/2,l/2+l/2*.1,b/2,d,.8),{x:l/2+l/2*.1,y:-b/2},{x:-l/2-l/2*.1,y:-b/2}],v=-l/2+l/2*.1,S=-b/2-.4*x,T=[{x:v+l-y,y:1.4*(S+c)},{x:v+l,y:S+c-x},{x:v+l,y:.9*(S+c)},...m(v+l,1.3*(S+c),v+l-y,1.5*(S+c),.03*-c,.5)],A=g(_),M=k.path(A,w),B=g(T),L=k.path(B,{...w,fillStyle:"solid"}),F=a.insert(()=>L,":first-child");return F.insert(()=>M,":first-child"),F.attr("class","basic label-container"),C&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",C),n&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",n),F.attr("transform",`translate(0,${-d/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(o.x-(o.left??0))},${-c/2+(e.padding??0)-d/2-(o.y-(o.top??0))})`),p(e,F),e.intersect=function(t){return P.polygon(e,_,t)},a}async function Zt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(o.width+e.padding,e?.width||0),l=Math.max(o.height+e.padding,e?.height||0),c=-s/2,h=-l/2,d=a.insert("rect",":first-child");return d.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",c).attr("y",h).attr("width",s).attr("height",l),p(e,d),e.intersect=function(t){return P.rect(e,t)},a}(0,l.K2)(Ot,"question"),(0,l.K2)(jt,"rect_left_inv_arrow"),(0,l.K2)(It,"rectWithTitle"),(0,l.K2)(Rt,"generateArcPoints"),(0,l.K2)(Kt,"roundedRect"),(0,l.K2)(Pt,"shadedProcess"),(0,l.K2)(zt,"slopedRect"),(0,l.K2)(qt,"squareRect"),(0,l.K2)(Wt,"stadium"),(0,l.K2)(Ht,"state"),(0,l.K2)(Ut,"stateEnd"),(0,l.K2)(Gt,"stateStart"),(0,l.K2)(Yt,"subroutine"),(0,l.K2)(Xt,"taggedRect"),(0,l.K2)(Vt,"taggedWaveEdgedRectangle"),(0,l.K2)(Zt,"text");var Qt=(0,l.K2)((t,e,r,n,i,a)=>`M${t},${e}\n a${i},${a} 0,0,1 0,${-n}\n l${r},0\n a${i},${a} 0,0,1 0,${n}\n M${r},${-n}\n a${i},${a} 0,0,0 0,${n}\n l${-r},0`,"createCylinderPathD"),Jt=(0,l.K2)((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),te=(0,l.K2)((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");async function ee(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l,halfPadding:c}=await u(t,e,f(e)),d="neo"===e.look?2*c:c,g=s.height+d,m=g/2,y=m/(2.5+g/50),x=s.width+y+d,{cssStyles:b}=e;let C;if("handDrawn"===e.look){const t=h.A.svg(a),r=Jt(0,0,x,g,y,m),n=te(0,0,x,g,y,m),o=t.path(r,(0,i.Fr)(e,{})),s=t.path(n,(0,i.Fr)(e,{fill:"none"}));C=a.insert(()=>s,":first-child"),C=a.insert(()=>o,":first-child"),C.attr("class","basic label-container"),b&&C.attr("style",b)}else{const t=Qt(0,0,x,g,y,m);C=a.insert("path",":first-child").attr("d",t).attr("class","basic label-container").attr("style",(0,o.KL)(b)).attr("style",n),C.attr("class","basic label-container"),b&&C.selectAll("path").attr("style",b),n&&C.selectAll("path").attr("style",n)}return C.attr("label-offset-x",y),C.attr("transform",`translate(${-x/2}, ${g/2} )`),l.attr("transform",`translate(${-s.width/2-y-(s.x-(s.left??0))}, ${-s.height/2-(s.y-(s.top??0))})`),p(e,C),e.intersect=function(t){const r=P.rect(e,t),n=r.y-(e.y??0);if(0!=m&&(Math.abs(n)<(e.height??0)/2||Math.abs(n)==(e.height??0)/2&&Math.abs(r.x-(e.x??0))>(e.width??0)/2-y)){let i=y*y*(1-n*n/(m*m));0!=i&&(i=Math.sqrt(Math.abs(i))),i=y-i,t.x-(e.x??0)>0&&(i=-i),r.x+=i}return r},a}async function re(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=o.width+e.padding,l=o.height+e.padding,c=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}];let d;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=g(c),o=t.path(n,r);d=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&d.attr("style",m)}else d=H(a,s,l,c);return n&&d.attr("style",n),e.width=s,e.height=l,p(e,d),e.intersect=function(t){return P.polygon(e,c,t)},a}async function ne(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(60,o.width+2*(e.padding??0),e?.width??0),l=Math.max(20,o.height+2*(e.padding??0),e?.height??0),{cssStyles:c}=e,d=h.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");const y=[{x:-s/2*.8,y:-l/2},{x:s/2*.8,y:-l/2},{x:s/2,y:-l/2*.6},{x:s/2,y:l/2},{x:-s/2,y:l/2},{x:-s/2,y:-l/2*.6}],x=g(y),b=d.path(x,m),C=a.insert(()=>b,":first-child");return C.attr("class","basic label-container"),c&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",c),n&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",n),p(e,C),e.intersect=function(t){return P.polygon(e,y,t)},a}async function ie(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:c}=await u(t,e,f(e)),d=(0,s._3)((0,s.D7)().flowchart?.htmlLabels),m=o.width+(e.padding??0),y=m+o.height,x=m+o.height,b=[{x:0,y:0},{x:x,y:0},{x:x/2,y:-y}],{cssStyles:C}=e,k=h.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=g(b),v=k.path(_,w),S=a.insert(()=>v,":first-child").attr("transform",`translate(${-y/2}, ${y/2})`);return C&&"handDrawn"!==e.look&&S.selectChildren("path").attr("style",C),n&&"handDrawn"!==e.look&&S.selectChildren("path").attr("style",n),e.width=m,e.height=y,p(e,S),c.attr("transform",`translate(${-o.width/2-(o.x-(o.left??0))}, ${y/2-(o.height+(e.padding??0)/(d?2:1)-(o.y-(o.top??0)))})`),e.intersect=function(t){return l.Rm.info("Triangle intersect",e,b,t),P.polygon(e,b,t)},a}async function ae(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=c/8,y=c+d,{cssStyles:x}=e,b=70-l,C=b>0?b/2:0,k=h.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=[{x:-l/2-C,y:y/2},...m(-l/2-C,y/2,l/2+C,y/2,d,.8),{x:l/2+C,y:-y/2},{x:-l/2-C,y:-y/2}],v=g(_),S=k.path(v,w),T=a.insert(()=>S,":first-child");return T.attr("class","basic label-container"),x&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",x),n&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",n),T.attr("transform",`translate(0,${-d/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(o.x-(o.left??0))},${-c/2+(e.padding??0)-d-(o.y-(o.top??0))})`),p(e,T),e.intersect=function(t){return P.polygon(e,_,t)},a}async function oe(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await u(t,e,f(e)),s=Math.max(o.width+2*(e.padding??0),e?.width??0),l=Math.max(o.height+2*(e.padding??0),e?.height??0),c=s/l;let d=s,y=l;d>y*c?y=d/c:d=y*c,d=Math.max(d,100),y=Math.max(y,50);const x=Math.min(.2*y,y/4),b=y+2*x,{cssStyles:C}=e,k=h.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=[{x:-d/2,y:b/2},...m(-d/2,b/2,d/2,b/2,x,1),{x:d/2,y:-b/2},...m(d/2,-b/2,-d/2,-b/2,x,-1)],v=g(_),S=k.path(v,w),T=a.insert(()=>S,":first-child");return T.attr("class","basic label-container"),C&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",C),n&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",n),p(e,T),e.intersect=function(t){return P.polygon(e,_,t)},a}async function se(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await u(t,e,f(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),c=Math.max(o.height+2*(e.padding??0),e?.height??0),d=-l/2,g=-c/2,{cssStyles:m}=e,y=h.A.svg(a),x=(0,i.Fr)(e,{}),b=[{x:d-5,y:g-5},{x:d-5,y:g+c},{x:d+l,y:g+c},{x:d+l,y:g-5}],C=`M${d-5},${g-5} L${d+l},${g-5} L${d+l},${g+c} L${d-5},${g+c} L${d-5},${g-5}\n M${d-5},${g} L${d+l},${g}\n M${d},${g-5} L${d},${g+c}`;"handDrawn"!==e.look&&(x.roughness=0,x.fillStyle="solid");const k=y.path(C,x),w=a.insert(()=>k,":first-child");return w.attr("transform","translate(2.5, 2.5)"),w.attr("class","basic label-container"),m&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),s.attr("transform",`translate(${-o.width/2+2.5-(o.x-(o.left??0))}, ${-o.height/2+2.5-(o.y-(o.top??0))})`),p(e,w),e.intersect=function(t){return P.polygon(e,b,t)},a}async function le(t,e){const r=e;if(r.alias&&(e.label=r.alias),"handDrawn"===e.look){const{themeVariables:r}=(0,s.zj)(),{background:n}=r,i={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${n}`]};await le(t,i)}const n=(0,s.zj)();e.useHtmlLabels=n.htmlLabels;let a=n.er?.diagramPadding??10,l=n.er?.entityPadding??6;const{cssStyles:u}=e,{labelStyles:d,nodeStyles:g}=(0,i.GX)(e);if(0===r.attributes.length&&e.label){const r={rx:0,ry:0,labelPaddingX:a,labelPaddingY:1.5*a,classes:""};(0,o.Un)(e.label,n)+2*r.labelPaddingX0){const t=x.width+2*a-(w+_+v+S);w+=t/M,_+=t/M,v>0&&(v+=t/M),S>0&&(S+=t/M)}const L=w+_+v+S,F=h.A.svg(y),$=(0,i.Fr)(e,{});"handDrawn"!==e.look&&($.roughness=0,$.fillStyle="solid");let E=0;k.length>0&&(E=k.reduce((t,e)=>t+(e?.rowHeight??0),0));const D=Math.max(B.width+2*a,e?.width||0,L),N=Math.max((E??0)+x.height,e?.height||0),O=-D/2,j=-N/2;y.selectAll("g:not(:first-child)").each((t,e,r)=>{const n=(0,c.Ltv)(r[e]),i=n.attr("transform");let o=0,s=0;if(i){const t=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(i);t&&(o=parseFloat(t[1]),s=parseFloat(t[2]),n.attr("class").includes("attribute-name")?o+=w:n.attr("class").includes("attribute-keys")?o+=w+_:n.attr("class").includes("attribute-comment")&&(o+=w+_+v))}n.attr("transform",`translate(${O+a/2+o}, ${s+j+x.height+l/2})`)}),y.select(".name").attr("transform","translate("+-x.width/2+", "+(j+l/2)+")");const I=F.rectangle(O,j,D,N,$),R=y.insert(()=>I,":first-child").attr("style",u.join("")),{themeVariables:K}=(0,s.zj)(),{rowEven:z,rowOdd:q,nodeBorder:W}=K;C.push(0);for(const[i,o]of k.entries()){const t=(i+1)%2==0&&0!==o.yOffset,e=F.rectangle(O,x.height+j+o?.yOffset,D,o?.rowHeight,{...$,fill:t?z:q,stroke:W});y.insert(()=>e,"g.label").attr("style",u.join("")).attr("class","row-rect-"+(t?"even":"odd"))}let H=F.line(O,x.height+j,D+O,x.height+j,$);y.insert(()=>H).attr("class","divider"),H=F.line(w+O,x.height+j,w+O,N+j,$),y.insert(()=>H).attr("class","divider"),T&&(H=F.line(w+_+O,x.height+j,w+_+O,N+j,$),y.insert(()=>H).attr("class","divider")),A&&(H=F.line(w+_+v+O,x.height+j,w+_+v+O,N+j,$),y.insert(()=>H).attr("class","divider"));for(const i of C)H=F.line(O,x.height+j+i,D+O,x.height+j+i,$),y.insert(()=>H).attr("class","divider");if(p(e,R),g&&"handDrawn"!==e.look){const t=g.split(";"),e=t?.filter(t=>t.includes("stroke"))?.map(t=>`${t}`).join("; ");y.selectAll("path").attr("style",e??""),y.selectAll(".row-rect-even path").attr("style",g)}return e.intersect=function(t){return P.rect(e,t)},y}async function ce(t,e,r,n=0,i=0,l=[],h=""){const u=t.insert("g").attr("class",`label ${l.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",h);e!==(0,s.QO)(e)&&(e=(e=(0,s.QO)(e)).replaceAll("<","<").replaceAll(">",">"));const d=u.node().appendChild(await(0,a.GZ)(u,e,{width:(0,o.Un)(e,r)+100,style:h,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let t=d.children[0];for(t.textContent=t.textContent.replaceAll("<","<").replaceAll(">",">");t.childNodes[0];)t=t.childNodes[0],t.textContent=t.textContent.replaceAll("<","<").replaceAll(">",">")}let p=d.getBBox();if((0,s._3)(r.htmlLabels)){const t=d.children[0];t.style.textAlign="start";const e=(0,c.Ltv)(d);p=t.getBoundingClientRect(),e.attr("width",p.width),e.attr("height",p.height)}return p}async function he(t,e,r,n,i=r.class.padding??12){const a=n?0:3,o=t.insert("g").attr("class",f(e)).attr("id",e.domId||e.id);let s=null,l=null,c=null,h=null,u=0,d=0,p=0;if(s=o.insert("g").attr("class","annotation-group text"),e.annotations.length>0){const t=e.annotations[0];await ue(s,{text:`\xab${t}\xbb`},0);u=s.node().getBBox().height}l=o.insert("g").attr("class","label-group text"),await ue(l,e,0,["font-weight: bolder"]);const g=l.node().getBBox();d=g.height,c=o.insert("g").attr("class","members-group text");let m=0;for(const f of e.members){m+=await ue(c,f,m,[f.parseClassifier()])+a}p=c.node().getBBox().height,p<=0&&(p=i/2),h=o.insert("g").attr("class","methods-group text");let y=0;for(const f of e.methods){y+=await ue(h,f,y,[f.parseClassifier()])+a}let x=o.node().getBBox();if(null!==s){const t=s.node().getBBox();s.attr("transform",`translate(${-t.width/2})`)}return l.attr("transform",`translate(${-g.width/2}, ${u})`),x=o.node().getBBox(),c.attr("transform",`translate(0, ${u+d+2*i})`),x=o.node().getBBox(),h.attr("transform",`translate(0, ${u+d+(p?p+4*i:2*i)})`),x=o.node().getBBox(),{shapeSvg:o,bbox:x}}async function ue(t,e,r,n=[]){const i=t.insert("g").attr("class","label").attr("style",n.join("; ")),h=(0,s.zj)();let u="useHtmlLabels"in e?e.useHtmlLabels:(0,s._3)(h.htmlLabels)??!0,d="";d="text"in e?e.text:e.label,!u&&d.startsWith("\\")&&(d=d.substring(1)),(0,s.Wi)(d)&&(u=!0);const p=await(0,a.GZ)(i,(0,s.oB)((0,o.Sm)(d)),{width:(0,o.Un)(d,h)+50,classes:"markdown-node-label",useHtmlLabels:u},h);let f,g=1;if(u){const t=p.children[0],e=(0,c.Ltv)(p);g=t.innerHTML.split("
").length,t.innerHTML.includes("")&&(g+=t.innerHTML.split("").length-1);const r=t.getElementsByTagName("img");if(r){const t=""===d.replace(/]*>/g,"").trim();await Promise.all([...r].map(e=>new Promise(r=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=h.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,r=5,n=parseInt(t,10)*r+"px";e.style.minWidth=n,e.style.maxWidth=n}else e.style.width="100%";r(e)}(0,l.K2)(n,"setupImage"),setTimeout(()=>{e.complete&&n()}),e.addEventListener("error",n),e.addEventListener("load",n)})))}f=t.getBoundingClientRect(),e.attr("width",f.width),e.attr("height",f.height)}else{n.includes("font-weight: bolder")&&(0,c.Ltv)(p).selectAll("tspan").attr("font-weight",""),g=p.children.length;const t=p.children[0];if(""===p.textContent||p.textContent.includes(">")){t.textContent=d[0]+d.substring(1).replaceAll(">",">").replaceAll("<","<").trim();" "===d[1]&&(t.textContent=t.textContent[0]+" "+t.textContent.substring(1))}"undefined"===t.textContent&&(t.textContent=""),f=p.getBBox()}return i.attr("transform","translate(0,"+(-f.height/(2*g)+r)+")"),f.height}async function de(t,e){const r=(0,s.D7)(),n=r.class.padding??12,a=n,o=e.useHtmlLabels??(0,s._3)(r.htmlLabels)??!0,l=e;l.annotations=l.annotations??[],l.members=l.members??[],l.methods=l.methods??[];const{shapeSvg:u,bbox:d}=await he(t,e,r,o,a),{labelStyles:f,nodeStyles:g}=(0,i.GX)(e);e.labelStyle=f,e.cssStyles=l.styles||"";const m=l.styles?.join(";")||g||"";e.cssStyles||(e.cssStyles=m.replaceAll("!important","").split(";"));const y=0===l.members.length&&0===l.methods.length&&!r.class?.hideEmptyMembersBox,x=h.A.svg(u),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=d.width;let k=d.height;0===l.members.length&&0===l.methods.length?k+=a:l.members.length>0&&0===l.methods.length&&(k+=2*a);const w=-C/2,_=-k/2,v=x.rectangle(w-n,_-n-(y?n:0===l.members.length&&0===l.methods.length?-n/2:0),C+2*n,k+2*n+(y?2*n:0===l.members.length&&0===l.methods.length?-n:0),b),S=u.insert(()=>v,":first-child");S.attr("class","basic label-container");const T=S.node().getBBox();u.selectAll(".text").each((t,e,r)=>{const i=(0,c.Ltv)(r[e]),a=i.attr("transform");let s=0;if(a){const t=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(a);t&&(s=parseFloat(t[2]))}let h=s+_+n-(y?n:0===l.members.length&&0===l.methods.length?-n/2:0);o||(h-=4);let d=w;(i.attr("class").includes("label-group")||i.attr("class").includes("annotation-group"))&&(d=-i.node()?.getBBox().width/2||0,u.selectAll("text").each(function(t,e,r){"middle"===window.getComputedStyle(r[e]).textAnchor&&(d=0)})),i.attr("transform",`translate(${d}, ${h})`)});const A=u.select(".annotation-group").node().getBBox().height-(y?n/2:0)||0,M=u.select(".label-group").node().getBBox().height-(y?n/2:0)||0,B=u.select(".members-group").node().getBBox().height-(y?n/2:0)||0;if(l.members.length>0||l.methods.length>0||y){const t=x.line(T.x,A+M+_+n,T.x+T.width,A+M+_+n,b);u.insert(()=>t).attr("class","divider").attr("style",m)}if(y||l.members.length>0||l.methods.length>0){const t=x.line(T.x,A+M+B+_+2*a+n,T.x+T.width,A+M+B+_+n+2*a,b);u.insert(()=>t).attr("class","divider").attr("style",m)}if("handDrawn"!==l.look&&u.selectAll("path").attr("style",m),S.select(":nth-child(2)").attr("style",m),u.selectAll(".divider").select("path").attr("style",m),e.labelStyle?u.selectAll("span").attr("style",e.labelStyle):u.selectAll("span").attr("style",m),!o){const t=RegExp(/color\s*:\s*([^;]*)/),e=t.exec(m);if(e){const t=e[0].replace("color","fill");u.selectAll("tspan").attr("style",t)}else if(f){const e=t.exec(f);if(e){const t=e[0].replace("color","fill");u.selectAll("tspan").attr("style",t)}}}return p(e,S),e.intersect=function(t){return P.rect(e,t)},u}async function pe(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const a=e,o=e,s="verifyMethod"in e,l=f(e),u=t.insert("g").attr("class",l).attr("id",e.domId??e.id);let d;d=s?await fe(u,`<<${a.type}>>`,0,e.labelStyle):await fe(u,"<<Element>>",0,e.labelStyle);let g=d;const m=await fe(u,a.name,g,e.labelStyle+"; font-weight: bold;");if(g+=m+20,s){g+=await fe(u,""+(a.requirementId?`ID: ${a.requirementId}`:""),g,e.labelStyle);g+=await fe(u,""+(a.text?`Text: ${a.text}`:""),g,e.labelStyle);g+=await fe(u,""+(a.risk?`Risk: ${a.risk}`:""),g,e.labelStyle),await fe(u,""+(a.verifyMethod?`Verification: ${a.verifyMethod}`:""),g,e.labelStyle)}else{g+=await fe(u,""+(o.type?`Type: ${o.type}`:""),g,e.labelStyle),await fe(u,""+(o.docRef?`Doc Ref: ${o.docRef}`:""),g,e.labelStyle)}const y=(u.node()?.getBBox().width??200)+20,x=(u.node()?.getBBox().height??200)+20,b=-y/2,C=-x/2,k=h.A.svg(u),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=k.rectangle(b,C,y,x,w),v=u.insert(()=>_,":first-child");if(v.attr("class","basic label-container").attr("style",n),u.selectAll(".label").each((t,e,r)=>{const n=(0,c.Ltv)(r[e]),i=n.attr("transform");let a=0,o=0;if(i){const t=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(i);t&&(a=parseFloat(t[1]),o=parseFloat(t[2]))}const s=o-x/2;let l=b+10;0!==e&&1!==e||(l=a),n.attr("transform",`translate(${l}, ${s+20})`)}),g>d+m+20){const t=k.line(b,C+d+m+20,b+y,C+d+m+20,w);u.insert(()=>t).attr("style",n)}return p(e,v),e.intersect=function(t){return P.rect(e,t)},u}async function fe(t,e,r,n=""){if(""===e)return 0;const i=t.insert("g").attr("class","label").attr("style",n),l=(0,s.D7)(),h=l.htmlLabels??!0,u=await(0,a.GZ)(i,(0,s.oB)((0,o.Sm)(e)),{width:(0,o.Un)(e,l)+50,classes:"markdown-node-label",useHtmlLabels:h,style:n},l);let d;if(h){const t=u.children[0],e=(0,c.Ltv)(u);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}else{const t=u.children[0];for(const e of t.children)e.textContent=e.textContent.replaceAll(">",">").replaceAll("<","<"),n&&e.setAttribute("style",n);d=u.getBBox(),d.height+=6}return i.attr("transform",`translate(${-d.width/2},${-d.height/2+r})`),d.height}(0,l.K2)(ee,"tiltedCylinder"),(0,l.K2)(re,"trapezoid"),(0,l.K2)(ne,"trapezoidalPentagon"),(0,l.K2)(ie,"triangle"),(0,l.K2)(ae,"waveEdgedRectangle"),(0,l.K2)(oe,"waveRectangle"),(0,l.K2)(se,"windowPane"),(0,l.K2)(le,"erBox"),(0,l.K2)(ce,"addText"),(0,l.K2)(he,"textHelper"),(0,l.K2)(ue,"addText"),(0,l.K2)(de,"classBox"),(0,l.K2)(pe,"requirementBox"),(0,l.K2)(fe,"addText");var ge=(0,l.K2)(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");async function me(t,e,{config:r}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n||"";const o=e.width;e.width=(e.width??200)-10;const{shapeSvg:s,bbox:l,label:c}=await u(t,e,f(e)),g=e.padding||10;let m,y="";"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(y=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),m=s.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",y).attr("target","_blank"));const x={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1};let b,C;({label:b,bbox:C}=m?await d(m,"ticket"in e&&e.ticket||"",x):await d(s,"ticket"in e&&e.ticket||"",x));const{label:k,bbox:_}=await d(s,"assigned"in e&&e.assigned||"",x);e.width=o;const v=e?.width||0,S=Math.max(C.height,_.height)/2,T=Math.max(l.height+20,e?.height||0)+S,A=-v/2,M=-T/2;let B;c.attr("transform","translate("+(g-v/2)+", "+(-S-l.height/2)+")"),b.attr("transform","translate("+(g-v/2)+", "+(-S+l.height/2)+")"),k.attr("transform","translate("+(g+v/2-_.width-20)+", "+(-S+l.height/2)+")");const{rx:L,ry:F}=e,{cssStyles:$}=e;if("handDrawn"===e.look){const t=h.A.svg(s),r=(0,i.Fr)(e,{}),n=L||F?t.path(w(A,M,v,T,L||0),r):t.rectangle(A,M,v,T,r);B=s.insert(()=>n,":first-child"),B.attr("class","basic label-container").attr("style",$||null)}else{B=s.insert("rect",":first-child"),B.attr("class","basic label-container __APA__").attr("style",a).attr("rx",L??5).attr("ry",F??5).attr("x",A).attr("y",M).attr("width",v).attr("height",T);const t="priority"in e&&e.priority;if(t){const e=s.append("line"),r=A+2,n=M+Math.floor((L??0)/2),i=M+T-Math.floor((L??0)/2);e.attr("x1",r).attr("y1",n).attr("x2",r).attr("y2",i).attr("stroke-width","4").attr("stroke",ge(t))}}return p(e,B),e.height=T,e.intersect=function(t){return P.rect(e,t)},s}async function ye(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,halfPadding:c,label:d}=await u(t,e,f(e)),g=s.width+10*c,m=s.height+8*c,y=.15*g,{cssStyles:x}=e,b=s.width+20,C=s.height+20,k=Math.max(g,b),w=Math.max(m,C);let _;d.attr("transform",`translate(${-s.width/2}, ${-s.height/2})`);const v=`M0 0 \n a${y},${y} 1 0,0 ${.25*k},${-1*w*.1}\n a${y},${y} 1 0,0 ${.25*k},0\n a${y},${y} 1 0,0 ${.25*k},0\n a${y},${y} 1 0,0 ${.25*k},${.1*w}\n\n a${y},${y} 1 0,0 ${.15*k},${.33*w}\n a${.8*y},${.8*y} 1 0,0 0,${.34*w}\n a${y},${y} 1 0,0 ${-1*k*.15},${.33*w}\n\n a${y},${y} 1 0,0 ${-1*k*.25},${.15*w}\n a${y},${y} 1 0,0 ${-1*k*.25},0\n a${y},${y} 1 0,0 ${-1*k*.25},0\n a${y},${y} 1 0,0 ${-1*k*.25},${-1*w*.15}\n\n a${y},${y} 1 0,0 ${-1*k*.1},${-1*w*.33}\n a${.8*y},${.8*y} 1 0,0 0,${-1*w*.34}\n a${y},${y} 1 0,0 ${.1*k},${-1*w*.33}\n H0 V0 Z`;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=t.path(v,r);_=a.insert(()=>n,":first-child"),_.attr("class","basic label-container").attr("style",(0,o.KL)(x))}else _=a.insert("path",":first-child").attr("class","basic label-container").attr("style",n).attr("d",v);return _.attr("transform",`translate(${-k/2}, ${-w/2})`),p(e,_),e.calcIntersect=function(t,e){return P.rect(t,e)},e.intersect=function(t){return l.Rm.info("Bang intersect",e,t),P.rect(e,t)},a}async function xe(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,halfPadding:c,label:d}=await u(t,e,f(e)),g=s.width+2*c,m=s.height+2*c,y=.15*g,x=.25*g,b=.35*g,C=.2*g,{cssStyles:k}=e;let w;const _=`M0 0 \n a${y},${y} 0 0,1 ${.25*g},${-1*g*.1}\n a${b},${b} 1 0,1 ${.4*g},${-1*g*.1}\n a${x},${x} 1 0,1 ${.35*g},${.2*g}\n\n a${y},${y} 1 0,1 ${.15*g},${.35*m}\n a${C},${C} 1 0,1 ${-1*g*.15},${.65*m}\n\n a${x},${y} 1 0,1 ${-1*g*.25},${.15*g}\n a${b},${b} 1 0,1 ${-1*g*.5},0\n a${y},${y} 1 0,1 ${-1*g*.25},${-1*g*.15}\n\n a${y},${y} 1 0,1 ${-1*g*.1},${-1*m*.35}\n a${C},${C} 1 0,1 ${.1*g},${-1*m*.65}\n H0 V0 Z`;if("handDrawn"===e.look){const t=h.A.svg(a),r=(0,i.Fr)(e,{}),n=t.path(_,r);w=a.insert(()=>n,":first-child"),w.attr("class","basic label-container").attr("style",(0,o.KL)(k))}else w=a.insert("path",":first-child").attr("class","basic label-container").attr("style",n).attr("d",_);return d.attr("transform",`translate(${-s.width/2}, ${-s.height/2})`),w.attr("transform",`translate(${-g/2}, ${-m/2})`),p(e,w),e.calcIntersect=function(t,e){return P.rect(t,e)},e.intersect=function(t){return l.Rm.info("Cloud intersect",e,t),P.rect(e,t)},a}async function be(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,halfPadding:s,label:l}=await u(t,e,f(e)),c=o.width+8*s,h=o.height+2*s,d=`\n M${-c/2} ${h/2-5}\n v${10-h}\n q0,-5 5,-5\n h${c-10}\n q5,0 5,5\n v${h-10}\n q0,5 -5,5\n h${10-c}\n q-5,0 -5,-5\n Z\n `,g=a.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("style",n).attr("d",d);return a.append("line").attr("class","node-line-").attr("x1",-c/2).attr("y1",h/2).attr("x2",c/2).attr("y2",h/2),l.attr("transform",`translate(${-o.width/2}, ${-o.height/2})`),a.append(()=>l.node()),p(e,g),e.calcIntersect=function(t,e){return P.rect(t,e)},e.intersect=function(t){return P.rect(e,t)},a}async function Ce(t,e){return Y(t,e,{padding:e.padding??0})}(0,l.K2)(me,"kanbanItem"),(0,l.K2)(ye,"bang"),(0,l.K2)(xe,"cloud"),(0,l.K2)(be,"defaultMindmapNode"),(0,l.K2)(Ce,"mindmapCircle");var ke=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:qt},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Kt},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:Wt},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:Yt},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:st},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:Y},{semanticName:"Bang",name:"Bang",shortName:"bang",description:"Bang",aliases:["bang"],handler:ye},{semanticName:"Cloud",name:"Cloud",shortName:"cloud",description:"cloud",aliases:["cloud"],handler:xe},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:Ot},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:ft},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:St},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:vt},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:re},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:kt},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:ct},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:Zt},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:U},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:Pt},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:Gt},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:Ut},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:dt},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:gt},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:Q},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:tt},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:rt},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:Tt},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:ae},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:pt},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:ee},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:Lt},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:nt},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:lt},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:ie},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:se},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:ht},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:ne},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:ut},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:zt},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:Et},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:$t},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:W},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:V},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:Vt},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:Xt},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:oe},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:jt},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:Ft}],we=(0,l.K2)(()=>{const t={state:Ht,choice:G,note:Dt,rectWithTitle:It,labelRect:_t,iconSquare:bt,iconCircle:yt,icon:mt,iconRounded:xt,imageSquare:Ct,anchor:z,kanbanItem:me,mindmapCircle:Ce,defaultMindmapNode:be,classBox:de,erBox:le,requirementBox:pe},e=[...Object.entries(t),...ke.flatMap(t=>[t.shortName,..."aliases"in t?t.aliases:[],..."internalAliases"in t?t.internalAliases:[]].map(e=>[e,t.handler]))];return Object.fromEntries(e)},"generateShapeMap")();function _e(t){return t in we}(0,l.K2)(_e,"isValidShape");var ve=new Map;async function Se(t,e,r){let n,i;"rect"===e.shape&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");const a=e.shape?we[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let o;"sandbox"===r.config.securityLevel?o="_top":e.linkTarget&&(o=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",o??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),ve.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}(0,l.K2)(Se,"insertNode");var Te=(0,l.K2)((t,e)=>{ve.set(e.id,t)},"setNodeElem"),Ae=(0,l.K2)(()=>{ve.clear()},"clear"),Me=(0,l.K2)(t=>{const e=ve.get(t.id);l.Rm.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const r=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+r-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),r},"positionNode")},6832:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(66984),i=r(38446),a=r(25353),o=r(23149);const s=function(t,e,r){if(!(0,o.A)(r))return!1;var s=typeof e;return!!("number"==s?(0,i.A)(r)&&(0,a.A)(e,r.length):"string"==s&&e in r)&&(0,n.A)(r[e],t)}},6911:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={collapse:"collapse_LWBd"}},8232:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(72453),i=r(74886);const a=(t,e)=>{const r=i.A.parse(t);for(const i in e)r[i]=n.A.channel.clamp[i](e[i]);return i.A.stringify(r)}},9779:(t,e,r)=>{"use strict";r.d(e,{A:()=>_});var n=r(18744),i=r(41917);const a=(0,n.A)(i.A,"DataView");var o=r(68335);const s=(0,n.A)(i.A,"Promise");var l=r(39857);const c=(0,n.A)(i.A,"WeakMap");var h=r(88496),u=r(81121),d="[object Map]",p="[object Promise]",f="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.A)(a),x=(0,u.A)(o.A),b=(0,u.A)(s),C=(0,u.A)(l.A),k=(0,u.A)(c),w=h.A;(a&&w(new a(new ArrayBuffer(1)))!=m||o.A&&w(new o.A)!=d||s&&w(s.resolve())!=p||l.A&&w(new l.A)!=f||c&&w(new c)!=g)&&(w=function(t){var e=(0,h.A)(t),r="[object Object]"==e?t.constructor:void 0,n=r?(0,u.A)(r):"";if(n)switch(n){case y:return m;case x:return d;case b:return p;case C:return f;case k:return g}return e});const _=w},10045:(t,e,r)=>{"use strict";r.d(e,{XX:()=>u,q7:()=>d,sO:()=>h});var n=r(5164),i=r(5894),a=r(13226),o=r(67633),s=r(40797),l={common:o.Y2,getConfig:o.zj,insertCluster:i.U,insertEdge:n.Jo,insertEdgeLabel:n.jP,insertMarkers:n.g0,insertNode:i.on,interpolateToCurve:a.Ib,labelHelper:i.Zk,log:s.Rm,positionEdgeLabel:n.T_},c={},h=(0,s.K2)(t=>{for(const e of t)c[e.name]=e},"registerLayoutLoaders");(0,s.K2)(()=>{h([{name:"dagre",loader:(0,s.K2)(async()=>await Promise.all([r.e(3624),r.e(2334),r.e(7873)]).then(r.bind(r,57873)),"loader")},{name:"cose-bilkent",loader:(0,s.K2)(async()=>await Promise.all([r.e(165),r.e(7928)]).then(r.bind(r,77928)),"loader")}])},"registerDefaultLayoutLoaders")();var u=(0,s.K2)(async(t,e)=>{if(!(t.layoutAlgorithm in c))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);const r=c[t.layoutAlgorithm];return(await r.loader()).render(t,e,l,{algorithm:r.algorithm})},"render"),d=(0,s.K2)((t="",{fallback:e="dagre"}={})=>{if(t in c)return t;if(e in c)return s.Rm.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")},11580:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!("get"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return i(e,t),e},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const s=r(74848),l=a(r(96540)),c=o(r(6911)),h=r(97481);e.default=function(t){const e=l.default.Children.toArray(t.children),[r,n]=(0,l.useState)(!0),i=e.find(t=>l.default.isValidElement(t)&&"summary"===t.props?.mdxType),a=(0,s.jsx)(s.Fragment,{children:e.filter(t=>t!==i)});return(0,s.jsx)(h.Collapse,{...t,open:r,onChange:t=>n(t),label:i,className:c.default.collapse,children:a})}},11754:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(80127);const i=function(){this.__data__=new n.A,this.size=0};const a=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r};const o=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=r(68335),c=r(29471);const h=function(t,e){var r=this.__data__;if(r instanceof n.A){var i=r.__data__;if(!l.A||i.length<199)return i.push([t,e]),this.size=++r.size,this;r=this.__data__=new c.A(i)}return r.set(t,e),this.size=r.size,this};function u(t){var e=this.__data__=new n.A(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=s,u.prototype.set=h;const d=u},13226:(t,e,r)=>{"use strict";r.d(e,{$C:()=>M,$t:()=>W,C4:()=>U,I5:()=>q,Ib:()=>m,KL:()=>X,Sm:()=>G,Un:()=>O,_K:()=>H,bH:()=>E,dq:()=>P,pe:()=>c,rY:()=>Y,ru:()=>N,sM:()=>T,vU:()=>f,yT:()=>L});var n=r(67633),i=r(40797),a=r(16750),o=r(70451),s=r(46632),l=r(42837),c="\u200b",h={curveBasis:o.qrM,curveBasisClosed:o.Yu4,curveBasisOpen:o.IA3,curveBumpX:o.Wi0,curveBumpY:o.PGM,curveBundle:o.OEq,curveCardinalClosed:o.olC,curveCardinalOpen:o.IrU,curveCardinal:o.y8u,curveCatmullRomClosed:o.Q7f,curveCatmullRomOpen:o.cVp,curveCatmullRom:o.oDi,curveLinear:o.lUB,curveLinearClosed:o.Lx9,curveMonotoneX:o.nVG,curveMonotoneY:o.uxU,curveNatural:o.Xf2,curveStep:o.GZz,curveStepAfter:o.UPb,curveStepBefore:o.dyv},u=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,d=(0,i.K2)(function(t,e){const r=p(t,/(?:init\b)|(?:initialize\b)/);let i={};if(Array.isArray(r)){const t=r.map(t=>t.args);(0,n.$i)(t),i=(0,n.hH)(i,[...t])}else i=r.args;if(!i)return;let a=(0,n.Ch)(t,e);const o="config";return void 0!==i[o]&&("flowchart-v2"===a&&(a="flowchart"),i[a]=i[o],delete i[o]),i},"detectInit"),p=(0,i.K2)(function(t,e=null){try{const r=new RegExp(`[%]{2}(?![{]${u.source})(?=[}][%]{2}).*\n`,"ig");let a;t=t.trim().replace(r,"").replace(/'/gm,'"'),i.Rm.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const o=[];for(;null!==(a=n.DB.exec(t));)if(a.index===n.DB.lastIndex&&n.DB.lastIndex++,a&&!e||e&&a[1]?.match(e)||e&&a[2]?.match(e)){const t=a[1]?a[1]:a[2],e=a[3]?a[3].trim():a[4]?JSON.parse(a[4].trim()):null;o.push({type:t,args:e})}return 0===o.length?{type:t,args:null}:1===o.length?o[0]:o}catch(r){return i.Rm.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),f=(0,i.K2)(function(t){return t.replace(n.DB,"")},"removeDirectives"),g=(0,i.K2)(function(t,e){for(const[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");function m(t,e){if(!t)return e;const r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return h[r]??e}function y(t,e){const r=t.trim();if(r)return"loose"!==e.securityLevel?(0,a.J)(r):r}(0,i.K2)(m,"interpolateToCurve"),(0,i.K2)(y,"formatUrl");var x=(0,i.K2)((t,...e)=>{const r=t.split("."),n=r.length-1,a=r[n];let o=window;for(let s=0;s{r+=b(t,e),e=t});return _(t,r/2)}function k(t){return 1===t.length?t[0]:C(t)}(0,i.K2)(b,"distance"),(0,i.K2)(C,"traverseEdge"),(0,i.K2)(k,"calcLabelPosition");var w=(0,i.K2)((t,e=2)=>{const r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),_=(0,i.K2)((t,e)=>{let r,n=e;for(const i of t){if(r){const t=b(i,r);if(0===t)return r;if(t=1)return{x:i.x,y:i.y};if(e>0&&e<1)return{x:w((1-e)*r.x+e*i.x,5),y:w((1-e)*r.y+e*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),v=(0,i.K2)((t,e,r)=>{i.Rm.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());const n=_(e,25),a=t?10:5,o=Math.atan2(e[0].y-n.y,e[0].x-n.x),s={x:0,y:0};return s.x=Math.sin(o)*a+(e[0].x+n.x)/2,s.y=-Math.cos(o)*a+(e[0].y+n.y)/2,s},"calcCardinalityPosition");function S(t,e,r){const n=structuredClone(r);i.Rm.info("our points",n),"start_left"!==e&&"start_right"!==e&&n.reverse();const a=_(n,25+t),o=10+.5*t,s=Math.atan2(n[0].y-a.y,n[0].x-a.x),l={x:0,y:0};return"start_left"===e?(l.x=Math.sin(s+Math.PI)*o+(n[0].x+a.x)/2,l.y=-Math.cos(s+Math.PI)*o+(n[0].y+a.y)/2):"end_right"===e?(l.x=Math.sin(s-Math.PI)*o+(n[0].x+a.x)/2-5,l.y=-Math.cos(s-Math.PI)*o+(n[0].y+a.y)/2-5):"end_left"===e?(l.x=Math.sin(s)*o+(n[0].x+a.x)/2-5,l.y=-Math.cos(s)*o+(n[0].y+a.y)/2-5):(l.x=Math.sin(s)*o+(n[0].x+a.x)/2,l.y=-Math.cos(s)*o+(n[0].y+a.y)/2),l}function T(t){let e="",r="";for(const n of t)void 0!==n&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}(0,i.K2)(S,"calcTerminalLabelPosition"),(0,i.K2)(T,"getStylesFromArray");var A=0,M=(0,i.K2)(()=>(A++,"id-"+Math.random().toString(36).substr(2,12)+"-"+A),"generateId");function B(t){let e="";const r="0123456789abcdef";for(let n=0;nB(t.length),"random"),F=(0,i.K2)(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),$=(0,i.K2)(function(t,e){const r=e.text.replace(n.Y2.lineBreakRegex," "),[,i]=q(e.fontSize),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.style("text-anchor",e.anchor),a.style("font-family",e.fontFamily),a.style("font-size",i),a.style("font-weight",e.fontWeight),a.attr("fill",e.fill),void 0!==e.class&&a.attr("class",e.class);const o=a.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(r),a},"drawSimpleText"),E=(0,s.A)((t,e,r)=>{if(!t)return t;if(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),n.Y2.lineBreakRegex.test(t))return t;const i=t.split(" ").filter(Boolean),a=[];let o="";return i.forEach((t,n)=>{const s=O(`${t} `,r),l=O(o,r);if(s>e){const{hyphenatedStrings:n,remainingWord:i}=D(t,e,"-",r);a.push(o,...n),o=i}else l+s>=e?(a.push(o),o=t):o=[o,t].filter(Boolean).join(" ");n+1===i.length&&a.push(o)}),a.filter(t=>""!==t).join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),D=(0,s.A)((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);const i=[...t],a=[];let o="";return i.forEach((t,s)=>{const l=`${o}${t}`;if(O(l,n)>=e){const t=s+1,e=i.length===t,n=`${l}${r}`;a.push(e?l:n),o=""}else o=l}),{hyphenatedStrings:a,remainingWord:o}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);function N(t,e){return I(t,e).height}function O(t,e){return I(t,e).width}(0,i.K2)(N,"calculateTextHeight"),(0,i.K2)(O,"calculateTextWidth");var j,I=(0,s.A)((t,e)=>{const{fontSize:r=12,fontFamily:i="Arial",fontWeight:a=400}=e;if(!t)return{width:0,height:0};const[,s]=q(r),l=["sans-serif",i],h=t.split(n.Y2.lineBreakRegex),u=[],d=(0,o.Ltv)("body");if(!d.remove)return{width:0,height:0,lineHeight:0};const p=d.append("svg");for(const n of l){let t=0;const e={width:0,height:0,lineHeight:0};for(const r of h){const i=F();i.text=r||c;const o=$(p,i).style("font-size",s).style("font-weight",a).style("font-family",n),l=(o._groups||o)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}u.push(e)}p.remove();return u[isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),R=class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}static{(0,i.K2)(this,"InitIDGenerator")}},K=(0,i.K2)(function(t){return j=j||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),j.innerHTML=t,unescape(j.textContent)},"entityDecode");function P(t){return"str"in t}(0,i.K2)(P,"isDetailedError");var z=(0,i.K2)((t,e,r,n)=>{if(!n)return;const i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),q=(0,i.K2)(t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");function W(t,e){return(0,l.A)({},t,e)}(0,i.K2)(W,"cleanAndMerge");var H={assignWithDepth:n.hH,wrapLabel:E,calculateTextHeight:N,calculateTextWidth:O,calculateTextDimensions:I,cleanAndMerge:W,detectInit:d,detectDirective:p,isSubstringInArray:g,interpolateToCurve:m,calcLabelPosition:k,calcCardinalityPosition:v,calcTerminalLabelPosition:S,formatUrl:y,getStylesFromArray:T,generateId:M,random:L,runFunc:x,entityDecode:K,insertTitle:z,isLabelCoordinateInPath:V,parseFontSize:q,InitIDGenerator:R},U=(0,i.K2)(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/#\w+;/g,function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"}),e},"encodeEntities"),G=(0,i.K2)(function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},"decodeEntities"),Y=(0,i.K2)((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");function X(t){return t??null}function V(t,e){const r=Math.round(t.x),n=Math.round(t.y),i=e.replace(/(\d+\.\d+)/g,t=>Math.round(parseFloat(t)).toString());return i.includes(r.toString())||i.includes(n.toString())}(0,i.K2)(X,"handleUndefinedAttr"),(0,i.K2)(V,"isLabelCoordinateInPath")},15647:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=(0,r(40367).A)(Object.getPrototypeOf,Object)},16750:(t,e,r)=>{"use strict";e.J=void 0;var n=r(69119);function i(t){return t.replace(n.ctrlCharactersRegex,"").replace(n.htmlEntitiesRegex,function(t,e){return String.fromCharCode(e)})}function a(t){try{return decodeURIComponent(t)}catch(e){return t}}e.J=function(t){if(!t)return n.BLANK_URL;var e,r=a(t.trim());do{e=(r=a(r=i(r).replace(n.htmlCtrlEntityRegex,"").replace(n.ctrlCharactersRegex,"").replace(n.whitespaceEscapeCharsRegex,"").trim())).match(n.ctrlCharactersRegex)||r.match(n.htmlEntitiesRegex)||r.match(n.htmlCtrlEntityRegex)||r.match(n.whitespaceEscapeCharsRegex)}while(e&&e.length>0);var o=r;if(!o)return n.BLANK_URL;if(function(t){return n.relativeFirstCharacters.indexOf(t[0])>-1}(o))return o;var s=o.trimStart(),l=s.match(n.urlSchemeRegex);if(!l)return o;var c=l[0].toLowerCase().trim();if(n.invalidProtocolRegex.test(c))return n.BLANK_URL;var h=s.replace(/\\/g,"/");if("mailto:"===c||c.includes("://"))return h;if("http:"===c||"https:"===c){if(!function(t){return URL.canParse(t)}(h))return n.BLANK_URL;var u=new URL(h);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return h}},17562:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n={codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm"}},18598:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(23149),i=Object.create;const a=function(){function t(){}return function(e){if(!(0,n.A)(e))return{};if(i)return i(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();var o=r(15647),s=r(97271);const l=function(t){return"function"!=typeof t.constructor||(0,s.A)(t)?{}:a((0,o.A)(t))}},18744:(t,e,r)=>{"use strict";r.d(e,{A:()=>x});var n=r(89610);const i=r(41917).A["__core-js_shared__"];var a,o=(a=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";const s=function(t){return!!o&&o in t};var l=r(23149),c=r(81121),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,p=u.toString,f=d.hasOwnProperty,g=RegExp("^"+p.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.A)(t)||s(t))&&((0,n.A)(t)?g:h).test((0,c.A)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var r=y(t,e);return m(r)?r:void 0}},19114:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>u});var n=r(96540),i=r(6342),a=r(37243),o=r(20366),s=r(28774),l=r(74848);function c({toc:t,className:e,linkClassName:r,isChild:n}){return t.length?(0,l.jsx)("ul",{className:n?void 0:e,children:t.map(t=>(0,l.jsxs)("li",{children:[(0,l.jsx)(s.default,{to:`#${t.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,l.jsx)(c,{isChild:!0,toc:t.children,className:e,linkClassName:r})]},t.id))}):null}const h=n.memo(c);function u({toc:t,className:e="table-of-contents table-of-contents__left-border",linkClassName:r="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:c,maxHeadingLevel:u,...d}){const p=(0,i.p)(),f=c??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,m=(0,a.h)({toc:t,minHeadingLevel:f,maxHeadingLevel:g}),y=(0,n.useMemo)(()=>{if(r&&s)return{linkClassName:r,linkActiveClassName:s,minHeadingLevel:f,maxHeadingLevel:g}},[r,s,f,g]);return(0,o.i)(y),(0,l.jsx)(h,{toc:m,className:e,linkClassName:r,...d})}},20385:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(97481),o=n(r(21312)),s=n(r(34559)),l=n(r(387));e.default=function({collapsed:t,...e}){return(0,i.jsxs)("button",{type:"button",...e,className:(0,s.default)("clean-btn",l.default.tocCollapsibleButton,!t&&l.default.tocCollapsibleButtonExpanded,e.className),children:[(0,i.jsx)("div",{}),(0,i.jsx)(a.Typography,{variant:"body2",children:(0,i.jsx)(o.default,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})}),t?(0,i.jsx)(a.ChevronDownIcon,{}):(0,i.jsx)(a.ChevronUpIcon,{})]})}},20821:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>h});r(96540);var n=r(60542),i=r(34164),a=r(21312),o=r(30795),s=r.n(o),l=r(74848);function c(t){const{className:e,previous:r,next:n}=t;return(0,l.jsxs)("nav",{className:(0,i.A)(e,"pagination-nav"),"aria-label":(0,a.translate)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[r&&(0,l.jsx)(s(),{...r,subLabel:(0,l.jsx)(a.default,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,l.jsx)(s(),{...n,subLabel:(0,l.jsx)(a.default,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function h(){const{metadata:t}=(0,n.useDoc)();return(0,l.jsx)(c,{className:"docusaurus-mt-lg",previous:t.previous,next:t.next})}},21893:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={codeBlockContainer:"codeBlockContainer_EB2s"}},22031:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(52851),i=r(52528);const a=function(t,e,r,a){var o=!r;r||(r={});for(var s=-1,l=e.length;++s{"use strict";r.d(e,{A:()=>n});const n=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},24326:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(29008),i=r(76875),a=r(67525);const o=function(t,e){return(0,a.A)((0,i.A)(t,e,n.A),t+"")}},24859:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(29646));e.default=function(t){return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(a.default,{...t})})}},25347:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={tocCollapsible:"tocCollapsible_ROek",tocCollapsibleContent:"tocCollapsibleContent_Qsjj",tocCollapsibleExpanded:"tocCollapsibleExpanded_zTjk"}},25353:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=/^(?:0|[1-9]\d*)$/;const i=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t{"use strict";r.d(e,{A:()=>s});var n=r(72453),i=r(93539),a=r(74886),o=r(8232);const s=(t,e,r=0,s=1)=>{if("number"!=typeof t)return(0,o.A)(t,{a:e});const l=i.A.set({r:n.A.channel.clamp.r(t),g:n.A.channel.clamp.g(e),b:n.A.channel.clamp.b(r),a:n.A.channel.clamp.a(s)});return a.A.stringify(l)}},26849:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=r(36513),s=n(r(19114)),l=n(r(20385)),c=n(r(25347));e.default=function({toc:t,className:e,minHeadingLevel:r,maxHeadingLevel:n}){const{collapsed:h,toggleCollapsed:u}=(0,o.useCollapsible)({initialState:!0});return(0,i.jsxs)("div",{className:(0,a.default)(c.default.tocCollapsible,!h&&c.default.tocCollapsibleExpanded,e),children:[(0,i.jsx)(l.default,{collapsed:h,onClick:u}),(0,i.jsx)(o.Collapsible,{lazy:!0,className:c.default.tocCollapsibleContent,collapsed:h,children:(0,i.jsx)(s.default,{toc:t,minHeadingLevel:r,maxHeadingLevel:n})})]})}},28453:(t,e,r)=>{"use strict";r.d(e,{R:()=>o,x:()=>s});var n=r(96540);const i={},a=n.createContext(i);function o(t){const e=n.useContext(a);return n.useMemo(function(){return"function"==typeof t?t(e):{...e,...t}},[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:o(t.components),n.createElement(a.Provider,{value:e},t.children)}},28698:(t,e,r)=>{"use strict";r.d(e,{Nq:()=>a,RI:()=>l,hq:()=>i});var n=r(40797),i={aggregation:17.25,extension:17.25,composition:17.25,dependency:6,lollipop:13.5,arrow_point:4},a={arrow_point:9,arrow_cross:12.5,arrow_circle:12.5};function o(t,e){if(void 0===t||void 0===e)return{angle:0,deltaX:0,deltaY:0};t=s(t),e=s(e);const[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],o=i-r,l=a-n;return{angle:Math.atan(l/o),deltaX:o,deltaY:l}}(0,n.K2)(o,"calculateDeltaAndAngle");var s=(0,n.K2)(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),l=(0,n.K2)(t=>({x:(0,n.K2)(function(e,r,n){let a=0;const l=s(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(i,t.arrowTypeEnd)){const{angle:e,deltaX:r}=o(n[n.length-1],n[n.length-2]);a=i[t.arrowTypeEnd]*Math.cos(e)*(r>=0?1:-1)}const c=Math.abs(s(e).x-s(n[n.length-1]).x),h=Math.abs(s(e).y-s(n[n.length-1]).y),u=Math.abs(s(e).x-s(n[0]).x),d=Math.abs(s(e).y-s(n[0]).y),p=i[t.arrowTypeStart],f=i[t.arrowTypeEnd];if(c0&&h0&&d=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(i,t.arrowTypeEnd)){const{angle:e,deltaY:r}=o(n[n.length-1],n[n.length-2]);a=i[t.arrowTypeEnd]*Math.abs(Math.sin(e))*(r>=0?1:-1)}const c=Math.abs(s(e).y-s(n[n.length-1]).y),h=Math.abs(s(e).x-s(n[n.length-1]).x),u=Math.abs(s(e).y-s(n[0]).y),d=Math.abs(s(e).x-s(n[0]).x),p=i[t.arrowTypeStart],f=i[t.arrowTypeEnd];if(c0&&h0&&d{"use strict";r.d(e,{A:()=>n});const n=function(t){return t}},29471:(t,e,r)=>{"use strict";r.d(e,{A:()=>_});const n=(0,r(18744).A)(Object,"create");const i=function(){this.__data__=n?n(null):{},this.size=0};const a=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var o=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(n){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return o.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return n?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{"use strict";r.r(e),r.d(e,{default:()=>T});var n=r(96540),i=r(28453),a=r(5260),o=r(24859),s=r.n(o),l=r(74848);function c(t){return(0,l.jsx)("code",{...t})}var h=r(28774);var u=r(11580),d=r.n(u),p=r(99208),f=r.n(p),g=r(34164);const m="containsTaskList_mC6p";function y(t){if(void 0!==t)return(0,g.A)(t,t?.includes("contains-task-list")&&m)}var x=r(63427);var b=r(4186),C=r.n(b),k=r(88857),w=r.n(k),_=r(36930),v=r.n(_);const S={Head:a.A,details:d(),Details:d(),code:function(t){return function(t){return void 0!==t.children&&n.Children.toArray(t.children).every(t=>"string"==typeof t&&!t.includes("\n"))}(t)?(0,l.jsx)(c,{...t}):(0,l.jsx)(s(),{...t})},a:function(t){return(0,l.jsx)(h.default,{...t})},pre:function(t){return(0,l.jsx)(l.Fragment,{children:t.children})},ul:function(t){return(0,l.jsx)("ul",{...t,className:y(t.className)})},li:function(t){return(0,x.A)().collectAnchor(t.id),(0,l.jsx)("li",{...t})},img:C(),h1:t=>(0,l.jsx)(f(),{as:"h1",...t}),h2:t=>(0,l.jsx)(f(),{as:"h2",...t}),h3:t=>(0,l.jsx)(f(),{as:"h3",...t}),h4:t=>(0,l.jsx)(f(),{as:"h4",...t}),h5:t=>(0,l.jsx)(f(),{as:"h5",...t}),h6:t=>(0,l.jsx)(f(),{as:"h6",...t}),admonition:w(),mermaid:v()};function T({children:t}){return(0,l.jsx)(i.x,{components:S,children:t})}},29646:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>p});var n=r(96540),i=r(92303),a=r(34164),o=r(51715),s=r.n(o),l=r(17562),c=r(74848);function h({children:t,className:e}){return(0,c.jsx)(s(),{as:"pre",tabIndex:0,className:(0,a.A)(l.A.codeBlockStandalone,"thin-scrollbar",e),children:(0,c.jsx)("code",{className:l.A.codeBlockLines,children:t})})}var u=r(88308),d=r.n(u);function p({children:t,...e}){const r=(0,i.default)(),a=function(t){return n.Children.toArray(t).some(t=>(0,n.isValidElement)(t))?t:Array.isArray(t)?t.join(""):t}(t),o="string"==typeof a?d():h;return(0,c.jsx)(o,{...e,children:a},String(r))}},29893:(t,e,r)=>{"use strict";function n(t,e,r){if(t&&t.length){const[n,i]=e,a=Math.PI/180*r,o=Math.cos(a),s=Math.sin(a);for(const e of t){const[t,r]=e;e[0]=(t-n)*o-(r-i)*s+n,e[1]=(t-n)*s+(r-i)*o+i}}}function i(t,e){return t[0]===e[0]&&t[1]===e[1]}function a(t,e,r,a=1){const o=r,s=Math.max(e,.1),l=t[0]&&t[0][0]&&"number"==typeof t[0][0]?[t]:t,c=[0,0];if(o)for(const i of l)n(i,c,o);const h=function(t,e,r){const n=[];for(const h of t){const t=[...h];i(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&n.push(t)}const a=[];e=Math.max(e,.1);const o=[];for(const i of n)for(let t=0;tt.ymine.ymin?1:t.xe.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax)),!o.length)return a;let s=[],l=o[0].ymin,c=0;for(;s.length||o.length;){if(o.length){let t=-1;for(let e=0;el);e++)t=e;o.splice(0,t+1).forEach(t=>{s.push({s:l,edge:t})})}if(s=s.filter(t=>!(t.edge.ymax<=l)),s.sort((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x)),(1!==r||c%e==0)&&s.length>1)for(let t=0;t=s.length)break;const r=s[t].edge,n=s[e].edge;a.push([[Math.round(r.x),l],[Math.round(n.x),l]])}l+=r,s.forEach(t=>{t.edge.x=t.edge.x+r*t.edge.islope}),c++}return a}(l,s,a);if(o){for(const t of l)n(t,c,-o);!function(t,e,r){const i=[];t.forEach(t=>i.push(...t)),n(i,e,r)}(h,c,-o)}return h}function o(t,e){var r;const n=e.hachureAngle+90;let i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let o=1;return e.roughness>=1&&((null===(r=e.randomizer)||void 0===r?void 0:r.next())||Math.random())>.7&&(o=i),a(t,i,n,o||1)}r.d(e,{A:()=>it});class s{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const r=o(t,e);return{type:"fillSketch",ops:this.renderLines(r,e)}}renderLines(t,e){const r=[];for(const n of t)r.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return r}}function l(t){const e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}class c extends s{fillPolygons(t,e){let r=e.hachureGap;r<0&&(r=4*e.strokeWidth),r=Math.max(r,.1);const n=o(t,Object.assign({},e,{hachureGap:r})),i=Math.PI/180*e.hachureAngle,a=[],s=.5*r*Math.cos(i),c=.5*r*Math.sin(i);for(const[o,h]of n)l([o,h])&&a.push([[o[0]-s,o[1]+c],[...h]],[[o[0]+s,o[1]-c],[...h]]);return{type:"fillSketch",ops:this.renderLines(a,e)}}}class h extends s{fillPolygons(t,e){const r=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),i=this._fillPolygons(t,n);return r.ops=r.ops.concat(i.ops),r}}class u{constructor(t){this.helper=t}fillPolygons(t,e){const r=o(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(r,e)}dotsOnLines(t,e){const r=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let i=e.fillWeight;i<0&&(i=e.strokeWidth/2);const a=n/4;for(const o of t){const t=l(o),s=t/n,c=Math.ceil(s)-1,h=t-c*n,u=(o[0][0]+o[1][0])/2-n/4,d=Math.min(o[0][1],o[1][1]);for(let o=0;o{const a=l(t),o=Math.floor(a/(r+n)),s=(a+n-o*(r+n))/2;let c=t[0],h=t[1];c[0]>h[0]&&(c=t[1],h=t[0]);const u=Math.atan((h[1]-c[1])/(h[0]-c[0]));for(let l=0;l{const i=l(t),a=Math.round(i/(2*e));let o=t[0],s=t[1];o[0]>s[0]&&(o=t[1],s=t[0]);const c=Math.atan((s[1]-o[1])/(s[0]-o[0]));for(let l=0;ln%2?t+r:t+e);a.push({key:"C",data:t}),e=t[4],r=t[5];break}case"Q":a.push({key:"Q",data:[...s]}),e=s[2],r=s[3];break;case"q":{const t=s.map((t,n)=>n%2?t+r:t+e);a.push({key:"Q",data:t}),e=t[2],r=t[3];break}case"A":a.push({key:"A",data:[...s]}),e=s[5],r=s[6];break;case"a":e+=s[5],r+=s[6],a.push({key:"A",data:[s[0],s[1],s[2],s[3],s[4],e,r]});break;case"H":a.push({key:"H",data:[...s]}),e=s[0];break;case"h":e+=s[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...s]}),r=s[0];break;case"v":r+=s[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...s]}),e=s[2],r=s[3];break;case"s":{const t=s.map((t,n)=>n%2?t+r:t+e);a.push({key:"S",data:t}),e=t[2],r=t[3];break}case"T":a.push({key:"T",data:[...s]}),e=s[0],r=s[1];break;case"t":e+=s[0],r+=s[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function C(t){const e=[];let r="",n=0,i=0,a=0,o=0,s=0,l=0;for(const{key:c,data:h}of t){switch(c){case"M":e.push({key:"M",data:[...h]}),[n,i]=h,[a,o]=h;break;case"C":e.push({key:"C",data:[...h]}),n=h[4],i=h[5],s=h[2],l=h[3];break;case"L":e.push({key:"L",data:[...h]}),[n,i]=h;break;case"H":n=h[0],e.push({key:"L",data:[n,i]});break;case"V":i=h[0],e.push({key:"L",data:[n,i]});break;case"S":{let t=0,a=0;"C"===r||"S"===r?(t=n+(n-s),a=i+(i-l)):(t=n,a=i),e.push({key:"C",data:[t,a,...h]}),s=h[0],l=h[1],n=h[2],i=h[3];break}case"T":{const[t,a]=h;let o=0,c=0;"Q"===r||"T"===r?(o=n+(n-s),c=i+(i-l)):(o=n,c=i);const u=n+2*(o-n)/3,d=i+2*(c-i)/3,p=t+2*(o-t)/3,f=a+2*(c-a)/3;e.push({key:"C",data:[u,d,p,f,t,a]}),s=o,l=c,n=t,i=a;break}case"Q":{const[t,r,a,o]=h,c=n+2*(t-n)/3,u=i+2*(r-i)/3,d=a+2*(t-a)/3,p=o+2*(r-o)/3;e.push({key:"C",data:[c,u,d,p,a,o]}),s=t,l=r,n=a,i=o;break}case"A":{const t=Math.abs(h[0]),r=Math.abs(h[1]),a=h[2],o=h[3],s=h[4],l=h[5],c=h[6];0===t||0===r?(e.push({key:"C",data:[n,i,l,c,l,c]}),n=l,i=c):n===l&&i===c||(w(n,i,l,c,t,r,a,o,s).forEach(function(t){e.push({key:"C",data:t})}),n=l,i=c);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=o}r=c}return e}function k(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function w(t,e,r,n,i,a,o,s,l,c){const h=(u=o,Math.PI*u/180);var u;let d=[],p=0,f=0,g=0,m=0;if(c)[p,f,g,m]=c;else{[t,e]=k(t,e,-h),[r,n]=k(r,n,-h);const o=(t-r)/2,c=(e-n)/2;let u=o*o/(i*i)+c*c/(a*a);u>1&&(u=Math.sqrt(u),i*=u,a*=u);const d=i*i,y=a*a,x=d*y-d*c*c-y*o*o,b=d*c*c+y*o*o,C=(s===l?-1:1)*Math.sqrt(Math.abs(x/b));g=C*i*c/a+(t+r)/2,m=C*-a*o/i+(e+n)/2,p=Math.asin(parseFloat(((e-m)/a).toFixed(9))),f=Math.asin(parseFloat(((n-m)/a).toFixed(9))),tf&&(p-=2*Math.PI),!l&&f>p&&(f-=2*Math.PI)}let y=f-p;if(Math.abs(y)>120*Math.PI/180){const t=f,e=r,s=n;f=l&&f>p?p+120*Math.PI/180*1:p+120*Math.PI/180*-1,d=w(r=g+i*Math.cos(f),n=m+a*Math.sin(f),e,s,i,a,o,0,l,[f,t,g,m])}y=f-p;const x=Math.cos(p),b=Math.sin(p),C=Math.cos(f),_=Math.sin(f),v=Math.tan(y/4),S=4/3*i*v,T=4/3*a*v,A=[t,e],M=[t+S*b,e-T*x],B=[r+S*_,n-T*C],L=[r,n];if(M[0]=2*A[0]-M[0],M[1]=2*A[1]-M[1],c)return[M,B,L].concat(d);{d=[M,B,L].concat(d);const t=[];for(let e=0;e2){const i=[];for(let e=0;e2*Math.PI&&(p=0,f=2*Math.PI);const g=2*Math.PI/l.curveStepCount,m=Math.min(g/2,(f-p)/2),y=z(m,c,h,u,d,p,f,1,l);if(!l.disableMultiStroke){const t=z(m,c,h,u,d,p,f,1.5,l);y.push(...t)}return o&&(s?y.push(...j(c,h,c+u*Math.cos(p),h+d*Math.sin(p),l),...j(c,h,c+u*Math.cos(f),h+d*Math.sin(f),l)):y.push({op:"lineTo",data:[c,h]},{op:"lineTo",data:[c+u*Math.cos(p),h+d*Math.sin(p)]})),{type:"path",ops:y}}function L(t,e){const r=C(b(x(t))),n=[];let i=[0,0],a=[0,0];for(const{key:o,data:s}of r)switch(o){case"M":a=[s[0],s[1]],i=[s[0],s[1]];break;case"L":n.push(...j(a[0],a[1],s[0],s[1],e)),a=[s[0],s[1]];break;case"C":{const[t,r,i,o,l,c]=s;n.push(...q(t,r,i,o,l,c,a,e)),a=[l,c];break}case"Z":n.push(...j(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function F(t,e){const r=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,i=n.length;if(i>2){r.push({op:"move",data:[n[0][0]+O(t,e),n[0][1]+O(t,e)]});for(let a=1;a500?.4:-.0016668*l+1.233334;let h=i.maxRandomnessOffset||0;h*h*100>s&&(h=l/10);const u=h/2,d=.2+.2*D(i);let p=i.bowing*i.maxRandomnessOffset*(n-e)/200,f=i.bowing*i.maxRandomnessOffset*(t-r)/200;p=O(p,i,c),f=O(f,i,c);const g=[],m=()=>O(u,i,c),y=()=>O(h,i,c),x=i.preserveVertices;return a&&(o?g.push({op:"move",data:[t+(x?0:m()),e+(x?0:m())]}):g.push({op:"move",data:[t+(x?0:O(h,i,c)),e+(x?0:O(h,i,c))]})),o?g.push({op:"bcurveTo",data:[p+t+(r-t)*d+m(),f+e+(n-e)*d+m(),p+t+2*(r-t)*d+m(),f+e+2*(n-e)*d+m(),r+(x?0:m()),n+(x?0:m())]}):g.push({op:"bcurveTo",data:[p+t+(r-t)*d+y(),f+e+(n-e)*d+y(),p+t+2*(r-t)*d+y(),f+e+2*(n-e)*d+y(),r+(x?0:y()),n+(x?0:y())]}),g}function R(t,e,r){if(!t.length)return[];const n=[];n.push([t[0][0]+O(e,r),t[0][1]+O(e,r)]),n.push([t[0][0]+O(e,r),t[0][1]+O(e,r)]);for(let i=1;i3){const a=[],o=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let e=1;e+21&&i.push(r)):i.push(r),i.push(t[e+3])}else{const n=.5,a=t[e+0],o=t[e+1],s=t[e+2],l=t[e+3],c=Y(a,o,n),h=Y(o,s,n),u=Y(s,l,n),d=Y(c,h,n),p=Y(h,u,n),f=Y(d,p,n);X([a,c,d,f],0,r,i),X([f,p,u,l],0,r,i)}var a,o;return i}function V(t,e){return Z(t,0,t.length,e)}function Z(t,e,r,n,i){const a=i||[],o=t[e],s=t[r-1];let l=0,c=1;for(let h=e+1;hl&&(l=e,c=h)}return Math.sqrt(l)>n?(Z(t,e,c+1,n,a),Z(t,c,r,n,a)):(a.length||a.push(o),a.push(s)),a}function Q(t,e=.15,r){const n=[],i=(t.length-1)/3;for(let a=0;a0?Z(n,0,n.length,r):n}const J="none";class tt{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,r){return{shape:t,sets:e||[],options:r||this.defaultOptions}}line(t,e,r,n,i){const a=this._o(i);return this._d("line",[v(t,e,r,n,a)],a)}rectangle(t,e,r,n,i){const a=this._o(i),o=[],s=function(t,e,r,n,i){return function(t,e){return S(t,!0,e)}([[t,e],[t+r,e],[t+r,e+n],[t,e+n]],i)}(t,e,r,n,a);if(a.fill){const i=[[t,e],[t+r,e],[t+r,e+n],[t,e+n]];"solid"===a.fillStyle?o.push(F([i],a)):o.push($([i],a))}return a.stroke!==J&&o.push(s),this._d("rectangle",o,a)}ellipse(t,e,r,n,i){const a=this._o(i),o=[],s=A(r,n,a),l=M(t,e,a,s);if(a.fill)if("solid"===a.fillStyle){const r=M(t,e,a,s).opset;r.type="fillPath",o.push(r)}else o.push($([l.estimatedPoints],a));return a.stroke!==J&&o.push(l.opset),this._d("ellipse",o,a)}circle(t,e,r,n){const i=this.ellipse(t,e,r,r,n);return i.shape="circle",i}linearPath(t,e){const r=this._o(e);return this._d("linearPath",[S(t,!1,r)],r)}arc(t,e,r,n,i,a,o=!1,s){const l=this._o(s),c=[],h=B(t,e,r,n,i,a,o,!0,l);if(o&&l.fill)if("solid"===l.fillStyle){const o=Object.assign({},l);o.disableMultiStroke=!0;const s=B(t,e,r,n,i,a,!0,!1,o);s.type="fillPath",c.push(s)}else c.push(function(t,e,r,n,i,a,o){const s=t,l=e;let c=Math.abs(r/2),h=Math.abs(n/2);c+=O(.01*c,o),h+=O(.01*h,o);let u=i,d=a;for(;u<0;)u+=2*Math.PI,d+=2*Math.PI;d-u>2*Math.PI&&(u=0,d=2*Math.PI);const p=(d-u)/o.curveStepCount,f=[];for(let g=u;g<=d;g+=p)f.push([s+c*Math.cos(g),l+h*Math.sin(g)]);return f.push([s+c*Math.cos(d),l+h*Math.sin(d)]),f.push([s,l]),$([f],o)}(t,e,r,n,i,a,l));return l.stroke!==J&&c.push(h),this._d("arc",c,l)}curve(t,e){const r=this._o(e),n=[],i=T(t,r);if(r.fill&&r.fill!==J)if("solid"===r.fillStyle){const e=T(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(e.ops)})}else{const e=[],i=t;if(i.length){const t="number"==typeof i[0][0]?[i]:i;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Q(H([n[0],n[0],n[1],n[2]]),10,(1+r.roughness)/2)):e.push(...Q(H(n),10,(1+r.roughness)/2))}e.length&&n.push($([e],r))}return r.stroke!==J&&n.push(i),this._d("curve",n,r)}polygon(t,e){const r=this._o(e),n=[],i=S(t,!0,r);return r.fill&&("solid"===r.fillStyle?n.push(F([t],r)):n.push($([t],r))),r.stroke!==J&&n.push(i),this._d("polygon",n,r)}path(t,e){const r=this._o(e),n=[];if(!t)return this._d("path",n,r);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");const i=r.fill&&"transparent"!==r.fill&&r.fill!==J,a=r.stroke!==J,o=!!(r.simplification&&r.simplification<1),s=function(t,e,r){const n=C(b(x(t))),i=[];let a=[],o=[0,0],s=[];const l=()=>{s.length>=4&&a.push(...Q(s,1)),s=[]},c=()=>{l(),a.length&&(i.push(a),a=[])};for(const{key:u,data:d}of n)switch(u){case"M":c(),o=[d[0],d[1]],a.push(o);break;case"L":l(),a.push([d[0],d[1]]);break;case"C":if(!s.length){const t=a.length?a[a.length-1]:o;s.push([t[0],t[1]])}s.push([d[0],d[1]]),s.push([d[2],d[3]]),s.push([d[4],d[5]]);break;case"Z":l(),a.push([o[0],o[1]])}if(c(),!r)return i;const h=[];for(const u of i){const t=V(u,r);t.length&&h.push(t)}return h}(t,0,o?4-4*(r.simplification||1):(1+r.roughness)/2),l=L(t,r);if(i)if("solid"===r.fillStyle)if(1===s.length){const e=L(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(e.ops)})}else n.push(F(s,r));else n.push($(s,r));return a&&(o?s.forEach(t=>{n.push(S(t,!1,r))}):n.push(l)),this._d("path",n,r)}opsToPath(t,e){let r="";for(const n of t.ops){const t="number"==typeof e&&e>=0?n.data.map(t=>+t.toFixed(e)):n.data;switch(n.op){case"move":r+=`M${t[0]} ${t[1]} `;break;case"bcurveTo":r+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case"lineTo":r+=`L${t[0]} ${t[1]} `}}return r.trim()}toPaths(t){const e=t.sets||[],r=t.options||this.defaultOptions,n=[];for(const i of e){let t=null;switch(i.type){case"path":t={d:this.opsToPath(i),stroke:r.stroke,strokeWidth:r.strokeWidth,fill:J};break;case"fillPath":t={d:this.opsToPath(i),stroke:J,strokeWidth:0,fill:r.fill||J};break;case"fillSketch":t=this.fillSketch(i,r)}t&&n.push(t)}return n}fillSketch(t,e){let r=e.fillWeight;return r<0&&(r=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||J,strokeWidth:r,fill:J}}_mergedShape(t){return t.filter((t,e)=>0===e||"move"!==t.op)}}class et{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new tt(e)}draw(t){const e=t.sets||[],r=t.options||this.getDefaultOptions(),n=this.ctx,i=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case"path":n.save(),n.strokeStyle="none"===r.stroke?"transparent":r.stroke,n.lineWidth=r.strokeWidth,r.strokeLineDash&&n.setLineDash(r.strokeLineDash),r.strokeLineDashOffset&&(n.lineDashOffset=r.strokeLineDashOffset),this._drawToContext(n,a,i),n.restore();break;case"fillPath":{n.save(),n.fillStyle=r.fill||"";const e="curve"===t.shape||"polygon"===t.shape||"path"===t.shape?"evenodd":"nonzero";this._drawToContext(n,a,i,e),n.restore();break}case"fillSketch":this.fillSketch(n,a,r)}}fillSketch(t,e,r){let n=r.fillWeight;n<0&&(n=r.strokeWidth/2),t.save(),r.fillLineDash&&t.setLineDash(r.fillLineDash),r.fillLineDashOffset&&(t.lineDashOffset=r.fillLineDashOffset),t.strokeStyle=r.fill||"",t.lineWidth=n,this._drawToContext(t,e,r.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,r,n="nonzero"){t.beginPath();for(const i of e.ops){const e="number"==typeof r&&r>=0?i.data.map(t=>+t.toFixed(r)):i.data;switch(i.op){case"move":t.moveTo(e[0],e[1]);break;case"bcurveTo":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case"lineTo":t.lineTo(e[0],e[1])}}"fillPath"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,r,n,i){const a=this.gen.line(t,e,r,n,i);return this.draw(a),a}rectangle(t,e,r,n,i){const a=this.gen.rectangle(t,e,r,n,i);return this.draw(a),a}ellipse(t,e,r,n,i){const a=this.gen.ellipse(t,e,r,n,i);return this.draw(a),a}circle(t,e,r,n){const i=this.gen.circle(t,e,r,n);return this.draw(i),i}linearPath(t,e){const r=this.gen.linearPath(t,e);return this.draw(r),r}polygon(t,e){const r=this.gen.polygon(t,e);return this.draw(r),r}arc(t,e,r,n,i,a,o=!1,s){const l=this.gen.arc(t,e,r,n,i,a,o,s);return this.draw(l),l}curve(t,e){const r=this.gen.curve(t,e);return this.draw(r),r}path(t,e){const r=this.gen.path(t,e);return this.draw(r),r}}const rt="http://www.w3.org/2000/svg";class nt{constructor(t,e){this.svg=t,this.gen=new tt(e)}draw(t){const e=t.sets||[],r=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,i=n.createElementNS(rt,"g"),a=t.options.fixedDecimalPlaceDigits;for(const o of e){let e=null;switch(o.type){case"path":e=n.createElementNS(rt,"path"),e.setAttribute("d",this.opsToPath(o,a)),e.setAttribute("stroke",r.stroke),e.setAttribute("stroke-width",r.strokeWidth+""),e.setAttribute("fill","none"),r.strokeLineDash&&e.setAttribute("stroke-dasharray",r.strokeLineDash.join(" ").trim()),r.strokeLineDashOffset&&e.setAttribute("stroke-dashoffset",`${r.strokeLineDashOffset}`);break;case"fillPath":e=n.createElementNS(rt,"path"),e.setAttribute("d",this.opsToPath(o,a)),e.setAttribute("stroke","none"),e.setAttribute("stroke-width","0"),e.setAttribute("fill",r.fill||""),"curve"!==t.shape&&"polygon"!==t.shape||e.setAttribute("fill-rule","evenodd");break;case"fillSketch":e=this.fillSketch(n,o,r)}e&&i.appendChild(e)}return i}fillSketch(t,e,r){let n=r.fillWeight;n<0&&(n=r.strokeWidth/2);const i=t.createElementNS(rt,"path");return i.setAttribute("d",this.opsToPath(e,r.fixedDecimalPlaceDigits)),i.setAttribute("stroke",r.fill||""),i.setAttribute("stroke-width",n+""),i.setAttribute("fill","none"),r.fillLineDash&&i.setAttribute("stroke-dasharray",r.fillLineDash.join(" ").trim()),r.fillLineDashOffset&&i.setAttribute("stroke-dashoffset",`${r.fillLineDashOffset}`),i}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,r,n,i){const a=this.gen.line(t,e,r,n,i);return this.draw(a)}rectangle(t,e,r,n,i){const a=this.gen.rectangle(t,e,r,n,i);return this.draw(a)}ellipse(t,e,r,n,i){const a=this.gen.ellipse(t,e,r,n,i);return this.draw(a)}circle(t,e,r,n){const i=this.gen.circle(t,e,r,n);return this.draw(i)}linearPath(t,e){const r=this.gen.linearPath(t,e);return this.draw(r)}polygon(t,e){const r=this.gen.polygon(t,e);return this.draw(r)}arc(t,e,r,n,i,a,o=!1,s){const l=this.gen.arc(t,e,r,n,i,a,o,s);return this.draw(l)}curve(t,e){const r=this.gen.curve(t,e);return this.draw(r)}path(t,e){const r=this.gen.path(t,e);return this.draw(r)}}var it={canvas:(t,e)=>new et(t,e),svg:(t,e)=>new nt(t,e),generator:t=>new tt(t),newSeed:()=>tt.newSeed()}},30092:(t,e,r)=>{"use strict";r.d(e,{W6:()=>te,GZ:()=>ie,WY:()=>Pt,pC:()=>It,hE:()=>ne,Gc:()=>Nt});var n=r(13226),i=r(67633),a=r(40797);const o=(t,e)=>!!t&&!(!(e&&""===t.prefix||t.prefix)||!t.name),s=Object.freeze({left:0,top:0,width:16,height:16}),l=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),c=Object.freeze({...s,...l}),h=Object.freeze({...c,body:"",hidden:!1});function u(t,e){const r=function(t,e){const r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);const n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}(t,e);for(const n in h)n in l?n in t&&!(n in r)&&(r[n]=l[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}function d(t,e,r){const n=t.icons,i=t.aliases||Object.create(null);let a={};function o(t){a=u(n[t]||i[t],a)}return o(e),r.forEach(o),u(t,a)}function p(t,e){if(t.icons[e])return d(t,e,[]);const r=function(t,e){const r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);return(e||Object.keys(r).concat(Object.keys(n))).forEach(function t(e){if(r[e])return i[e]=[];if(!(e in i)){i[e]=null;const r=n[e]&&n[e].parent,a=r&&t(r);a&&(i[e]=[r].concat(a))}return i[e]}),i}(t,[e])[e];return r?d(t,e,r):null}const f=Object.freeze({width:null,height:null}),g=Object.freeze({...f,...l}),m=/(-?[0-9.]*[0-9]+[0-9.]*)/g,y=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function x(t,e,r){if(1===e)return t;if(r=r||100,"number"==typeof t)return Math.ceil(t*e*r)/r;if("string"!=typeof t)return t;const n=t.split(m);if(null===n||!n.length)return t;const i=[];let a=n.shift(),o=y.test(a);for(;;){if(o){const t=parseFloat(a);isNaN(t)?i.push(a):i.push(Math.ceil(t*e*r)/r)}else i.push(a);if(a=n.shift(),void 0===a)return i.join("");o=!o}}const b=/\sid="(\S+)"/g,C="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let k=0;var w=r(70451);function _(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var v={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function S(t){v=t}var T={exec:()=>null};function A(t,e=""){let r="string"==typeof t?t:t.source,n={replace:(t,e)=>{let i="string"==typeof e?e:e.source;return i=i.replace(M.caret,"$1"),r=r.replace(t,i),n},getRegex:()=>new RegExp(r,e)};return n}var M={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[\t ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i")},B=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,L=/(?:[*+-]|\d{1,9}[.)])/,F=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,$=A(F).replace(/bull/g,L).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),E=A(F).replace(/bull/g,L).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),D=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,N=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,O=A(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",N).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),j=A(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,L).getRegex(),I="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",R=/|$))/,K=A("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",R).replace("tag",I).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),P=A(D).replace("hr",B).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",I).getRegex(),z={blockquote:A(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",P).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:O,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:B,html:K,lheading:$,list:j,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:P,table:T,text:/^[^\n]+/},q=A("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",B).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",I).getRegex(),W={...z,lheading:E,table:q,paragraph:A(D).replace("hr",B).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",q).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",I).getRegex()},H={...z,html:A("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",R).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:T,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:A(D).replace("hr",B).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},U=/^( {2,}|\\)\n(?!\s*$)/,G=/[\p{P}\p{S}]/u,Y=/[\s\p{P}\p{S}]/u,X=/[^\s\p{P}\p{S}]/u,V=A(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Y).getRegex(),Z=/(?!~)[\p{P}\p{S}]/u,Q=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,J=A(Q,"u").replace(/punct/g,G).getRegex(),tt=A(Q,"u").replace(/punct/g,Z).getRegex(),et="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",rt=A(et,"gu").replace(/notPunctSpace/g,X).replace(/punctSpace/g,Y).replace(/punct/g,G).getRegex(),nt=A(et,"gu").replace(/notPunctSpace/g,/(?:[^\s\p{P}\p{S}]|~)/u).replace(/punctSpace/g,/(?!~)[\s\p{P}\p{S}]/u).replace(/punct/g,Z).getRegex(),it=A("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,X).replace(/punctSpace/g,Y).replace(/punct/g,G).getRegex(),at=A(/\\(punct)/,"gu").replace(/punct/g,G).getRegex(),ot=A(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),st=A(R).replace("(?:--\x3e|$)","--\x3e").getRegex(),lt=A("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",st).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),ct=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,ht=A(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",ct).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),ut=A(/^!?\[(label)\]\[(ref)\]/).replace("label",ct).replace("ref",N).getRegex(),dt=A(/^!?\[(ref)\](?:\[\])?/).replace("ref",N).getRegex(),pt={_backpedal:T,anyPunctuation:at,autolink:ot,blockSkip:/\[[^\[\]]*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)|`[^`]*?`|<(?! )[^<>]*?>/g,br:U,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:T,emStrongLDelim:J,emStrongRDelimAst:rt,emStrongRDelimUnd:it,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,link:ht,nolink:dt,punctuation:V,reflink:ut,reflinkSearch:A("reflink|nolink(?!\\()","g").replace("reflink",ut).replace("nolink",dt).getRegex(),tag:lt,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Ct=t=>bt[t];function kt(t,e){if(e){if(M.escapeTest.test(t))return t.replace(M.escapeReplace,Ct)}else if(M.escapeTestNoEncode.test(t))return t.replace(M.escapeReplaceNoEncode,Ct);return t}function wt(t){try{t=encodeURI(t).replace(M.percentDecode,"%")}catch{return null}return t}function _t(t,e){let r=t.replace(M.findPipe,(t,e,r)=>{let n=!1,i=e;for(;--i>=0&&"\\"===r[i];)n=!n;return n?"|":" |"}).split(M.splitPipe),n=0;if(r[0].trim()||r.shift(),r.length>0&&!r.at(-1)?.trim()&&r.pop(),e)if(r.length>e)r.splice(e);else for(;r.length0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let t=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?t:vt(t,"\n")}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let t=e[0],r=function(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(null===n)return e;let i=n[1];return e.split("\n").map(t=>{let e=t.match(r.other.beginningSpace);if(null===e)return t;let[n]=e;return n.length>=i.length?t.slice(i.length):t}).join("\n")}(t,e[3]||"",this.rules);return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:r}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let t=e[2].trim();if(this.rules.other.endingHash.test(t)){let e=vt(t,"#");(this.options.pedantic||!e||this.rules.other.endingSpaceChar.test(e))&&(t=e.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:vt(e[0],"\n")}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let t=vt(e[0],"\n").split("\n"),r="",n="",i=[];for(;t.length>0;){let e,a=!1,o=[];for(e=0;e1,i={type:"list",raw:"",ordered:n,start:n?+r.slice(0,-1):"",loose:!1,items:[]};r=n?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=n?r:"[*+-]");let a=this.rules.other.listItemRegex(r),o=!1;for(;t;){let r=!1,n="",s="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;n=e[0],t=t.substring(n.length);let l=e[2].split("\n",1)[0].replace(this.rules.other.listReplaceTabs,t=>" ".repeat(3*t.length)),c=t.split("\n",1)[0],h=!l.trim(),u=0;if(this.options.pedantic?(u=2,s=l.trimStart()):h?u=e[1].length+1:(u=e[2].search(this.rules.other.nonSpaceChar),u=u>4?1:u,s=l.slice(u),u+=e[1].length),h&&this.rules.other.blankLine.test(c)&&(n+=c+"\n",t=t.substring(c.length+1),r=!0),!r){let e=this.rules.other.nextBulletRegex(u),r=this.rules.other.hrRegex(u),i=this.rules.other.fencesBeginRegex(u),a=this.rules.other.headingBeginRegex(u),o=this.rules.other.htmlBeginRegex(u);for(;t;){let d,p=t.split("\n",1)[0];if(c=p,this.options.pedantic?(c=c.replace(this.rules.other.listReplaceNesting," "),d=c):d=c.replace(this.rules.other.tabCharGlobal," "),i.test(c)||a.test(c)||o.test(c)||e.test(c)||r.test(c))break;if(d.search(this.rules.other.nonSpaceChar)>=u||!c.trim())s+="\n"+d.slice(u);else{if(h||l.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||i.test(l)||a.test(l)||r.test(l))break;s+="\n"+c}!h&&!c.trim()&&(h=!0),n+=p+"\n",t=t.substring(p.length+1),l=d.slice(u)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(n)&&(o=!0));let d,p=null;this.options.gfm&&(p=this.rules.other.listIsTask.exec(s),p&&(d="[ ] "!==p[0],s=s.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:n,task:!!p,checked:d,loose:!1,text:s,tokens:[]}),i.raw+=n}let s=i.items.at(-1);if(!s)return;s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd(),i.raw=i.raw.trimEnd();for(let t=0;t"space"===t.type),r=e.length>0&&e.some(t=>this.rules.other.anyLine.test(t.raw));i.loose=r}if(i.loose)for(let t=0;t({text:t,tokens:this.lexer.inline(t),header:!1,align:a.align[e]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:"="===e[2].charAt(0)?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let t="\n"===e[1].charAt(e[1].length-1)?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let t=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(t)){if(!this.rules.other.endAngleBracket.test(t))return;let e=vt(t.slice(0,-1),"\\");if((t.length-e.length)%2==0)return}else{let t=function(t,e){if(-1===t.indexOf(e[1]))return-1;let r=0;for(let n=0;n0?-2:-1}(e[2],"()");if(-2===t)return;if(t>-1){let r=(0===e[0].indexOf("!")?5:4)+e[1].length+t;e[2]=e[2].substring(0,t),e[0]=e[0].substring(0,r).trim(),e[3]=""}}let r=e[2],n="";if(this.options.pedantic){let t=this.rules.other.pedanticHrefTitle.exec(r);t&&(r=t[1],n=t[3])}else n=e[3]?e[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(r=this.options.pedantic&&!this.rules.other.endAngleBracket.test(t)?r.slice(1):r.slice(1,-1)),St(e,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let t=e[(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," ").toLowerCase()];if(!t){let t=r[0].charAt(0);return{type:"text",raw:t,text:t}}return St(r,t,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let n=this.rules.inline.emStrongLDelim.exec(t);if(!(!n||n[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!n[1]&&!n[2]||!r||this.rules.inline.punctuation.exec(r))){let r,i,a=[...n[0]].length-1,o=a,s=0,l="*"===n[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,e=e.slice(-1*t.length+a);null!=(n=l.exec(e));){if(r=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!r)continue;if(i=[...r].length,n[3]||n[4]){o+=i;continue}if((n[5]||n[6])&&a%3&&!((a+i)%3)){s+=i;continue}if(o-=i,o>0)continue;i=Math.min(i,i+o+s);let e=[...n[0]][0].length,l=t.slice(0,a+n.index+e+i);if(Math.min(a,i)%2){let t=l.slice(1,-1);return{type:"em",raw:l,text:t,tokens:this.lexer.inlineTokens(t)}}let c=l.slice(2,-2);return{type:"strong",raw:l,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let t=e[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(t),n=this.rules.other.startingSpaceChar.test(t)&&this.rules.other.endingSpaceChar.test(t);return r&&n&&(t=t.substring(1,t.length-1)),{type:"codespan",raw:e[0],text:t}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let t,r;return"@"===e[2]?(t=e[1],r="mailto:"+t):(t=e[1],r=t),{type:"link",raw:e[0],text:t,href:r,tokens:[{type:"text",raw:t,text:t}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let t,r;if("@"===e[2])t=e[0],r="mailto:"+t;else{let n;do{n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??""}while(n!==e[0]);t=e[0],r="www."===e[1]?"http://"+e[0]:e[0]}return{type:"link",raw:e[0],text:t,href:r,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let t=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:t}}}},At=class t{tokens;options;state;tokenizer;inlineQueue;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||v,this.options.tokenizer=this.options.tokenizer||new Tt,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let e={other:M,block:yt.normal,inline:xt.normal};this.options.pedantic?(e.block=yt.pedantic,e.inline=xt.pedantic):this.options.gfm&&(e.block=yt.gfm,this.options.breaks?e.inline=xt.breaks:e.inline=xt.gfm),this.tokenizer.rules=e}static get rules(){return{block:yt,inline:xt}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(t){t=t.replace(M.carriageReturn,"\n"),this.blockTokens(t,this.tokens);for(let e=0;e!!(n=r.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))continue;if(n=this.tokenizer.space(t)){t=t.substring(n.raw.length);let r=e.at(-1);1===n.raw.length&&void 0!==r?r.raw+="\n":e.push(n);continue}if(n=this.tokenizer.code(t)){t=t.substring(n.raw.length);let r=e.at(-1);"paragraph"===r?.type||"text"===r?.type?(r.raw+=(r.raw.endsWith("\n")?"":"\n")+n.raw,r.text+="\n"+n.text,this.inlineQueue.at(-1).src=r.text):e.push(n);continue}if(n=this.tokenizer.fences(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.heading(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.hr(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.blockquote(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.list(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.html(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.def(t)){t=t.substring(n.raw.length);let r=e.at(-1);"paragraph"===r?.type||"text"===r?.type?(r.raw+=(r.raw.endsWith("\n")?"":"\n")+n.raw,r.text+="\n"+n.raw,this.inlineQueue.at(-1).src=r.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},e.push(n));continue}if(n=this.tokenizer.table(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.lheading(t)){t=t.substring(n.raw.length),e.push(n);continue}let i=t;if(this.options.extensions?.startBlock){let e,r=1/0,n=t.slice(1);this.options.extensions.startBlock.forEach(t=>{e=t.call({lexer:this},n),"number"==typeof e&&e>=0&&(r=Math.min(r,e))}),r<1/0&&r>=0&&(i=t.substring(0,r+1))}if(this.state.top&&(n=this.tokenizer.paragraph(i))){let a=e.at(-1);r&&"paragraph"===a?.type?(a.raw+=(a.raw.endsWith("\n")?"":"\n")+n.raw,a.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):e.push(n),r=i.length!==t.length,t=t.substring(n.raw.length);continue}if(n=this.tokenizer.text(t)){t=t.substring(n.raw.length);let r=e.at(-1);"text"===r?.type?(r.raw+=(r.raw.endsWith("\n")?"":"\n")+n.raw,r.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):e.push(n);continue}if(t){let e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}return this.state.top=!0,e}inline(t,e=[]){return this.inlineQueue.push({src:t,tokens:e}),e}inlineTokens(t,e=[]){let r=t,n=null;if(this.tokens.links){let t=Object.keys(this.tokens.links);if(t.length>0)for(;null!=(n=this.tokenizer.rules.inline.reflinkSearch.exec(r));)t.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(r=r.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(n=this.tokenizer.rules.inline.anyPunctuation.exec(r));)r=r.slice(0,n.index)+"++"+r.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;null!=(n=this.tokenizer.rules.inline.blockSkip.exec(r));)r=r.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);r=this.options.hooks?.emStrongMask?.call({lexer:this},r)??r;let i=!1,a="";for(;t;){let n;if(i||(a=""),i=!1,this.options.extensions?.inline?.some(r=>!!(n=r.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))continue;if(n=this.tokenizer.escape(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.tag(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.link(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(n.raw.length);let r=e.at(-1);"text"===n.type&&"text"===r?.type?(r.raw+=n.raw,r.text+=n.text):e.push(n);continue}if(n=this.tokenizer.emStrong(t,r,a)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.codespan(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.br(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.del(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.autolink(t)){t=t.substring(n.raw.length),e.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(t))){t=t.substring(n.raw.length),e.push(n);continue}let o=t;if(this.options.extensions?.startInline){let e,r=1/0,n=t.slice(1);this.options.extensions.startInline.forEach(t=>{e=t.call({lexer:this},n),"number"==typeof e&&e>=0&&(r=Math.min(r,e))}),r<1/0&&r>=0&&(o=t.substring(0,r+1))}if(n=this.tokenizer.inlineText(o)){t=t.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(a=n.raw.slice(-1)),i=!0;let r=e.at(-1);"text"===r?.type?(r.raw+=n.raw,r.text+=n.text):e.push(n);continue}if(t){let e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}return e}},Mt=class{options;parser;constructor(t){this.options=t||v}space(t){return""}code({text:t,lang:e,escaped:r}){let n=(e||"").match(M.notSpaceStart)?.[0],i=t.replace(M.endingNewline,"")+"\n";return n?'
'+(r?i:kt(i,!0))+"
\n":"
"+(r?i:kt(i,!0))+"
\n"}blockquote({tokens:t}){return`
\n${this.parser.parse(t)}
\n`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)}\n`}hr(t){return"
\n"}list(t){let e=t.ordered,r=t.start,n="";for(let a=0;a\n"+n+"\n"}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?"paragraph"===t.tokens[0]?.type?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=r+" "+kt(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`
  • ${e}
  • \n`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    \n`}table(t){let e="",r="";for(let i=0;i${n}`),"\n\n"+e+"\n"+n+"
    \n"}tablerow({text:t}){return`\n${t}\n`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`\n`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${kt(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:r}){let n=this.parser.parseInline(r),i=wt(t);if(null===i)return n;let a='
    ",a}image({href:t,title:e,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));let i=wt(t);if(null===i)return kt(r);let a=`${r}{let i=t[n].flat(1/0);r=r.concat(this.walkTokens(i,e))}):t.tokens&&(r=r.concat(this.walkTokens(t.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(t=>{let r={...t};if(r.async=this.defaults.async||r.async||!1,t.extensions&&(t.extensions.forEach(t=>{if(!t.name)throw new Error("extension name required");if("renderer"in t){let r=e.renderers[t.name];e.renderers[t.name]=r?function(...e){let n=t.renderer.apply(this,e);return!1===n&&(n=r.apply(this,e)),n}:t.renderer}if("tokenizer"in t){if(!t.level||"block"!==t.level&&"inline"!==t.level)throw new Error("extension level must be 'block' or 'inline'");let r=e[t.level];r?r.unshift(t.tokenizer):e[t.level]=[t.tokenizer],t.start&&("block"===t.level?e.startBlock?e.startBlock.push(t.start):e.startBlock=[t.start]:"inline"===t.level&&(e.startInline?e.startInline.push(t.start):e.startInline=[t.start]))}"childTokens"in t&&t.childTokens&&(e.childTokens[t.name]=t.childTokens)}),r.extensions=e),t.renderer){let e=this.defaults.renderer||new Mt(this.defaults);for(let r in t.renderer){if(!(r in e))throw new Error(`renderer '${r}' does not exist`);if(["options","parser"].includes(r))continue;let n=r,i=t.renderer[n],a=e[n];e[n]=(...t)=>{let r=i.apply(e,t);return!1===r&&(r=a.apply(e,t)),r||""}}r.renderer=e}if(t.tokenizer){let e=this.defaults.tokenizer||new Tt(this.defaults);for(let r in t.tokenizer){if(!(r in e))throw new Error(`tokenizer '${r}' does not exist`);if(["options","rules","lexer"].includes(r))continue;let n=r,i=t.tokenizer[n],a=e[n];e[n]=(...t)=>{let r=i.apply(e,t);return!1===r&&(r=a.apply(e,t)),r}}r.tokenizer=e}if(t.hooks){let e=this.defaults.hooks||new Ft;for(let r in t.hooks){if(!(r in e))throw new Error(`hook '${r}' does not exist`);if(["options","block"].includes(r))continue;let n=r,i=t.hooks[n],a=e[n];Ft.passThroughHooks.has(r)?e[n]=t=>{if(this.defaults.async&&Ft.passThroughHooksRespectAsync.has(r))return Promise.resolve(i.call(e,t)).then(t=>a.call(e,t));let n=i.call(e,t);return a.call(e,n)}:e[n]=(...t)=>{let r=i.apply(e,t);return!1===r&&(r=a.apply(e,t)),r}}r.hooks=e}if(t.walkTokens){let e=this.defaults.walkTokens,n=t.walkTokens;r.walkTokens=function(t){let r=[];return r.push(n.call(this,t)),e&&(r=r.concat(e.call(this,t))),r}}this.defaults={...this.defaults,...r}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return At.lex(t,e??this.defaults)}parser(t,e){return Lt.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let n={...r},i={...this.defaults,...n},a=this.onError(!!i.silent,!!i.async);if(!0===this.defaults.async&&!1===n.async)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||null===e)return a(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof e)return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=t);let o=i.hooks?i.hooks.provideLexer():t?At.lex:At.lexInline,s=i.hooks?i.hooks.provideParser():t?Lt.parse:Lt.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(e):e).then(t=>o(t,i)).then(t=>i.hooks?i.hooks.processAllTokens(t):t).then(t=>i.walkTokens?Promise.all(this.walkTokens(t,i.walkTokens)).then(()=>t):t).then(t=>s(t,i)).then(t=>i.hooks?i.hooks.postprocess(t):t).catch(a);try{i.hooks&&(e=i.hooks.preprocess(e));let t=o(e,i);i.hooks&&(t=i.hooks.processAllTokens(t)),i.walkTokens&&this.walkTokens(t,i.walkTokens);let r=s(t,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(l){return a(l)}}}onError(t,e){return r=>{if(r.message+="\nPlease report this to https://github.com/markedjs/marked.",t){let t="

    An error occurred:

    "+kt(r.message+"",!0)+"
    ";return e?Promise.resolve(t):t}if(e)return Promise.reject(r);throw r}}};function Et(t,e){return $t.parse(t,e)}Et.options=Et.setOptions=function(t){return $t.setOptions(t),Et.defaults=$t.defaults,S(Et.defaults),Et},Et.getDefaults=_,Et.defaults=v,Et.use=function(...t){return $t.use(...t),Et.defaults=$t.defaults,S(Et.defaults),Et},Et.walkTokens=function(t,e){return $t.walkTokens(t,e)},Et.parseInline=$t.parseInline,Et.Parser=Lt,Et.parser=Lt.parse,Et.Renderer=Mt,Et.TextRenderer=Bt,Et.Lexer=At,Et.lexer=At.lex,Et.Tokenizer=Tt,Et.Hooks=Ft,Et.parse=Et;Et.options,Et.setOptions,Et.use,Et.walkTokens,Et.parseInline,Lt.parse,At.lex;var Dt=r(60513),Nt={body:'?',height:80,width:80},Ot=new Map,jt=new Map,It=(0,a.K2)(t=>{for(const e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(a.Rm.debug("Registering icon pack:",e.name),"loader"in e)jt.set(e.name,e.loader);else{if(!("icons"in e))throw a.Rm.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.');Ot.set(e.name,e.icons)}}},"registerIconPacks"),Rt=(0,a.K2)(async(t,e)=>{const r=((t,e,r,n="")=>{const i=t.split(":");if("@"===t.slice(0,1)){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const t=i.pop(),r=i.pop(),a={provider:i.length>0?i[0]:n,prefix:r,name:t};return e&&!o(a)?null:a}const a=i[0],s=a.split("-");if(s.length>1){const t={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!o(t)?null:t}if(r&&""===n){const t={provider:n,prefix:"",name:a};return e&&!o(t,r)?null:t}return null})(t,!0,void 0!==e);if(!r)throw new Error(`Invalid icon name: ${t}`);const n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=Ot.get(n);if(!i){const t=jt.get(n);if(!t)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await t(),prefix:n},Ot.set(n,i)}catch(l){throw a.Rm.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}const s=p(i,r.name);if(!s)throw new Error(`Icon not found: ${t}`);return s},"getRegisteredIconData"),Kt=(0,a.K2)(async t=>{try{return await Rt(t),!0}catch{return!1}},"isIconAvailable"),Pt=(0,a.K2)(async(t,e,r)=>{let n;try{n=await Rt(t,e?.fallbackPrefix)}catch(l){a.Rm.error(l),n=Nt}const o=function(t,e){const r={...c,...t},n={...g,...e},i={left:r.left,top:r.top,width:r.width,height:r.height};let a=r.body;[r,n].forEach(t=>{const e=[],r=t.hFlip,n=t.vFlip;let o,s=t.rotate;switch(r?n?s+=2:(e.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),e.push("scale(-1 1)"),i.top=i.left=0):n&&(e.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),e.push("scale(1 -1)"),i.top=i.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:o=i.height/2+i.top,e.unshift("rotate(90 "+o.toString()+" "+o.toString()+")");break;case 2:e.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:o=i.width/2+i.left,e.unshift("rotate(-90 "+o.toString()+" "+o.toString()+")")}s%2==1&&(i.left!==i.top&&(o=i.left,i.left=i.top,i.top=o),i.width!==i.height&&(o=i.width,i.width=i.height,i.height=o)),e.length&&(a=function(t,e,r){const n=function(t,e="defs"){let r="";const n=t.indexOf("<"+e);for(;n>=0;){const i=t.indexOf(">",n),a=t.indexOf("",a);if(-1===o)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(o+1)}return{defs:r,content:t}}(t);return i=n.defs,a=e+n.content+r,i?""+i+""+a:a;var i,a}(a,'',""))});const o=n.width,s=n.height,l=i.width,h=i.height;let u,d;null===o?(d=null===s?"1em":"auto"===s?h:s,u=x(d,l/h)):(u="auto"===o?l:o,d=null===s?x(u,h/l):"auto"===s?h:s);const p={},f=(t,e)=>{(t=>"unset"===t||"undefined"===t||"none"===t)(e)||(p[t]=e.toString())};f("width",u),f("height",d);const m=[i.left,i.top,l,h];return p.viewBox=m.join(" "),{attributes:p,viewBox:m,body:a}}(n,e),s=function(t,e){let r=-1===t.indexOf("xlink:")?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}(function(t,e=C){const r=[];let n;for(;n=b.exec(t);)r.push(n[1]);if(!r.length)return t;const i="suffix"+(16777216*Math.random()|Date.now()).toString(16);return r.forEach(r=>{const n="function"==typeof e?e(r):e+(k++).toString(),a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+a+')([")]|\\.[a-z])',"g"),"$1"+n+i+"$3")}),t=t.replace(new RegExp(i,"g"),"")}(o.body),{...o.attributes,...r});return(0,i.jZ)(s,(0,i.zj)())},"getIconSVG");function zt(t,{markdownAutoWrap:e}){const r=t.replace(//g,"\n").replace(/\n{2,}/g,"\n"),n=(0,Dt.T)(r);return!1===e?n.replace(/ /g," "):n}function qt(t,e={}){const r=zt(t,e),n=Et.lexer(r),i=[[]];let o=0;function s(t,e="normal"){if("text"===t.type){t.text.split("\n").forEach((t,r)=>{0!==r&&(o++,i.push([])),t.split(" ").forEach(t=>{(t=t.replace(/'/g,"'"))&&i[o].push({content:t,type:e})})})}else"strong"===t.type||"em"===t.type?t.tokens.forEach(e=>{s(e,t.type)}):"html"===t.type&&i[o].push({content:t.text,type:"normal"})}return(0,a.K2)(s,"processNode"),n.forEach(t=>{"paragraph"===t.type?t.tokens?.forEach(t=>{s(t)}):"html"===t.type?i[o].push({content:t.text,type:"normal"}):i[o].push({content:t.raw,type:"normal"})}),i}function Wt(t,{markdownAutoWrap:e}={}){const r=Et.lexer(t);function n(t){return"text"===t.type?!1===e?t.text.replace(/\n */g,"
    ").replace(/ /g," "):t.text.replace(/\n */g,"
    "):"strong"===t.type?`${t.tokens?.map(n).join("")}`:"em"===t.type?`${t.tokens?.map(n).join("")}`:"paragraph"===t.type?`

    ${t.tokens?.map(n).join("")}

    `:"space"===t.type?"":"html"===t.type?`${t.text}`:"escape"===t.type?t.text:(a.Rm.warn(`Unsupported markdown: ${t.type}`),t.raw)}return(0,a.K2)(n,"output"),r.map(n).join("")}function Ht(t){return Intl.Segmenter?[...(new Intl.Segmenter).segment(t)].map(t=>t.segment):[...t]}function Ut(t,e){return Gt(t,[],Ht(e.content),e.type)}function Gt(t,e,r,n){if(0===r.length)return[{content:e.join(""),type:n},{content:"",type:n}];const[i,...a]=r,o=[...e,i];return t([{content:o.join(""),type:n}])?Gt(t,o,a,n):(0===e.length&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function Yt(t,e){if(t.some(({content:t})=>t.includes("\n")))throw new Error("splitLineToFitWidth does not support newlines in the line");return Xt(t,e)}function Xt(t,e,r=[],n=[]){if(0===t.length)return n.length>0&&r.push(n),r.length>0?r:[];let i="";" "===t[0].content&&(i=" ",t.shift());const a=t.shift()??{content:" ",type:"normal"},o=[...n];if(""!==i&&o.push({content:i,type:"normal"}),o.push(a),e(o))return Xt(t,e,r,o);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){const[n,i]=Ut(e,a);r.push([n]),i.content&&t.unshift(i)}return Xt(t,e,r)}function Vt(t,e){e&&t.attr("style",e)}async function Zt(t,e,r,n,a=!1,o=(0,i.zj)()){const s=t.append("foreignObject");s.attr("width",10*r+"px"),s.attr("height",10*r+"px");const l=s.append("xhtml:div"),c=(0,i.Wi)(e.label)?await(0,i.dj)(e.label.replace(i.Y2.lineBreakRegex,"\n"),o):(0,i.jZ)(e.label,o),h=e.isNode?"nodeLabel":"edgeLabel",u=l.append("span");u.html(c),Vt(u,e.labelStyle),u.attr("class",`${h} ${n}`),Vt(l,e.labelStyle),l.style("display","table-cell"),l.style("white-space","nowrap"),l.style("line-height","1.5"),l.style("max-width",r+"px"),l.style("text-align","center"),l.attr("xmlns","http://www.w3.org/1999/xhtml"),a&&l.attr("class","labelBkg");let d=l.node().getBoundingClientRect();return d.width===r&&(l.style("display","table"),l.style("white-space","break-spaces"),l.style("width",r+"px"),d=l.node().getBoundingClientRect()),s.node()}function Qt(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function Jt(t,e,r){const n=t.append("text"),i=Qt(n,1,e);re(i,r);const a=i.node().getComputedTextLength();return n.remove(),a}function te(t,e,r){const n=t.append("text"),i=Qt(n,1,e);re(i,[{content:r,type:"normal"}]);const a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function ee(t,e,r,n=!1){const i=e.append("g"),o=i.insert("rect").attr("class","background").attr("style","stroke: none"),s=i.append("text").attr("y","-10.1");let l=0;for(const c of r){const e=(0,a.K2)(e=>Jt(i,1.1,e)<=t,"checkWidth"),r=e(c)?[c]:Yt(c,e);for(const t of r){re(Qt(s,l,1.1),t),l++}}if(n){const t=s.node().getBBox(),e=2;return o.attr("x",t.x-e).attr("y",t.y-e).attr("width",t.width+2*e).attr("height",t.height+2*e),i.node()}return s.node()}function re(t,e){t.text(""),e.forEach((e,r)=>{const n=t.append("tspan").attr("font-style","em"===e.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===e.type?"bold":"normal");0===r?n.text(e.content):n.text(" "+e.content)})}async function ne(t,e={}){const r=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(t,n,a)=>(r.push((async()=>{const r=`${n}:${a}`;return await Kt(r)?await Pt(r,void 0,{class:"label-icon"}):``})()),t));const n=await Promise.all(r);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>n.shift()??"")}(0,a.K2)(zt,"preprocessMarkdown"),(0,a.K2)(qt,"markdownToLines"),(0,a.K2)(Wt,"markdownToHTML"),(0,a.K2)(Ht,"splitTextToChars"),(0,a.K2)(Ut,"splitWordToFitWidth"),(0,a.K2)(Gt,"splitWordToFitWidthRecursion"),(0,a.K2)(Yt,"splitLineToFitWidth"),(0,a.K2)(Xt,"splitLineToFitWidthRecursion"),(0,a.K2)(Vt,"applyStyle"),(0,a.K2)(Zt,"addHtmlSpan"),(0,a.K2)(Qt,"createTspan"),(0,a.K2)(Jt,"computeWidthOfText"),(0,a.K2)(te,"computeDimensionOfText"),(0,a.K2)(ee,"createFormattedText"),(0,a.K2)(re,"updateTextContentAndStyles"),(0,a.K2)(ne,"replaceIconSubstring");var ie=(0,a.K2)(async(t,e="",{style:r="",isTitle:o=!1,classes:s="",useHtmlLabels:l=!0,isNode:c=!0,width:h=200,addSvgBackground:u=!1}={},d)=>{if(a.Rm.debug("XYZ createText",e,r,o,s,l,c,"addSvgBackground: ",u),l){const a=Wt(e,d),o=await ne((0,n.Sm)(a),d),l=e.replace(/\\\\/g,"\\"),p={isNode:c,label:(0,i.Wi)(e)?l:o,labelStyle:r.replace("fill:","color:")};return await Zt(t,p,h,s,u,d)}{const n=ee(h,t,qt(e.replace(//g,"
    ").replace("
    ","
    "),d),!!e&&u);if(c){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));const t=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");(0,w.Ltv)(n).attr("style",t)}else{const t=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");(0,w.Ltv)(n).select("rect").attr("style",t.replace(/background:/g,"fill:"));const e=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");(0,w.Ltv)(n).select("text").attr("style",e)}return n}},"createText")},30795:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(97481),o=n(r(28774)),s=r(30911),l=n(r(34559));e.default=function(t){const{permalink:e,title:r,subLabel:n,isNext:c}=t;return(0,i.jsxs)(o.default,{className:(0,l.default)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[c?null:(0,i.jsx)(s.IconArrowLeft,{}),(0,i.jsx)(a.Typography,{variant:"body2",className:"pagination-nav__label",children:r}),c?(0,i.jsx)(s.IconArrowRight,{}):null]})}},31409:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={docItemContainer:"docItemContainer_hrrU",docItemGrid:"docItemGrid_SzoZ",gap1:"gap1_XuuQ",toc:"toc_pP_5",tocMobile:"tocMobile_imaF",docItemCol:"docItemCol_F52z"}},31795:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>a});r(96540);var n=r(51107),i=r(74848);function a(t){return(0,i.jsx)(n.A,{...t})}},32387:(t,e,r)=>{"use strict";r.d(e,{Fr:()=>h,GX:()=>c,KX:()=>l,WW:()=>o,ue:()=>a});var n=r(67633),i=r(40797),a=(0,i.K2)(t=>{const{handDrawnSeed:e}=(0,n.D7)();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),o=(0,i.K2)(t=>{const e=s([...t.cssCompiledStyles||[],...t.cssStyles||[],...t.labelStyle||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),s=(0,i.K2)(t=>{const e=new Map;return t.forEach(t=>{const[r,n]=t.split(":");e.set(r.trim(),n?.trim())}),e},"styles2Map"),l=(0,i.K2)(t=>"color"===t||"font-size"===t||"font-family"===t||"font-weight"===t||"font-style"===t||"text-decoration"===t||"text-align"===t||"text-transform"===t||"line-height"===t||"letter-spacing"===t||"word-spacing"===t||"text-shadow"===t||"text-overflow"===t||"white-space"===t||"word-wrap"===t||"word-break"===t||"overflow-wrap"===t||"hyphens"===t,"isLabelStyle"),c=(0,i.K2)(t=>{const{stylesArray:e}=o(t),r=[],n=[],i=[],a=[];return e.forEach(t=>{const e=t[0];l(e)?r.push(t.join(":")+" !important"):(n.push(t.join(":")+" !important"),e.includes("stroke")&&i.push(t.join(":")+" !important"),"fill"===e&&a.push(t.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),h=(0,i.K2)((t,e)=>{const{themeVariables:r,handDrawnSeed:i}=(0,n.D7)(),{nodeBorder:a,mainBkg:s}=r,{stylesMap:l}=o(t);return Object.assign({roughness:.7,fill:l.get("fill")||s,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:l.get("stroke")||a,seed:i,strokeWidth:l.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0],strokeLineDash:u(l.get("stroke-dasharray"))},e)},"userNodeOverrides"),u=(0,i.K2)(t=>{if(!t)return[0,0];const e=t.trim().split(/\s+/).map(Number);if(1===e.length){const t=isNaN(e[0])?0:e[0];return[t,t]}return[isNaN(e[0])?0:e[0],isNaN(e[1])?0:e[1]]},"getStrokeDashArray")},33203:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.useDocTOC=void 0;const i=r(74848),a=r(36513),o=n(r(47471)),s=n(r(72550)),l=n(r(1804)),c=n(r(20821)),h=n(r(67825)),u=n(r(75986)),d=n(r(86068)),p=n(r(51878)),f=n(r(34559)),g=r(44975),m=r(59667),y=n(r(31409)),x=r(60542);function b(){const{frontMatter:t,toc:e}=(0,x.useDoc)(),r=(0,a.useWindowSize)(),n=(0,g.useMedia)("(min-width: 1200px)"),o=t.hide_table_of_contents,s=!o&&e.length>0;return{hidden:o,mobile:s?(0,i.jsx)("div",{className:y.default.tocMobile,children:(0,i.jsx)(u.default,{})}):void 0,desktop:s&&(n||"ssr"===r)?(0,i.jsx)(h.default,{}):void 0}}e.useDocTOC=b,e.default=function({children:t}){const e=b();return(0,i.jsxs)("div",{className:(0,f.default)("row",y.default.docItemGrid),children:[(0,i.jsxs)("div",{className:(0,f.default)(y.default.docItemCol),children:[(0,i.jsx)(p.default,{}),(0,i.jsxs)("div",{className:y.default.docItemContainer,children:[(0,i.jsxs)("article",{children:[(0,i.jsx)(o.default,{}),(0,i.jsx)(d.default,{}),(0,i.jsx)(m.MDXEnhancementContext.Provider,{value:{items:[{component:"heading",position:"after",render:t=>"h1"===t.as&&e.mobile}]},children:(0,i.jsx)(s.default,{children:t})}),(0,i.jsx)(l.default,{})]}),(0,i.jsx)(c.default,{})]})]}),(0,i.jsx)("div",{className:y.default.gap1}),e.desktop&&(0,i.jsx)("div",{className:(0,f.default)(y.default.toc),children:e.desktop})]})}},33858:(t,e,r)=>{"use strict";r.d(e,{A:()=>u});var n=r(88496),i=r(5254),a=r(53098),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1;const s=function(t){return(0,a.A)(t)&&(0,i.A)(t.length)&&!!o[(0,n.A)(t)]};var l=r(52789),c=r(64841),h=c.A&&c.A.isTypedArray;const u=h?(0,l.A)(h):s},36930:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(49540)),o=r(34286);e.default=function(t){return(0,i.jsx)(o.LightBoxWrapper,{children:(0,i.jsx)(a.default,{...t})})}},38446:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(89610),i=r(5254);const a=function(t){return null!=t&&(0,i.A)(t.length)&&!(0,n.A)(t)}},39142:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return function(){return t}}},39759:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";r.d(e,{A:()=>a});var n=r(18744),i=r(41917);const a=(0,n.A)(i.A,"Set")},40367:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t,e){return function(r){return t(e(r))}}},40797:(t,e,r)=>{"use strict";r.d(e,{He:()=>c,K2:()=>a,Rm:()=>l,VA:()=>o});var n=r(74353),i=Object.defineProperty,a=(t,e)=>i(t,"name",{value:e,configurable:!0}),o=(t,e)=>{for(var r in e)i(t,r,{get:e[r],enumerable:!0})},s={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},l={trace:a((...t)=>{},"trace"),debug:a((...t)=>{},"debug"),info:a((...t)=>{},"info"),warn:a((...t)=>{},"warn"),error:a((...t)=>{},"error"),fatal:a((...t)=>{},"fatal")},c=a(function(t="fatal"){let e=s.fatal;"string"==typeof t?t.toLowerCase()in s&&(e=s[t]):"number"==typeof t&&(e=t),l.trace=()=>{},l.debug=()=>{},l.info=()=>{},l.warn=()=>{},l.error=()=>{},l.fatal=()=>{},e<=s.fatal&&(l.fatal=console.error?console.error.bind(console,h("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",h("FATAL"))),e<=s.error&&(l.error=console.error?console.error.bind(console,h("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",h("ERROR"))),e<=s.warn&&(l.warn=console.warn?console.warn.bind(console,h("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",h("WARN"))),e<=s.info&&(l.info=console.info?console.info.bind(console,h("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",h("INFO"))),e<=s.debug&&(l.debug=console.debug?console.debug.bind(console,h("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",h("DEBUG"))),e<=s.trace&&(l.trace=console.debug?console.debug.bind(console,h("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",h("TRACE")))},"setLogLevel"),h=a(t=>`%c${n().format("ss.SSS")} : ${t} : `,"format")},41917:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(72136),i="object"==typeof self&&self&&self.Object===Object&&self;const a=n.A||i||Function("return this")()},42467:(t,e,r)=>{"use strict";r.d(e,{n:()=>n});var n={name:"mermaid",version:"11.12.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.1.1","@iconify/utils":"^3.0.1","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.18",dompurify:"^3.2.5",katex:"^0.16.22",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^16.2.1",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.5","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",canvas:"^3.1.2",chokidar:"3.6.0",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.1.0",jison:"^0.4.18","js-base64":"^3.7.8",jsdom:"^26.1.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.3",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.13","type-fest":"^4.35.0",typedoc:"^0.28.12","typedoc-plugin-markdown":"^4.8.1",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.6.4","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}},42837:(t,e,r)=>{"use strict";r.d(e,{A:()=>D});var n=r(11754),i=r(52528),a=r(66984);const o=function(t,e,r){(void 0!==r&&!(0,a.A)(t[e],r)||void 0===r&&!(e in t))&&(0,i.A)(t,e,r)};var s=r(4574),l=r(80154),c=r(1801),h=r(39759),u=r(18598),d=r(52274),p=r(92049),f=r(53533),g=r(99912),m=r(89610),y=r(23149),x=r(88496),b=r(15647),C=r(53098),k=Function.prototype,w=Object.prototype,_=k.toString,v=w.hasOwnProperty,S=_.call(Object);const T=function(t){if(!(0,C.A)(t)||"[object Object]"!=(0,x.A)(t))return!1;var e=(0,b.A)(t);if(null===e)return!0;var r=v.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&_.call(r)==S};var A=r(33858);const M=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var B=r(22031),L=r(55615);const F=function(t){return(0,B.A)(t,(0,L.A)(t))};const $=function(t,e,r,n,i,a,s){var x=M(t,r),b=M(e,r),C=s.get(b);if(C)o(t,r,C);else{var k=a?a(x,b,r+"",t,e,s):void 0,w=void 0===k;if(w){var _=(0,p.A)(b),v=!_&&(0,g.A)(b),S=!_&&!v&&(0,A.A)(b);k=b,_||v||S?(0,p.A)(x)?k=x:(0,f.A)(x)?k=(0,h.A)(x):v?(w=!1,k=(0,l.A)(b,!0)):S?(w=!1,k=(0,c.A)(b,!0)):k=[]:T(b)||(0,d.A)(b)?(k=x,(0,d.A)(x)?k=F(x):(0,y.A)(x)&&!(0,m.A)(x)||(k=(0,u.A)(b))):w=!1}w&&(s.set(b,k),i(k,b,n,a,s),s.delete(b)),o(t,r,k)}};const E=function t(e,r,i,a,l){e!==r&&(0,s.A)(r,function(s,c){if(l||(l=new n.A),(0,y.A)(s))$(e,r,c,i,t,a,l);else{var h=a?a(M(e,c),s,c+"",e,r,l):void 0;void 0===h&&(h=s),o(e,c,h)}},L.A)};const D=(0,r(3767).A)(function(t,e,r){E(t,e,r)})},43988:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=r(41917).A.Uint8Array},46632:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(29471);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var o=t.apply(this,n);return r.cache=a.set(i,o)||a,o};return r.cache=new(i.Cache||n.A),r}i.Cache=n.A;const a=i},47471:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BreadcrumbsBase=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=r(23908),l=r(36513),c=r(54865),h=r(21312),u=n(r(34559)),d=n(r(2509));function p({children:t,href:e,isLast:r}){const n="breadcrumbs__link";return r?(0,i.jsx)(a.Typography,{variant:"body3",component:"span",className:n,itemProp:"name",children:t}):e?(0,i.jsx)(o.default,{className:n,href:e,itemProp:"item",children:(0,i.jsx)(a.Typography,{variant:"body3",component:"span",itemProp:"name",children:t})}):(0,i.jsx)(a.Typography,{variant:"body3",component:"span",className:n,children:t})}function f({children:t,active:e,index:r,addMicrodata:n}){return(0,i.jsxs)("li",{...n&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.default)("breadcrumbs__item",{"breadcrumbs__item--active":e}),children:[t,(0,i.jsx)("meta",{itemProp:"position",content:String(r+1)})]})}e.BreadcrumbsBase=({homePage:t,homePageLink:e,breadcrumbs:r})=>{if(!r)return null;const n=["events"];return(0,i.jsx)("nav",{className:(0,u.default)(l.ThemeClassNames.docs.docBreadcrumbs,d.default.breadcrumbsContainer),"aria-label":(0,h.translate)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,i.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[!!t&&(0,i.jsx)(o.default,{to:e,className:(0,u.default)("breadcrumbs__item"),children:(0,i.jsx)(a.Typography,{variant:"body3",component:"span",children:t})}),r.map((t,e)=>{const a=e===r.length-1,s=n.includes(t.label);return(0,i.jsx)(f,{active:a,index:e,addMicrodata:!!t.href,children:s?(0,i.jsx)(o.default,{to:`/${t.label}`,children:(0,i.jsx)(p,{href:t.href,isLast:a,children:t.label})}):(0,i.jsx)(p,{href:t.href,isLast:a,children:t.label})},e)})]})})},e.default=function(){const t=(0,s.useSidebarBreadcrumbs)(),r=(0,c.useHomePageRoute)(),n=(0,s.useActivePlugin)();if(!t)return null;const a=n?.pluginData.path;return(0,i.jsx)(e.BreadcrumbsBase,{homePage:r&&(0,h.translate)({id:"theme.docs.breadcrumbs.homePageLabel",message:"Home"}),breadcrumbs:t,homePageLink:a})}},49540:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>sr});var n=r(96540),i=r(67489),a=r(12181),o=r(6342),s=r(95293),l=r(42467),c=r(73590),h=r(73981),u=r(10045),d=(r(5164),r(28698),r(5894),r(63245),r(32387),r(30092)),p=r(13226),f=r(67633),g=r(40797),m=r(60513),y=r(70451),x="comm",b="rule",C="decl",k=Math.abs,w=String.fromCharCode;Object.assign;function _(t){return t.trim()}function v(t,e,r){return t.replace(e,r)}function S(t,e,r){return t.indexOf(e,r)}function T(t,e){return 0|t.charCodeAt(e)}function A(t,e,r){return t.slice(e,r)}function M(t){return t.length}function B(t,e){return e.push(t),t}function L(t,e){for(var r="",n=0;n0?T(j,--N):0,E--,10===O&&(E=1,$--),O}function K(){return O=N2||W(O)>3?"":" "}function X(t,e){for(;--e&&K()&&!(O<48||O>102||O>57&&O<65||O>70&&O<97););return q(t,z()+(e<6&&32==P()&&32==K()))}function V(t){for(;K();)switch(O){case t:return N;case 34:case 39:34!==t&&39!==t&&V(O);break;case 40:41===t&&V(t);break;case 92:K()}return N}function Z(t,e){for(;K()&&t+O!==57&&(t+O!==84||47!==P()););return"/*"+q(e,N-1)+"*"+w(47===t?t:K())}function Q(t){for(;!W(P());)K();return q(t,N)}function J(t){return U(tt("",null,null,null,[""],t=H(t),0,[0],t))}function tt(t,e,r,n,i,a,o,s,l){for(var c=0,h=0,u=o,d=0,p=0,f=0,g=1,m=1,y=1,x=0,b="",C=i,_=a,L=n,F=b;m;)switch(f=x,x=K()){case 40:if(108!=f&&58==T(F,u-1)){-1!=S(F+=v(G(x),"&","&\f"),"&\f",k(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:F+=G(x);break;case 9:case 10:case 13:case 32:F+=Y(f);break;case 92:F+=X(z()-1,7);continue;case 47:switch(P()){case 42:case 47:B(rt(Z(K(),z()),e,r,l),l),5!=W(f||1)&&5!=W(P()||1)||!M(F)||" "===A(F,-1,void 0)||(F+=" ");break;default:F+="/"}break;case 123*g:s[c++]=M(F)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(F=v(F,/\f/g,"")),p>0&&(M(F)-u||0===g&&47===f)&&B(p>32?nt(F+";",n,r,u-1,l):nt(v(F," ","")+";",n,r,u-2,l),l);break;case 59:F+=";";default:if(B(L=et(F,e,r,c,h,i,s,b,C=[],_=[],u,a),a),123===x)if(0===h)tt(F,e,L,L,C,a,u,s,_);else{switch(d){case 99:if(110===T(F,3))break;case 108:if(97===T(F,2))break;default:h=0;case 100:case 109:case 115:}h?tt(t,L,L,n&&B(et(t,L,L,0,0,i,s,b,i,C=[],u,_),_),i,_,u,s,n?C:_):tt(F,L,L,L,[""],_,0,s,_)}}c=h=p=0,g=y=1,b=F="",u=o;break;case 58:u=1+M(F),p=f;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==R())continue;switch(F+=w(x),x*g){case 38:y=h>0?1:(F+="\f",-1);break;case 44:s[c++]=(M(F)-1)*y,y=1;break;case 64:45===P()&&(F+=G(K())),d=P(),h=u=M(b=F+=Q(z())),x++;break;case 45:45===f&&2==M(F)&&(g=0)}}return a}function et(t,e,r,n,i,a,o,s,l,c,h,u){for(var d=i-1,p=0===i?a:[""],f=function(t){return t.length}(p),g=0,m=0,y=0;g0?p[x]+" "+C:v(C,/&\f/g,p[x])))&&(l[y++]=w);return I(t,e,r,0===i?b:s,l,c,h,u)}function rt(t,e,r,n){return I(t,e,r,x,w(O),A(t,2,-2),0,n)}function nt(t,e,r,n,i){return I(t,e,r,C,A(t,0,n),A(t,n+1,-1),n,i)}var it=r(99418),at=r(66401),ot={id:"c4",detector:(0,g.K2)(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(4981).then(r.bind(r,54981));return{id:"c4",diagram:t}},"loader")},st="flowchart",lt={id:st,detector:(0,g.K2)((t,e)=>"dagre-wrapper"!==e?.flowchart?.defaultRenderer&&"elk"!==e?.flowchart?.defaultRenderer&&/^\s*graph/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(2291).then(r.bind(r,22291));return{id:st,diagram:t}},"loader")},ct="flowchart-v2",ht={id:ct,detector:(0,g.K2)((t,e)=>"dagre-d3"!==e?.flowchart?.defaultRenderer&&("elk"===e?.flowchart?.defaultRenderer&&(e.layout="elk"),!(!/^\s*graph/.test(t)||"dagre-wrapper"!==e?.flowchart?.defaultRenderer)||/^\s*flowchart/.test(t)),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(2291).then(r.bind(r,22291));return{id:ct,diagram:t}},"loader")},ut={id:"er",detector:(0,g.K2)(t=>/^\s*erDiagram/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(8756).then(r.bind(r,8756));return{id:"er",diagram:t}},"loader")},dt="gitGraph",pt={id:dt,detector:(0,g.K2)(t=>/^\s*gitGraph/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(6319)]).then(r.bind(r,66319));return{id:dt,diagram:t}},"loader")},ft="gantt",gt={id:ft,detector:(0,g.K2)(t=>/^\s*gantt/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(4379).then(r.bind(r,64379));return{id:ft,diagram:t}},"loader")},mt="info",yt={id:mt,detector:(0,g.K2)(t=>/^\s*info/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(3488)]).then(r.bind(r,93488));return{id:mt,diagram:t}},"loader")},xt={id:"pie",detector:(0,g.K2)(t=>/^\s*pie/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(9412)]).then(r.bind(r,69412));return{id:"pie",diagram:t}},"loader")},bt="quadrantChart",Ct={id:bt,detector:(0,g.K2)(t=>/^\s*quadrantChart/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(1203).then(r.bind(r,51203));return{id:bt,diagram:t}},"loader")},kt="xychart",wt={id:kt,detector:(0,g.K2)(t=>/^\s*xychart(-beta)?/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(5955).then(r.bind(r,45955));return{id:kt,diagram:t}},"loader")},_t="requirement",vt={id:_t,detector:(0,g.K2)(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(9032).then(r.bind(r,29032));return{id:_t,diagram:t}},"loader")},St="sequence",Tt={id:St,detector:(0,g.K2)(t=>/^\s*sequenceDiagram/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(7592).then(r.bind(r,17592));return{id:St,diagram:t}},"loader")},At="class",Mt={id:At,detector:(0,g.K2)((t,e)=>"dagre-wrapper"!==e?.class?.defaultRenderer&&/^\s*classDiagram/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(1746),r.e(9510)]).then(r.bind(r,7129));return{id:At,diagram:t}},"loader")},Bt="classDiagram",Lt={id:Bt,detector:(0,g.K2)((t,e)=>!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==e?.class?.defaultRenderer)||/^\s*classDiagram-v2/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(1746),r.e(3815)]).then(r.bind(r,53815));return{id:Bt,diagram:t}},"loader")},Ft="state",$t={id:Ft,detector:(0,g.K2)((t,e)=>"dagre-wrapper"!==e?.state?.defaultRenderer&&/^\s*stateDiagram/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(2334),r.e(4616),r.e(8142)]).then(r.bind(r,88142));return{id:Ft,diagram:t}},"loader")},Et="stateDiagram",Dt={id:Et,detector:(0,g.K2)((t,e)=>!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==e?.state?.defaultRenderer),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(4616),r.e(4802)]).then(r.bind(r,84802));return{id:Et,diagram:t}},"loader")},Nt="journey",Ot={id:Nt,detector:(0,g.K2)(t=>/^\s*journey/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(5480).then(r.bind(r,45480));return{id:Nt,diagram:t}},"loader")},jt={draw:(0,g.K2)((t,e,r)=>{g.Rm.debug("rendering svg for syntax error\n");const n=(0,c.D)(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),(0,f.a$)(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw")},It=jt,Rt={db:{},renderer:jt,parser:{parse:(0,g.K2)(()=>{},"parse")}},Kt="flowchart-elk",Pt={id:Kt,detector:(0,g.K2)((t,e={})=>!!(/^\s*flowchart-elk/.test(t)||/^\s*(flowchart|graph)/.test(t)&&"elk"===e?.flowchart?.defaultRenderer)&&(e.layout="elk",!0),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(2291).then(r.bind(r,22291));return{id:Kt,diagram:t}},"loader")},zt="timeline",qt={id:zt,detector:(0,g.K2)(t=>/^\s*timeline/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(291).then(r.bind(r,50291));return{id:zt,diagram:t}},"loader")},Wt="mindmap",Ht={id:Wt,detector:(0,g.K2)(t=>/^\s*mindmap/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(8565).then(r.bind(r,78565));return{id:Wt,diagram:t}},"loader")},Ut="kanban",Gt={id:Ut,detector:(0,g.K2)(t=>/^\s*kanban/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(6241).then(r.bind(r,16241));return{id:Ut,diagram:t}},"loader")},Yt="sankey",Xt={id:Yt,detector:(0,g.K2)(t=>/^\s*sankey(-beta)?/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await r.e(1741).then(r.bind(r,11741));return{id:Yt,diagram:t}},"loader")},Vt="packet",Zt={id:Vt,detector:(0,g.K2)(t=>/^\s*packet(-beta)?/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(6567)]).then(r.bind(r,16567));return{id:Vt,diagram:t}},"loader")},Qt="radar",Jt={id:Qt,detector:(0,g.K2)(t=>/^\s*radar-beta/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(6992)]).then(r.bind(r,16992));return{id:Qt,diagram:t}},"loader")},te="block",ee={id:te,detector:(0,g.K2)(t=>/^\s*block(-beta)?/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(5996)]).then(r.bind(r,65996));return{id:te,diagram:t}},"loader")},re="architecture",ne={id:re,detector:(0,g.K2)(t=>/^\s*architecture/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(165),r.e(8249)]).then(r.bind(r,8249));return{id:re,diagram:t}},"loader")},ie="treemap",ae={id:ie,detector:(0,g.K2)(t=>/^\s*treemap/.test(t),"detector"),loader:(0,g.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(2821)]).then(r.bind(r,82821));return{id:ie,diagram:t}},"loader")},oe=!1,se=(0,g.K2)(()=>{oe||(oe=!0,(0,f.Js)("error",Rt,t=>"error"===t.toLowerCase().trim()),(0,f.Js)("---",{db:{clear:(0,g.K2)(()=>{},"clear")},styles:{},renderer:{draw:(0,g.K2)(()=>{},"draw")},parser:{parse:(0,g.K2)(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:(0,g.K2)(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),(0,f.Xd)(Pt,Ht,ne),(0,f.Xd)(ot,Gt,Lt,Mt,ut,gt,yt,xt,vt,Tt,ht,lt,qt,pt,Dt,$t,Ot,Ct,Xt,Zt,wt,ee,Jt,ae))},"addDiagrams"),le=(0,g.K2)(async()=>{g.Rm.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(f.mW).map(async([t,{detector:e,loader:r}])=>{if(r)try{(0,f.Gs)(t)}catch{try{const{diagram:t,id:n}=await r();(0,f.Js)(n,t,e)}catch(n){throw g.Rm.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete f.mW[t],n}}}))).filter(t=>"rejected"===t.status);if(t.length>0){g.Rm.error(`Failed to load ${t.length} external diagrams`);for(const e of t)g.Rm.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}},"loadRegisteredDiagrams");function ce(t,e){t.attr("role","graphics-document document"),""!==e&&t.attr("aria-roledescription",e)}function he(t,e,r,n){if(void 0!==t.insert){if(r){const e=`chart-desc-${n}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(r)}if(e){const r=`chart-title-${n}`;t.attr("aria-labelledby",r),t.insert("title",":first-child").attr("id",r).text(e)}}}(0,g.K2)(ce,"setA11yDiagramInfo"),(0,g.K2)(he,"addSVGa11yTitleDescription");var ue=class t{constructor(t,e,r,n,i){this.type=t,this.text=e,this.db=r,this.parser=n,this.renderer=i}static{(0,g.K2)(this,"Diagram")}static async fromText(e,r={}){const n=(0,f.zj)(),i=(0,f.Ch)(e,n);e=(0,p.C4)(e)+"\n";try{(0,f.Gs)(i)}catch{const t=(0,f.J$)(i);if(!t)throw new f.C0(`Diagram ${i} not found.`);const{id:e,diagram:r}=await t();(0,f.Js)(e,r)}const{db:a,parser:o,renderer:s,init:l}=(0,f.Gs)(i);return o.parser&&(o.parser.yy=a),a.clear?.(),l?.(n),r.title&&a.setDiagramTitle?.(r.title),await o.parse(e),new t(i,e,a,o,s)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}},de=[],pe=(0,g.K2)(()=>{de.forEach(t=>{t()}),de=[]},"attachFunctions"),fe=(0,g.K2)(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");function ge(t){const e=t.match(f.EJ);if(!e)return{text:t,metadata:{}};let r=(0,h.H)(e[1],{schema:h.r})??{};r="object"!=typeof r||Array.isArray(r)?{}:r;const n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}(0,g.K2)(ge,"extractFrontMatter");var me=(0,g.K2)(t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,(t,e,r)=>"<"+e+r.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),ye=(0,g.K2)(t=>{const{text:e,metadata:r}=ge(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),xe=(0,g.K2)(t=>{const e=p._K.detectInit(t)??{},r=p._K.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:t})=>"wrap"===t):"wrap"===r?.type&&(e.wrap=!0),{text:(0,p.vU)(t),directive:e}},"processDirectives");function be(t){const e=me(t),r=ye(e),n=xe(r.text),i=(0,p.$t)(r.config,n.directive);return{code:t=fe(n.text),title:r.title,config:i}}function Ce(t){const e=(new TextEncoder).encode(t),r=Array.from(e,t=>String.fromCodePoint(t)).join("");return btoa(r)}(0,g.K2)(be,"preprocessDiagram"),(0,g.K2)(Ce,"toBase64");var ke=["foreignobject"],we=["dominant-baseline"];function _e(t){const e=be(t);return(0,f.cL)(),(0,f.xA)(e.config??{}),e}async function ve(t,e){se();try{const{code:e,config:r}=_e(t);return{diagramType:(await Ne(e)).type,config:r}}catch(r){if(e?.suppressErrors)return!1;throw r}}(0,g.K2)(_e,"processAndSetConfigs"),(0,g.K2)(ve,"parse");var Se=(0,g.K2)((t,e,r=[])=>`\n.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),Te=(0,g.K2)((t,e=new Map)=>{let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){const n=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(t=>{(0,at.A)(t.styles)||n.forEach(e=>{r+=Se(t.id,e,t.styles)}),(0,at.A)(t.textStyles)||(r+=Se(t.id,"tspan",(t?.textStyles||[]).map(t=>t.replace("color","fill"))))})}return r},"createCssStyles"),Ae=(0,g.K2)((t,e,r,n)=>{const i=Te(t,r);return L(J(`${n}{${(0,f.tM)(e,i,t.themeVariables)}}`),F)},"createUserStyles"),Me=(0,g.K2)((t="",e,r)=>{let n=t;return r||e||(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=(0,p.Sm)(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Be=(0,g.K2)((t="",e)=>``,"putIntoIFrame"),Le=(0,g.K2)((t,e,r,n,i)=>{const a=t.append("div");a.attr("id",r),n&&a.attr("style",n);const o=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return i&&o.attr("xmlns:xlink",i),o.append("g"),t},"appendDivSvgG");function Fe(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}(0,g.K2)(Fe,"sandboxedIframe");var $e=(0,g.K2)((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),Ee=(0,g.K2)(async function(t,e,r){se();const n=_e(e);e=n.code;const i=(0,f.zj)();g.Rm.debug(i),e.length>(i?.maxTextSize??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const a="#"+t,o="i"+t,s="#"+o,c="d"+t,h="#"+c,u=(0,g.K2)(()=>{const t=p?s:h,e=(0,y.Ltv)(t).node();e&&"remove"in e&&e.remove()},"removeTempElements");let d=(0,y.Ltv)("body");const p="sandbox"===i.securityLevel,m="loose"===i.securityLevel,x=i.fontFamily;if(void 0!==r){if(r&&(r.innerHTML=""),p){const t=Fe((0,y.Ltv)(r),o);d=(0,y.Ltv)(t.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=(0,y.Ltv)(r);Le(d,t,c,`font-family: ${x}`,"http://www.w3.org/1999/xlink")}else{if($e(document,t,c,o),p){const t=Fe((0,y.Ltv)("body"),o);d=(0,y.Ltv)(t.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=(0,y.Ltv)("body");Le(d,t,c)}let b,C;try{b=await ue.fromText(e,{title:n.title})}catch($){if(i.suppressErrorRendering)throw u(),$;b=await ue.fromText("error"),C=$}const k=d.select(h).node(),w=b.type,_=k.firstChild,v=_.firstChild,S=b.renderer.getClasses?.(e,b),T=Ae(i,w,S,a),A=document.createElement("style");A.innerHTML=T,_.insertBefore(A,v);try{await b.renderer.draw(e,t,l.n.version,b)}catch(E){throw i.suppressErrorRendering?u():It.draw(e,t,l.n.version),E}const M=d.select(`${h} svg`),B=b.db.getAccTitle?.(),L=b.db.getAccDescription?.();Oe(w,M,B,L),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let F=d.select(h).node().innerHTML;if(g.Rm.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),F=Me(F,p,(0,f._3)(i.arrowMarkerAbsolute)),p){const t=d.select(h+" svg").node();F=Be(F,t)}else m||(F=it.A.sanitize(F,{ADD_TAGS:ke,ADD_ATTR:we,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(pe(),C)throw C;return u(),{diagramType:w,svg:F,bindFunctions:b.db.bindFunctions}},"render");function De(t={}){const e=(0,f.hH)({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),(0,f.wZ)(e),e?.theme&&e.theme in f.H$?e.themeVariables=f.H$[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=f.H$.default.getThemeVariables(e.themeVariables));const r="object"==typeof e?(0,f.UU)(e):(0,f.Q2)();(0,g.He)(r.logLevel),se()}(0,g.K2)(De,"initialize");var Ne=(0,g.K2)((t,e={})=>{const{code:r}=be(t);return ue.fromText(r,e)},"getDiagramFromText");function Oe(t,e,r,n){ce(e,t),he(e,r,n,e.attr("id"))}(0,g.K2)(Oe,"addA11yInfo");var je=Object.freeze({render:Ee,parse:ve,getDiagramFromText:Ne,initialize:De,getConfig:f.zj,setConfig:f.Nk,getSiteConfig:f.Q2,updateSiteConfig:f.B6,reset:(0,g.K2)(()=>{(0,f.cL)()},"reset"),globalReset:(0,g.K2)(()=>{(0,f.cL)(f.sb)},"globalReset"),defaultConfig:f.sb});(0,g.He)((0,f.zj)().logLevel),(0,f.cL)((0,f.zj)());var Ie=(0,g.K2)((t,e,r)=>{g.Rm.warn(t),(0,p.dq)(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Re=(0,g.K2)(async function(t={querySelector:".mermaid"}){try{await Ke(t)}catch(e){if((0,p.dq)(e)&&g.Rm.error(e.str),Qe.parseError&&Qe.parseError(e),!t.suppressErrors)throw g.Rm.error("Use the suppressErrors option to suppress these errors"),e}},"run"),Ke=(0,g.K2)(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){const n=je.getConfig();let i;if(g.Rm.debug((t?"":"No ")+"Callback function found"),r)i=r;else{if(!e)throw new Error("Nodes and querySelector are both undefined");i=document.querySelectorAll(e)}g.Rm.debug(`Found ${i.length} diagrams`),void 0!==n?.startOnLoad&&(g.Rm.debug("Start On Load: "+n?.startOnLoad),je.updateSiteConfig({startOnLoad:n?.startOnLoad}));const a=new p._K.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let o;const s=[];for(const c of Array.from(i)){if(g.Rm.info("Rendering diagram: "+c.id),c.getAttribute("data-processed"))continue;c.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;o=c.innerHTML,o=(0,m.T)(p._K.entityDecode(o)).trim().replace(//gi,"
    ");const r=p._K.detectInit(o);r&&g.Rm.debug("Detected early reinit: ",r);try{const{svg:r,bindFunctions:n}=await Ve(e,o,c);c.innerHTML=r,t&&await t(e),n&&n(c)}catch(l){Ie(l,s,Qe.parseError)}}if(s.length>0)throw s[0]},"runThrowsErrors"),Pe=(0,g.K2)(function(t){je.initialize(t)},"initialize"),ze=(0,g.K2)(async function(t,e,r){g.Rm.warn("mermaid.init is deprecated. Please use run instead."),t&&Pe(t);const n={postRenderCallback:r,querySelector:".mermaid"};"string"==typeof e?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await Re(n)},"init"),qe=(0,g.K2)(async(t,{lazyLoad:e=!0}={})=>{se(),(0,f.Xd)(...t),!1===e&&await le()},"registerExternalDiagrams"),We=(0,g.K2)(function(){if(Qe.startOnLoad){const{startOnLoad:t}=je.getConfig();t&&Qe.run().catch(t=>g.Rm.error("Mermaid failed to initialize",t))}},"contentLoaded");"undefined"!=typeof document&&window.addEventListener("load",We,!1);var He=(0,g.K2)(function(t){Qe.parseError=t},"setParseErrorHandler"),Ue=[],Ge=!1,Ye=(0,g.K2)(async()=>{if(!Ge){for(Ge=!0;Ue.length>0;){const e=Ue.shift();if(e)try{await e()}catch(t){g.Rm.error("Error executing queue",t)}}Ge=!1}},"executeQueue"),Xe=(0,g.K2)(async(t,e)=>new Promise((r,n)=>{const i=(0,g.K2)(()=>new Promise((i,a)=>{je.parse(t,e).then(t=>{i(t),r(t)},t=>{g.Rm.error("Error parsing",t),Qe.parseError?.(t),a(t),n(t)})}),"performCall");Ue.push(i),Ye().catch(n)}),"parse"),Ve=(0,g.K2)((t,e,r)=>new Promise((n,i)=>{const a=(0,g.K2)(()=>new Promise((a,o)=>{je.render(t,e,r).then(t=>{a(t),n(t)},t=>{g.Rm.error("Error parsing",t),Qe.parseError?.(t),o(t),i(t)})}),"performCall");Ue.push(a),Ye().catch(i)}),"render"),Ze=(0,g.K2)(()=>Object.keys(f.mW).map(t=>({id:t})),"getRegisteredDiagramsMetadata"),Qe={startOnLoad:!0,mermaidAPI:je,parse:Xe,render:Ve,init:ze,run:Re,registerExternalDiagrams:qe,registerLayoutLoaders:u.sO,initialize:Pe,parseError:void 0,contentLoaded:We,setParseErrorHandler:He,detectType:f.Ch,registerIconPacks:d.pC,getRegisteredDiagramsMetadata:Ze},Je=Qe;const tr="docusaurus-mermaid-container";function er(){const{colorMode:t}=(0,s.G)(),e=(0,o.p)().mermaid,r=e.theme[t],{options:i}=e;return(0,n.useMemo)(()=>({startOnLoad:!1,...i,theme:r}),[r,i])}function rr({text:t,config:e}){const[r,i]=(0,n.useState)(null),a=(0,n.useState)(`mermaid-svg-${Math.round(1e7*Math.random())}`)[0],o=er(),s=e??o;return(0,n.useEffect)(()=>{(async function({id:t,text:e,config:r}){Je.mermaidAPI.initialize(r);try{return await Je.render(t,e)}catch(n){throw document.querySelector(`#d${t}`)?.remove(),n}})({id:a,text:t,config:s}).then(i).catch(t=>{i(()=>{throw t})})},[a,t,s]),r}const nr={container:"container_lyt7"};var ir=r(74848);function ar({renderResult:t}){const e=(0,n.useRef)(null);return(0,n.useEffect)(()=>{const r=e.current;t.bindFunctions?.(r)},[t]),(0,ir.jsx)("div",{ref:e,className:`${tr} ${nr.container}`,dangerouslySetInnerHTML:{__html:t.svg}})}function or({value:t}){const e=rr({text:t});return null===e?null:(0,ir.jsx)(ar,{renderResult:e})}function sr(t){return(0,ir.jsx)(i.default,{fallback:t=>(0,ir.jsx)(a.MN,{...t}),children:(0,ir.jsx)(or,{...t})})}},50565:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={root:"root_UH70",tags:"tags_LT8x",tag:"tag_NdBD"}},51715:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(97795)),o=n(r(34559)),s=n(r(21893));e.default=function(t){return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(a.default,{...t,className:(0,o.default)(t.className,s.default.codeBlockContainer)})})}},51878:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>m});r(96540);var n=r(34164),i=r(44586),a=r(28774),o=r(21312),s=r(23908),l=r(17559),c=r(53886),h=r(23025),u=r(74848);const d={unreleased:function({siteTitle:t,versionMetadata:e}){return(0,u.jsx)(o.default,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:e.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:t,versionMetadata:e}){return(0,u.jsx)(o.default,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:e.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function p(t){const e=d[t.versionMetadata.banner];return(0,u.jsx)(e,{...t})}function f({versionLabel:t,to:e,onClick:r}){return(0,u.jsx)(o.default,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(a.default,{to:e,onClick:r,children:(0,u.jsx)(o.default,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function g({className:t,versionMetadata:e}){const{siteConfig:{title:r}}=(0,i.default)(),{pluginId:a}=(0,s.useActivePlugin)({failfast:!0}),{savePreferredVersionName:o}=(0,c.g1)(a),{latestDocSuggestion:h,latestVersionSuggestion:d}=(0,s.useDocVersionSuggestions)(a),g=h??(m=d).docs.find(t=>t.id===m.mainDocId);var m;return(0,u.jsxs)("div",{className:(0,n.A)(t,l.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(p,{siteTitle:r,versionMetadata:e})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(f,{versionLabel:d.label,to:g.path,onClick:()=>o(d.name)})})]})}function m({className:t}){const e=(0,h.useDocsVersion)();return e.banner?(0,u.jsx)(g,{className:t,versionMetadata:e}):null}},52274:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(88496),i=r(53098);const a=function(t){return(0,i.A)(t)&&"[object Arguments]"==(0,n.A)(t)};var o=Object.prototype,s=o.hasOwnProperty,l=o.propertyIsEnumerable;const c=a(function(){return arguments}())?a:function(t){return(0,i.A)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},52528:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(84171);const i=function(t,e,r){"__proto__"==e&&n.A?(0,n.A)(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},52569:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=n(r(28774)),s=n(r(85827)),l=r(97481);e.default=function({permalink:t,label:e,count:r}){return(0,i.jsx)(o.default,{href:t,className:(0,a.default)(r?s.default.tagWithCount:s.default.tagRegular),children:(0,i.jsxs)(l.Tag,{disabled:!1,size:"small",children:[e,r&&(0,i.jsx)("span",{children:r})]})})}},52789:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return function(e){return t(e)}}},52851:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(52528),i=r(66984),a=Object.prototype.hasOwnProperty;const o=function(t,e,r){var o=t[e];a.call(t,e)&&(0,i.A)(o,r)&&(void 0!==r||e in t)||(0,n.A)(t,e,r)}},53098:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return null!=t&&"object"==typeof t}},53533:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(38446),i=r(53098);const a=function(t){return(0,i.A)(t)&&(0,n.A)(t)}},55615:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(83607),i=r(23149),a=r(97271);const o=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,i.A)(t))return o(t);var e=(0,a.A)(t),r=[];for(var n in t)("constructor"!=n||!e&&s.call(t,n))&&r.push(n);return r};var c=r(38446);const h=function(t){return(0,c.A)(t)?(0,n.A)(t,!0):l(t)}},59667:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!("get"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return i(e,t),e};Object.defineProperty(e,"__esModule",{value:!0}),e.useMDXEnhancementElements=e.MDXEnhancementContext=void 0;const o=a(r(96540));e.MDXEnhancementContext=o.default.createContext({items:[]});e.useMDXEnhancementElements=(t,r,n)=>{const i=(0,o.useContext)(e.MDXEnhancementContext);return i?(0,o.useMemo)(()=>i.items.filter(e=>e.component===t&&e.position===r).map(t=>t.render(n)),[t,r,n]):[]}},60513:(t,e,r)=>{"use strict";function n(t){for(var e=[],r=1;rn})},63122:(t,e,r)=>{"use strict";r.d(e,{Y:()=>i,Z:()=>a});var n=r(72453);const i={};for(let o=0;o<=255;o++)i[o]=n.A.unit.dec2hex(o);const a={ALL:0,RGB:1,HSL:2}},63245:(t,e,r)=>{"use strict";r.d(e,{O:()=>n});var n=(0,r(40797).K2)(({flowchart:t})=>{const e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:e+r}},"getSubGraphTitleMargins")},64157:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>o});r(96540);var n=r(45500),i=r(60542),a=r(74848);function o(){const{metadata:t,frontMatter:e,assets:r}=(0,i.useDoc)();return(0,a.jsx)(n.be,{title:t.title,description:t.description,keywords:e.keywords,image:r.image??e.image})}},64841:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(72136),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,o=a&&a.exports===i&&n.A.process;const s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(e){}}()},66401:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(69471),i=r(9779),a=r(52274),o=r(92049),s=r(38446),l=r(99912),c=r(97271),h=r(33858),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.A)(t)&&((0,o.A)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.A)(t)||(0,h.A)(t)||(0,a.A)(t)))return!t.length;var e=(0,i.A)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.A)(t))return!(0,n.A)(t).length;for(var r in t)if(u.call(t,r))return!1;return!0}},66984:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t,e){return t===e||t!=t&&e!=e}},67525:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(39142),i=r(84171),a=r(29008);const o=i.A?function(t,e){return(0,i.A)(t,"toString",{configurable:!0,enumerable:!1,value:(0,n.A)(e),writable:!0})}:a.A;var s=Date.now;const l=function(t){var e=0,r=0;return function(){var n=s(),i=16-(n-r);if(r=n,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(o)},67633:(t,e,r)=>{"use strict";r.d(e,{C0:()=>x,xA:()=>it,hH:()=>S,Dl:()=>Dt,IU:()=>Zt,Wt:()=>Ut,Y2:()=>jt,a$:()=>Kt,sb:()=>U,ME:()=>le,UI:()=>q,Ch:()=>C,mW:()=>b,DB:()=>m,_3:()=>vt,EJ:()=>g,m7:()=>ee,iN:()=>Jt,zj:()=>rt,D7:()=>oe,Gs:()=>fe,J$:()=>_,ab:()=>ne,Q2:()=>tt,P$:()=>D,ID:()=>_t,TM:()=>ht,Wi:()=>Et,H1:()=>ut,QO:()=>At,Js:()=>pe,Xd:()=>k,dj:()=>Ot,cL:()=>at,$i:()=>W,jZ:()=>yt,oB:()=>ce,wZ:()=>Q,EI:()=>te,SV:()=>Qt,Nk:()=>et,XV:()=>se,ke:()=>re,UU:()=>Z,ot:()=>Pt,mj:()=>he,tM:()=>Ht,H$:()=>I,B6:()=>J});var n=r(40797),i=r(74886),a=r(8232);const o=(t,e)=>{const r=i.A.parse(t),n={};for(const i in e)e[i]&&(n[i]=r[i]+e[i]);return(0,a.A)(t,n)};var s=r(25582);const l=(t,e,r=50)=>{const{r:n,g:a,b:o,a:l}=i.A.parse(t),{r:c,g:h,b:u,a:d}=i.A.parse(e),p=r/100,f=2*p-1,g=l-d,m=((f*g===-1?f:(f+g)/(1+f*g))+1)/2,y=1-m,x=n*m+c*y,b=a*m+h*y,C=o*m+u*y,k=l*p+d*(1-p);return(0,s.A)(x,b,C,k)},c=(t,e=100)=>{const r=i.A.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,l(r,t,e)};var h,u=r(75263),d=r(78041),p=r(3219),f=r(99418),g=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,m=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,y=/\s*%%.*\n/gm,x=class extends Error{static{(0,n.K2)(this,"UnknownDiagramError")}constructor(t){super(t),this.name="UnknownDiagramError"}},b={},C=(0,n.K2)(function(t,e){t=t.replace(g,"").replace(m,"").replace(y,"\n");for(const[r,{detector:n}]of Object.entries(b)){if(n(t,e))return r}throw new x(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),k=(0,n.K2)((...t)=>{for(const{id:e,detector:r,loader:n}of t)w(e,r,n)},"registerLazyLoadedDiagrams"),w=(0,n.K2)((t,e,r)=>{b[t]&&n.Rm.warn(`Detector with key ${t} already exists. Overwriting.`),b[t]={detector:e,loader:r},n.Rm.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),_=(0,n.K2)(t=>b[t].loader,"getDiagramLoader"),v=(0,n.K2)((t,e,{depth:r=2,clobber:n=!1}={})=>{const i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(e=>v(t,e,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(e=>{t.includes(e)||t.push(e)}),t):void 0===t||r<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach(i=>{"object"!=typeof e[i]||void 0!==t[i]&&"object"!=typeof t[i]?(n||"object"!=typeof t[i]&&"object"!=typeof e[i])&&(t[i]=e[i]):(void 0===t[i]&&(t[i]=Array.isArray(e[i])?[]:{}),t[i]=v(t[i],e[i],{depth:r-1,clobber:n}))}),t)},"assignWithDepth"),S=v,T="#ffffff",A="#f2f2f2",M=(0,n.K2)((t,e)=>o(t,e?{s:-40,l:10}:{s:-40,l:-10}),"mkBorder"),B=class{static{(0,n.K2)(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||o(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||o(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||M(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||M(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||M(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||c(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||c(this.tertiaryColor),this.lineColor=this.lineColor||c(this.background),this.arrowheadColor=this.arrowheadColor||c(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,u.A)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,u.A)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||c(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,d.A)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||"navy",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||(0,u.A)(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||(0,u.A)(this.mainBkg,10)):(this.rowOdd=this.rowOdd||(0,d.A)(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||(0,d.A)(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},L=(0,n.K2)(t=>{const e=new B;return e.calculate(t),e},"getThemeVariables"),F=class{static{(0,n.K2)(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,d.A)(this.primaryColor,16),this.tertiaryColor=o(this.primaryColor,{h:-160}),this.primaryBorderColor=c(this.background),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.tertiaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,d.A)(c("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=(0,s.A)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,u.A)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,u.A)(this.sectionBkgColor,10),this.taskBorderColor=(0,s.A)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,s.A)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||(0,d.A)(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||(0,u.A)(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=(0,d.A)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,d.A)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,d.A)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=o(this.primaryColor,{h:64}),this.fillType3=o(this.secondaryColor,{h:64}),this.fillType4=o(this.primaryColor,{h:-64}),this.fillType5=o(this.secondaryColor,{h:-64}),this.fillType6=o(this.primaryColor,{h:128}),this.fillType7=o(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330});for(let t=0;t{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},$=(0,n.K2)(t=>{const e=new F;return e.calculate(t),e},"getThemeVariables"),E=class{static{(0,n.K2)(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=o(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=o(this.primaryColor,{h:-160}),this.primaryBorderColor=M(this.primaryColor,this.darkMode),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.tertiaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.sectionBkgColor=(0,s.A)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="navy",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,u.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,u.A)(this.tertiaryColor,40);for(let t=0;t{"calculated"===this[t]&&(this[t]=void 0)}),"object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach(e=>{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},D=(0,n.K2)(t=>{const e=new E;return e.calculate(t),e},"getThemeVariables"),N=class{static{(0,n.K2)(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,d.A)("#cde498",10),this.primaryBorderColor=M(this.primaryColor,this.darkMode),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.primaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=(0,u.A)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,u.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,u.A)(this.tertiaryColor,40);for(let t=0;t{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},O=(0,n.K2)(t=>{const e=new N;return e.calculate(t),e},"getThemeVariables"),j=class{static{(0,n.K2)(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,d.A)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=o(this.primaryColor,{h:-160}),this.primaryBorderColor=M(this.primaryColor,this.darkMode),this.secondaryBorderColor=M(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=M(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.tertiaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||(0,d.A)(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=(0,d.A)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,d.A)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let t=0;t{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},I={base:{getThemeVariables:L},dark:{getThemeVariables:$},default:{getThemeVariables:D},forest:{getThemeVariables:O},neutral:{getThemeVariables:(0,n.K2)(t=>{const e=new j;return e.calculate(t),e},"getThemeVariables")}},R={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,maxLabelWidth:360,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200,layoutAlgorithm:"cose-bilkent"},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1},K={...R,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF",forceNodeModelOrder:!1,considerModelOrder:"NODES_AND_EDGES"},themeCSS:void 0,themeVariables:I.default.getThemeVariables(),sequence:{...R.sequence,messageFont:(0,n.K2)(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:(0,n.K2)(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:(0,n.K2)(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...R.gantt,tickInterval:void 0,useWidth:void 0},c4:{...R.c4,useWidth:void 0,personFont:(0,n.K2)(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...R.flowchart,inheritDir:!1},external_personFont:(0,n.K2)(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:(0,n.K2)(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:(0,n.K2)(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:(0,n.K2)(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:(0,n.K2)(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:(0,n.K2)(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:(0,n.K2)(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:(0,n.K2)(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:(0,n.K2)(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:(0,n.K2)(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:(0,n.K2)(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:(0,n.K2)(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:(0,n.K2)(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:(0,n.K2)(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:(0,n.K2)(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:(0,n.K2)(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:(0,n.K2)(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:(0,n.K2)(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:(0,n.K2)(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:(0,n.K2)(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:(0,n.K2)(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...R.pie,useWidth:984},xyChart:{...R.xyChart,useWidth:void 0},requirement:{...R.requirement,useWidth:void 0},packet:{...R.packet},radar:{...R.radar},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","}},P=(0,n.K2)((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:"object"==typeof t[n]&&null!==t[n]?[...r,e+n,...P(t[n],"")]:[...r,e+n],[]),"keyify"),z=new Set(P(K,"")),q=K,W=(0,n.K2)(t=>{if(n.Rm.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach(t=>W(t));else{for(const e of Object.keys(t)){if(n.Rm.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!z.has(e)||null==t[e]){n.Rm.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){n.Rm.debug("sanitizing object",e),W(t[e]);continue}const r=["themeCSS","fontFamily","altFontFamily"];for(const i of r)e.includes(i)&&(n.Rm.debug("sanitizing css option",e),t[e]=H(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}n.Rm.debug("After sanitization",t)}},"sanitizeDirective"),H=(0,n.K2)(t=>{let e=0,r=0;for(const n of t){if(e{let r=S({},t),n={};for(const i of e)nt(i),n=S(n,i);if(r=S(r,n),n.theme&&n.theme in I){const t=S({},h),e=S(t.themeVariables||{},n.themeVariables);r.theme&&r.theme in I&&(r.themeVariables=I[r.theme].getThemeVariables(e))}return ct(X=r),X},"updateCurrentConfig"),Z=(0,n.K2)(t=>(G=S({},U),G=S(G,t),t.theme&&I[t.theme]&&(G.themeVariables=I[t.theme].getThemeVariables(t.themeVariables)),V(G,Y),G),"setSiteConfig"),Q=(0,n.K2)(t=>{h=S({},t)},"saveConfigFromInitialize"),J=(0,n.K2)(t=>(G=S(G,t),V(G,Y),G),"updateSiteConfig"),tt=(0,n.K2)(()=>S({},G),"getSiteConfig"),et=(0,n.K2)(t=>(ct(t),S(X,t),rt()),"setConfig"),rt=(0,n.K2)(()=>S({},X),"getConfig"),nt=(0,n.K2)(t=>{t&&(["secure",...G.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(n.Rm.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&nt(t[e])}))},"sanitize"),it=(0,n.K2)(t=>{W(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),Y.push(t),V(G,Y)},"addDirective"),at=(0,n.K2)((t=G)=>{V(t,Y=[])},"reset"),ot={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},st={},lt=(0,n.K2)(t=>{st[t]||(n.Rm.warn(ot[t]),st[t]=!0)},"issueWarning"),ct=(0,n.K2)(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&<("LAZY_LOAD_DEPRECATED")},"checkConfig"),ht=(0,n.K2)(()=>{let t={};h&&(t=S(t,h));for(const e of Y)t=S(t,e);return t},"getUserDefinedConfig"),ut=//gi,dt=(0,n.K2)(t=>{if(!t)return[""];return wt(t).replace(/\\n/g,"#br#").split("#br#")},"getRows"),pt=(()=>{let t=!1;return()=>{t||(ft(),t=!0)}})();function ft(){const t="data-temp-href-target";f.A.addHook("beforeSanitizeAttributes",e=>{"A"===e.tagName&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),f.A.addHook("afterSanitizeAttributes",e=>{"A"===e.tagName&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),"_blank"===e.getAttribute("target")&&e.setAttribute("rel","noopener"))})}(0,n.K2)(ft,"setupDompurifyHooks");var gt=(0,n.K2)(t=>{pt();return f.A.sanitize(t)},"removeScript"),mt=(0,n.K2)((t,e)=>{if(!1!==e.flowchart?.htmlLabels){const r=e.securityLevel;"antiscript"===r||"strict"===r?t=gt(t):"loose"!==r&&(t=(t=(t=wt(t)).replace(//g,">")).replace(/=/g,"="),t=kt(t))}return t},"sanitizeMore"),yt=(0,n.K2)((t,e)=>t?t=e.dompurifyConfig?f.A.sanitize(mt(t,e),e.dompurifyConfig).toString():f.A.sanitize(mt(t,e),{FORBID_TAGS:["style"]}).toString():t,"sanitizeText"),xt=(0,n.K2)((t,e)=>"string"==typeof t?yt(t,e):t.flat().map(t=>yt(t,e)),"sanitizeTextOrArray"),bt=(0,n.K2)(t=>ut.test(t),"hasBreaks"),Ct=(0,n.K2)(t=>t.split(ut),"splitBreaks"),kt=(0,n.K2)(t=>t.replace(/#br#/g,"
    "),"placeholderToBreak"),wt=(0,n.K2)(t=>t.replace(ut,"#br#"),"breakToPlaceholder"),_t=(0,n.K2)(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),vt=(0,n.K2)(t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),"evaluate"),St=(0,n.K2)(function(...t){const e=t.filter(t=>!isNaN(t));return Math.max(...e)},"getMax"),Tt=(0,n.K2)(function(...t){const e=t.filter(t=>!isNaN(t));return Math.min(...e)},"getMin"),At=(0,n.K2)(function(t){const e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),Bt=(0,n.K2)((t,e)=>{const r=Mt(t,"~"),n=Mt(e,"~");return 1===r&&1===n},"shouldCombineSets"),Lt=(0,n.K2)(t=>{const e=Mt(t,"~");let r=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),r=!0);const n=[...t];let i=n.indexOf("~"),a=n.lastIndexOf("~");for(;-1!==i&&-1!==a&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),Ft=(0,n.K2)(()=>void 0!==window.MathMLElement,"isMathMLSupported"),$t=/\$\$(.*)\$\$/g,Et=(0,n.K2)(t=>(t.match($t)?.length??0)>0,"hasKatex"),Dt=(0,n.K2)(async(t,e)=>{const r=document.createElement("div");r.innerHTML=await Ot(t,e),r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0";const n=document.querySelector("body");n?.insertAdjacentElement("beforeend",r);const i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),Nt=(0,n.K2)(async(t,e)=>{if(!Et(t))return t;if(!(Ft()||e.legacyMathML||e.forceLegacyMathML))return t.replace($t,"MathML is unsupported in this environment.");{const{default:n}=await r.e(2130).then(r.bind(r,22130)),i=e.forceLegacyMathML||!Ft()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(ut).map(t=>Et(t)?`
    ${t}
    `:`
    ${t}
    `).join("").replace($t,(t,e)=>n.renderToString(e,{throwOnError:!0,displayMode:!0,output:i}).replace(/\n/g," ").replace(//g,""))}},"renderKatexUnsanitized"),Ot=(0,n.K2)(async(t,e)=>yt(await Nt(t,e),e),"renderKatexSanitized"),jt={getRows:dt,sanitizeText:yt,sanitizeTextOrArray:xt,hasBreaks:bt,splitBreaks:Ct,lineBreakRegex:ut,removeScript:gt,getUrl:_t,evaluate:vt,getMax:St,getMin:Tt},It=(0,n.K2)(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),Rt=(0,n.K2)(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),Kt=(0,n.K2)(function(t,e,r,n){const i=Rt(e,r,n);It(t,i)},"configureSvgSize"),Pt=(0,n.K2)(function(t,e,r,i){const a=e.node().getBBox(),o=a.width,s=a.height;n.Rm.info(`SVG bounds: ${o}x${s}`,a);let l=0,c=0;n.Rm.info(`Graph bounds: ${l}x${c}`,t),l=o+2*r,c=s+2*r,n.Rm.info(`Calculated bounds: ${l}x${c}`),Kt(e,c,l,i);const h=`${a.x-r} ${a.y-r} ${a.width+2*r} ${a.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox"),zt={},qt=(0,n.K2)((t,e,r)=>{let i="";return t in zt&&zt[t]?i=zt[t](r):n.Rm.warn(`No theme found for ${t}`),` & {\n font-family: ${r.fontFamily};\n font-size: ${r.fontSize};\n fill: ${r.textColor}\n }\n @keyframes edge-animation-frame {\n from {\n stroke-dashoffset: 0;\n }\n }\n @keyframes dash {\n to {\n stroke-dashoffset: 0;\n }\n }\n & .edge-animation-slow {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 50s linear infinite;\n stroke-linecap: round;\n }\n & .edge-animation-fast {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 20s linear infinite;\n stroke-linecap: round;\n }\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${r.errorBkgColor};\n }\n & .error-text {\n fill: ${r.errorTextColor};\n stroke: ${r.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 1px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n & .edge-thickness-invisible {\n stroke-width: 0;\n fill: none;\n }\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${r.lineColor};\n stroke: ${r.lineColor};\n }\n & .marker.cross {\n stroke: ${r.lineColor};\n }\n\n & svg {\n font-family: ${r.fontFamily};\n font-size: ${r.fontSize};\n }\n & p {\n margin: 0\n }\n\n ${i}\n\n ${e}\n`},"getStyles"),Wt=(0,n.K2)((t,e)=>{void 0!==e&&(zt[t]=e)},"addStylesForDiagram"),Ht=qt,Ut={};(0,n.VA)(Ut,{clear:()=>Zt,getAccDescription:()=>ee,getAccTitle:()=>Jt,getDiagramTitle:()=>ne,setAccDescription:()=>te,setAccTitle:()=>Qt,setDiagramTitle:()=>re});var Gt="",Yt="",Xt="",Vt=(0,n.K2)(t=>yt(t,rt()),"sanitizeText"),Zt=(0,n.K2)(()=>{Gt="",Xt="",Yt=""},"clear"),Qt=(0,n.K2)(t=>{Gt=Vt(t).replace(/^\s+/g,"")},"setAccTitle"),Jt=(0,n.K2)(()=>Gt,"getAccTitle"),te=(0,n.K2)(t=>{Xt=Vt(t).replace(/\n\s+/g,"\n")},"setAccDescription"),ee=(0,n.K2)(()=>Xt,"getAccDescription"),re=(0,n.K2)(t=>{Yt=Vt(t)},"setDiagramTitle"),ne=(0,n.K2)(()=>Yt,"getDiagramTitle"),ie=n.Rm,ae=n.He,oe=rt,se=et,le=U,ce=(0,n.K2)(t=>yt(t,oe()),"sanitizeText"),he=Pt,ue=(0,n.K2)(()=>Ut,"getCommonDb"),de={},pe=(0,n.K2)((t,e,r)=>{de[t]&&ie.warn(`Diagram with id ${t} already registered. Overwriting.`),de[t]=e,r&&w(t,r),Wt(t,e.styles),e.injectUtils?.(ie,ae,oe,ce,he,ue(),()=>{})},"registerDiagram"),fe=(0,n.K2)(t=>{if(t in de)return de[t];throw new ge(t)},"getDiagram"),ge=class extends Error{static{(0,n.K2)(this,"DiagramNotFoundError")}constructor(t){super(`Diagram ${t} not found.`)}}},67825:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>d});r(96540);var n=r(17559),i=r(60542),a=r(34164),o=r(19114);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=r(74848);const c="table-of-contents__link toc-highlight",h="table-of-contents__link--active";function u({className:t,...e}){return(0,l.jsx)("div",{className:(0,a.A)(s.tableOfContents,"thin-scrollbar",t),children:(0,l.jsx)(o.default,{...e,linkClassName:c,linkActiveClassName:h})})}function d(){const{toc:t,frontMatter:e}=(0,i.useDoc)();return(0,l.jsx)(u,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:n.G.docs.docTocDesktop})}},68335:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(18744),i=r(41917);const a=(0,n.A)(i.A,"Map")},69119:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BLANK_URL=e.relativeFirstCharacters=e.whitespaceEscapeCharsRegex=e.urlSchemeRegex=e.ctrlCharactersRegex=e.htmlCtrlEntityRegex=e.htmlEntitiesRegex=e.invalidProtocolRegex=void 0,e.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im,e.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g,e.htmlCtrlEntityRegex=/&(newline|tab);/gi,e.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,e.urlSchemeRegex=/^.+(:|:)/gim,e.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g,e.relativeFirstCharacters=[".","/"],e.BLANK_URL="about:blank"},69471:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(97271);const i=(0,r(40367).A)(Object.keys,Object);var a=Object.prototype.hasOwnProperty;const o=function(t){if(!(0,n.A)(t))return i(t);var e=[];for(var r in Object(t))a.call(t,r)&&"constructor"!=r&&e.push(r);return e}},70331:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=n(r(21312)),s=n(r(52569)),l=n(r(50565)),c=r(97481);e.default=function({tags:t}){return(0,i.jsxs)("div",{className:l.default.root,children:[(0,i.jsx)(c.Typography,{variant:"body2",component:"div",children:(0,i.jsx)(o.default,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,a.default)(l.default.tags,"padding--none","margin-left--sm"),children:t.map(({label:t,permalink:e,description:r})=>(0,i.jsx)("li",{className:l.default.tag,children:(0,i.jsx)(s.default,{label:t,permalink:e,description:r})},e))})]})}},70451:(t,e,r)=>{"use strict";function n(t,e){let r;if(void 0===e)for(const n of t)null!=n&&(r=n)&&(r=n);else{let n=-1;for(let i of t)null!=(i=e(i,++n,t))&&(r=i)&&(r=i)}return r}function i(t,e){let r;if(void 0===e)for(const n of t)null!=n&&(r>n||void 0===r&&n>=n)&&(r=n);else{let n=-1;for(let i of t)null!=(i=e(i,++n,t))&&(r>i||void 0===r&&i>=i)&&(r=i)}return r}function a(t){return t}r.d(e,{JLW:()=>us,l78:()=>x,tlR:()=>y,qrM:()=>vs,Yu4:()=>Ts,IA3:()=>Ms,Wi0:()=>Ls,PGM:()=>Fs,OEq:()=>Es,y8u:()=>Os,olC:()=>Is,IrU:()=>Ks,oDi:()=>qs,Q7f:()=>Hs,cVp:()=>Gs,lUB:()=>fs,Lx9:()=>Xs,nVG:()=>nl,uxU:()=>il,Xf2:()=>sl,GZz:()=>cl,UPb:()=>ul,dyv:()=>hl,GPZ:()=>Gr,Sk5:()=>Jr,bEH:()=>En,n8j:()=>ys,T9B:()=>n,jkA:()=>i,rLf:()=>Cs,WH:()=>zn,m4Y:()=>bi,UMr:()=>Pn,w7C:()=>Oo,zt:()=>jo,Ltv:()=>Io,UAC:()=>Oi,DCK:()=>fa,TUC:()=>Hi,Agd:()=>Di,t6C:()=>Li,wXd:()=>$i,ABi:()=>Pi,Ui6:()=>ea,rGn:()=>Ui,ucG:()=>Fi,YPH:()=>Ki,Mol:()=>Wi,PGu:()=>zi,GuW:()=>qi,hkb:()=>pn});var o=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function p(t){return e=>+t(e)}function f(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function g(){return!this.__axis}function m(t,e){var r=[],n=null,i=null,m=6,y=6,x=3,b="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,C=t===o||t===c?-1:1,k=t===c||t===s?"x":"y",w=t===o||t===l?u:d;function _(u){var d=null==n?e.ticks?e.ticks.apply(e,r):e.domain():n,_=null==i?e.tickFormat?e.tickFormat.apply(e,r):a:i,v=Math.max(m,0)+x,S=e.range(),T=+S[0]+b,A=+S[S.length-1]+b,M=(e.bandwidth?f:p)(e.copy(),b),B=u.selection?u.selection():u,L=B.selectAll(".domain").data([null]),F=B.selectAll(".tick").data(d,e).order(),$=F.exit(),E=F.enter().append("g").attr("class","tick"),D=F.select("line"),N=F.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),F=F.merge(E),D=D.merge(E.append("line").attr("stroke","currentColor").attr(k+"2",C*m)),N=N.merge(E.append("text").attr("fill","currentColor").attr(k,C*v).attr("dy",t===o?"0em":t===l?"0.71em":"0.32em")),u!==B&&(L=L.transition(u),F=F.transition(u),D=D.transition(u),N=N.transition(u),$=$.transition(u).attr("opacity",h).attr("transform",function(t){return isFinite(t=M(t))?w(t+b):this.getAttribute("transform")}),E.attr("opacity",h).attr("transform",function(t){var e=this.parentNode.__axis;return w((e&&isFinite(e=e(t))?e:M(t))+b)})),$.remove(),L.attr("d",t===c||t===s?y?"M"+C*y+","+T+"H"+b+"V"+A+"H"+C*y:"M"+b+","+T+"V"+A:y?"M"+T+","+C*y+"V"+b+"H"+A+"V"+C*y:"M"+T+","+b+"H"+A),F.attr("opacity",1).attr("transform",function(t){return w(M(t)+b)}),D.attr(k+"2",C*m),N.attr(k,C*v).text(_),B.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),B.each(function(){this.__axis=M})}return _.scale=function(t){return arguments.length?(e=t,_):e},_.ticks=function(){return r=Array.from(arguments),_},_.tickArguments=function(t){return arguments.length?(r=null==t?[]:Array.from(t),_):r.slice()},_.tickValues=function(t){return arguments.length?(n=null==t?null:Array.from(t),_):n&&n.slice()},_.tickFormat=function(t){return arguments.length?(i=t,_):i},_.tickSize=function(t){return arguments.length?(m=y=+t,_):m},_.tickSizeInner=function(t){return arguments.length?(m=+t,_):m},_.tickSizeOuter=function(t){return arguments.length?(y=+t,_):y},_.tickPadding=function(t){return arguments.length?(x=+t,_):x},_.offset=function(t){return arguments.length?(b=+t,_):b},_}function y(t){return m(o,t)}function x(t){return m(l,t)}function b(){}function C(t){return null==t?b:function(){return this.querySelector(t)}}function k(){return[]}function w(t){return null==t?k:function(){return this.querySelectorAll(t)}}function _(t){return function(){return null==(e=t.apply(this,arguments))?[]:Array.isArray(e)?e:Array.from(e);var e}}function v(t){return function(){return this.matches(t)}}function S(t){return function(e){return e.matches(t)}}var T=Array.prototype.find;function A(){return this.firstElementChild}var M=Array.prototype.filter;function B(){return Array.from(this.children)}function L(t){return new Array(t.length)}function F(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function $(t,e,r,n,i,a){for(var o,s=0,l=e.length,c=a.length;se?1:t>=e?0:NaN}F.prototype={constructor:F,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var j="http://www.w3.org/1999/xhtml";const I={svg:"http://www.w3.org/2000/svg",xhtml:j,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function R(t){var e=t+="",r=e.indexOf(":");return r>=0&&"xmlns"!==(e=t.slice(0,r))&&(t=t.slice(r+1)),I.hasOwnProperty(e)?{space:I[e],local:t}:t}function K(t){return function(){this.removeAttribute(t)}}function P(t){return function(){this.removeAttributeNS(t.space,t.local)}}function z(t,e){return function(){this.setAttribute(t,e)}}function q(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function W(t,e){return function(){var r=e.apply(this,arguments);null==r?this.removeAttribute(t):this.setAttribute(t,r)}}function H(t,e){return function(){var r=e.apply(this,arguments);null==r?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function U(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function G(t){return function(){this.style.removeProperty(t)}}function Y(t,e,r){return function(){this.style.setProperty(t,e,r)}}function X(t,e,r){return function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function V(t,e){return t.style.getPropertyValue(e)||U(t).getComputedStyle(t,null).getPropertyValue(e)}function Z(t){return function(){delete this[t]}}function Q(t,e){return function(){this[t]=e}}function J(t,e){return function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new rt(t)}function rt(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function nt(t,e){for(var r=et(t),n=-1,i=e.length;++n=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Mt=[null];function Bt(t,e){this._groups=t,this._parents=e}function Lt(){return new Bt([[document.documentElement]],Mt)}Bt.prototype=Lt.prototype={constructor:Bt,select:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i=k&&(k=C+1);!(b=y[k])&&++k=0;)(n=i[a])&&(o&&4^n.compareDocumentPosition(o)&&o.parentNode.insertBefore(n,o),o=n);return this},sort:function(t){function e(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}t||(t=O);for(var r=this._groups,n=r.length,i=new Array(n),a=0;a1?this.each((null==e?G:"function"==typeof e?X:Y)(t,e,null==r?"":r)):V(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Z:"function"==typeof e?J:Q)(t,e)):this.node()[t]},classed:function(t,e){var r=tt(t+"");if(arguments.length<2){for(var n=et(this.node()),i=-1,a=r.length;++i=0&&(e=t.slice(r+1),t=t.slice(0,r)),{type:t,name:e}})}(t+""),o=a.length;if(!(arguments.length<2)){for(s=e?vt:_t,n=0;n{}};function Et(){for(var t,e=0,r=arguments.length,n={};e=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),o=-1,s=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o0)for(var r,n,i=new Array(r),a=0;a=0&&e._call.call(void 0,t),e=e._next;--Kt}()}finally{Kt=0,function(){var t,e,r=It,n=1/0;for(;r;)r._call?(n>r._time&&(n=r._time),t=r,r=r._next):(e=r._next,r._next=null,r=t?t._next=e:It=e);Rt=t,te(n)}(),Wt=0}}function Jt(){var t=Ut.now(),e=t-qt;e>1e3&&(Ht-=e,qt=t)}function te(t){Kt||(Pt&&(Pt=clearTimeout(Pt)),t-Wt>24?(t<1/0&&(Pt=setTimeout(Qt,t-Ut.now()-Ht)),zt&&(zt=clearInterval(zt))):(zt||(qt=Ut.now(),zt=setInterval(Jt,1e3)),Kt=1,Gt(Qt)))}function ee(t,e,r){var n=new Vt;return e=null==e?0:+e,n.restart(r=>{n.stop(),t(r+e)},e,r),n}Vt.prototype=Zt.prototype={constructor:Vt,restart:function(t,e,r){if("function"!=typeof t)throw new TypeError("callback is not a function");r=(null==r?Yt():+r)+(null==e?0:+e),this._next||Rt===this||(Rt?Rt._next=this:It=this,Rt=this),this._call=t,this._time=r,te()},stop:function(){this._call&&(this._call=null,this._time=1/0,te())}};var re=jt("start","end","cancel","interrupt"),ne=[];function ie(t,e,r,n,i,a){var o=t.__transition;if(o){if(r in o)return}else t.__transition={};!function(t,e,r){var n,i=t.__transition;function a(t){r.state=1,r.timer.restart(o,r.delay,r.time),r.delay<=t&&o(t-r.delay)}function o(a){var c,h,u,d;if(1!==r.state)return l();for(c in i)if((d=i[c]).name===r.name){if(3===d.state)return ee(o);4===d.state?(d.state=6,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[c]):+c0)throw new Error("too late; already scheduled");return r}function oe(t,e){var r=se(t,e);if(r.state>3)throw new Error("too late; already running");return r}function se(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function le(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var ce,he=180/Math.PI,ue={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function de(t,e,r,n,i,a){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,l/=s),t*n180?e+=360:e-t>180&&(t+=360),a.push({i:r.push(i(r)+"rotate(",null,n)-2,x:le(t,e)})):e&&r.push(i(r)+"rotate("+e+n)}(a.rotate,o.rotate,s,l),function(t,e,r,a){t!==e?a.push({i:r.push(i(r)+"skewX(",null,n)-2,x:le(t,e)}):e&&r.push(i(r)+"skewX("+e+n)}(a.skewX,o.skewX,s,l),function(t,e,r,n,a,o){if(t!==r||e!==n){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:le(t,r)},{i:s-2,x:le(e,n)})}else 1===r&&1===n||a.push(i(a)+"scale("+r+","+n+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a=o=null,function(t){for(var e,r=-1,n=l.length;++r>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?Re(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?Re(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Me.exec(t))?new ze(e[1],e[2],e[3],1):(e=Be.exec(t))?new ze(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Le.exec(t))?Re(e[1],e[2],e[3],e[4]):(e=Fe.exec(t))?Re(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=$e.exec(t))?Ye(e[1],e[2]/100,e[3]/100,1):(e=Ee.exec(t))?Ye(e[1],e[2]/100,e[3]/100,e[4]):De.hasOwnProperty(t)?Ie(De[t]):"transparent"===t?new ze(NaN,NaN,NaN,0):null}function Ie(t){return new ze(t>>16&255,t>>8&255,255&t,1)}function Re(t,e,r,n){return n<=0&&(t=e=r=NaN),new ze(t,e,r,n)}function Ke(t){return t instanceof ke||(t=je(t)),t?new ze((t=t.rgb()).r,t.g,t.b,t.opacity):new ze}function Pe(t,e,r,n){return 1===arguments.length?Ke(t):new ze(t,e,r,null==n?1:n)}function ze(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function qe(){return`#${Ge(this.r)}${Ge(this.g)}${Ge(this.b)}`}function We(){const t=He(this.opacity);return`${1===t?"rgb(":"rgba("}${Ue(this.r)}, ${Ue(this.g)}, ${Ue(this.b)}${1===t?")":`, ${t})`}`}function He(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Ue(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Ge(t){return((t=Ue(t))<16?"0":"")+t.toString(16)}function Ye(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new Ve(t,e,r,n)}function Xe(t){if(t instanceof Ve)return new Ve(t.h,t.s,t.l,t.opacity);if(t instanceof ke||(t=je(t)),!t)return new Ve;if(t instanceof Ve)return t;var e=(t=t.rgb()).r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),o=NaN,s=a-i,l=(a+i)/2;return s?(o=e===a?(r-n)/s+6*(r0&&l<1?0:o,new Ve(o,s,l,t.opacity)}function Ve(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function Ze(t){return(t=(t||0)%360)<0?t+360:t}function Qe(t){return Math.max(0,Math.min(1,t||0))}function Je(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}function tr(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}be(ke,je,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Ne,formatHex:Ne,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Xe(this).formatHsl()},formatRgb:Oe,toString:Oe}),be(ze,Pe,Ce(ke,{brighter(t){return t=null==t?_e:Math.pow(_e,t),new ze(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?we:Math.pow(we,t),new ze(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ze(Ue(this.r),Ue(this.g),Ue(this.b),He(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:qe,formatHex:qe,formatHex8:function(){return`#${Ge(this.r)}${Ge(this.g)}${Ge(this.b)}${Ge(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:We,toString:We})),be(Ve,function(t,e,r,n){return 1===arguments.length?Xe(t):new Ve(t,e,r,null==n?1:n)},Ce(ke,{brighter(t){return t=null==t?_e:Math.pow(_e,t),new Ve(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?we:Math.pow(we,t),new Ve(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ze(Je(t>=240?t-240:t+120,i,n),Je(t,i,n),Je(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new Ve(Ze(this.h),Qe(this.s),Qe(this.l),He(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=He(this.opacity);return`${1===t?"hsl(":"hsla("}${Ze(this.h)}, ${100*Qe(this.s)}%, ${100*Qe(this.l)}%${1===t?")":`, ${t})`}`}}));const er=t=>()=>t;function rr(t,e){return function(r){return t+r*e}}function nr(t){return 1===(t=+t)?ir:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):er(isNaN(e)?r:e)}}function ir(t,e){var r=e-t;return r?rr(t,r):er(isNaN(t)?e:t)}const ar=function t(e){var r=nr(e);function n(t,e){var n=r((t=Pe(t)).r,(e=Pe(e)).r),i=r(t.g,e.g),a=r(t.b,e.b),o=ir(t.opacity,e.opacity);return function(e){return t.r=n(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return n.gamma=t,n}(1);function or(t){return function(e){var r,n,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(r=0;r=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],o=n>0?t[n-1]:2*i-a,s=na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:le(r,n)})),a=lr.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?ae:oe;return function(){var o=a(this,t),s=o.on;s!==n&&(i=(n=s).copy()).on(e,r),o.on=i}}(r,t,e))},attr:function(t,e){var r=R(t),n="transform"===r?ge:hr;return this.attrTween(t,"function"==typeof e?(r.local?mr:gr)(r,n,xe(this,"attr."+t,e)):null==e?(r.local?dr:ur)(r):(r.local?fr:pr)(r,n,e))},attrTween:function(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;var n=R(t);return this.tween(r,(n.local?yr:xr)(n,e))},style:function(t,e,r){var n="transform"==(t+="")?fe:hr;return null==e?this.styleTween(t,function(t,e){var r,n,i;return function(){var a=V(this,t),o=(this.style.removeProperty(t),V(this,t));return a===o?null:a===r&&o===n?i:i=e(r=a,n=o)}}(t,n)).on("end.style."+t,vr(t)):"function"==typeof e?this.styleTween(t,function(t,e,r){var n,i,a;return function(){var o=V(this,t),s=r(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=V(this,t)),o===l?null:o===n&&l===i?a:(i=l,a=e(n=o,s))}}(t,n,xe(this,"style."+t,e))).each(function(t,e){var r,n,i,a,o="style."+e,s="end."+o;return function(){var l=oe(this,t),c=l.on,h=null==l.value[o]?a||(a=vr(e)):void 0;c===r&&i===h||(n=(r=c).copy()).on(s,i=h),l.on=n}}(this._id,t)):this.styleTween(t,function(t,e,r){var n,i,a=r+"";return function(){var o=V(this,t);return o===a?null:o===n?i:i=e(n=o,r)}}(t,n,e),r).on("end.style."+t,null)},styleTween:function(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;return this.tween(n,function(t,e,r){var n,i;function a(){var a=e.apply(this,arguments);return a!==i&&(n=(i=a)&&function(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}(t,a,r)),n}return a._value=e,a}(t,e,null==r?"":r))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(xe(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,r;function n(){var n=t.apply(this,arguments);return n!==r&&(e=(r=n)&&function(t){return function(e){this.textContent=t.call(this,e)}}(n)),e}return n._value=t,n}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n,i=se(this.node(),r).tween,a=0,o=i.length;a2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(n?"interrupt":"cancel",t,t.__data__,r.index,r.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)})},Ft.prototype.transition=function(t){var e,r;t instanceof Tr?(e=t._id,t=t._name):(e=Ar(),(r=Br).time=Yt(),t=null==t?null:t+"");for(var n=this._groups,i=n.length,a=0;a1?n[0]+n.slice(2):n,+t.slice(r+1)]}function Ir(t){return(t=jr(Math.abs(t)))?t[1]:NaN}var Rr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Pr(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new zr({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function zr(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function qr(t,e){var r=jr(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}Pr.prototype=zr.prototype,zr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Wr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>qr(100*t,e),r:qr,s:function(t,e){var r=jr(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(Rr=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+jr(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Hr(t){return t}var Ur,Gr,Yr,Xr=Array.prototype.map,Vr=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function Zr(t){var e,r,n=void 0===t.grouping||void 0===t.thousands?Hr:(e=Xr.call(t.grouping,Number),r=t.thousands+"",function(t,n){for(var i=t.length,a=[],o=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(t.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[o=(o+1)%e.length];return a.reverse().join(r)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Hr:function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(Xr.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=Pr(t)).fill,r=t.align,u=t.sign,d=t.symbol,p=t.zero,f=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):Wr[x]||(void 0===m&&(m=12),y=!0,x="g"),(p||"0"===e&&"="===r)&&(p=!0,e="0",r="=");var b="$"===d?i:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",C="$"===d?a:/[%p]/.test(x)?l:"",k=Wr[x],w=/[defgprs%]/.test(x);function _(t){var i,a,l,d=b,_=C;if("c"===x)_=k(t)+_,t="";else{var v=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:k(Math.abs(t),m),y&&(t=function(t){t:for(var e,r=t.length,n=1,i=-1;n0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),v&&0===+t&&"+"!==u&&(v=!1),d=(v?"("===u?u:c:"-"===u||"("===u?"":u)+d,_=("s"===x?Vr[8+Rr/3]:"")+_+(v&&"("===u?")":""),w)for(i=-1,a=t.length;++i(l=t.charCodeAt(i))||l>57){_=(46===l?o+t.slice(i+1):t.slice(i))+_,t=t.slice(0,i);break}}g&&!p&&(t=n(t,1/0));var S=d.length+t.length+_.length,T=S>1)+d+t+_+T.slice(S);break;default:t=T+d+t+_}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),_.toString=function(){return t+""},_}return{format:u,formatPrefix:function(t,e){var r=u(((t=Pr(t)).type="f",t)),n=3*Math.max(-8,Math.min(8,Math.floor(Ir(e)/3))),i=Math.pow(10,-n),a=Vr[8+n/3];return function(t){return r(i*t)+a}}}}function Qr(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function Jr(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=en)):void 0===e&&(e=tn);for(var r,n,i,a,o,s=new an(t),l=[s];r=l.pop();)if((i=e(r.data))&&(o=(i=Array.from(i)).length))for(r.children=i,a=o-1;a>=0;--a)l.push(n=i[a]=new an(i[a])),n.parent=r,n.depth=r.depth+1;return s.eachBefore(nn)}function tn(t){return t.children}function en(t){return Array.isArray(t)?t[1]:null}function rn(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function nn(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function an(t){this.data=t,this.depth=this.height=0,this.parent=null}function on(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function sn(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,c=t.value&&(n-e)/t.value;++s=0;--n)a.push(r[n]);return this},find:function(t,e){let r=-1;for(const n of this)if(t.call(e,n,++r,this))return n},sum:function(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;t=r.pop(),e=n.pop();for(;t===e;)i=t,t=r.pop(),e=n.pop();return i}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e},copy:function(){return Jr(this).eachBefore(rn)},[Symbol.iterator]:function*(){var t,e,r,n,i=this,a=[i];do{for(t=a.reverse(),a=[];i=t.pop();)if(yield i,e=i.children)for(r=0,n=e.length;rd&&(d=s),m=h*h*g,(p=Math.max(d/m,m/u))>f){h-=s;break}f=p}y.push(o={value:h,dice:l1?e:1)},r}((1+Math.sqrt(5))/2);function hn(t){if("function"!=typeof t)throw new Error;return t}function un(){return 0}function dn(t){return function(){return t}}function pn(){var t=cn,e=!1,r=1,n=1,i=[0],a=un,o=un,s=un,l=un,c=un;function h(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(u),i=[0],e&&t.eachBefore(on),t}function u(e){var r=i[e.depth],n=e.x0+r,h=e.y0+r,u=e.x1-r,d=e.y1-r;ukn?Math.pow(t,1/3):t/Cn+xn}function Sn(t){return t>bn?t*t*t:Cn*(t-xn)}function Tn(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function An(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Mn(t){if(t instanceof Ln)return new Ln(t.h,t.c,t.l,t.opacity);if(t instanceof _n||(t=wn(t)),0===t.a&&0===t.b)return new Ln(NaN,0180||r<-180?r-360*Math.round(r/360):r):er(isNaN(t)?e:t)});$n(ir);function Dn(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class Nn extends Map{constructor(t,e=Rn){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[r,n]of t)this.set(r,n)}get(t){return super.get(On(this,t))}has(t){return super.has(On(this,t))}set(t,e){return super.set(jn(this,t),e)}delete(t){return super.delete(In(this,t))}}Set;function On({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):r}function jn({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function In({_intern:t,_key:e},r){const n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function Rn(t){return null!==t&&"object"==typeof t?t.valueOf():t}const Kn=Symbol("implicit");function Pn(){var t=new Nn,e=[],r=[],n=Kn;function i(i){let a=t.get(i);if(void 0===a){if(n!==Kn)return n;t.set(i,a=e.push(i)-1)}return r[a%r.length]}return i.domain=function(r){if(!arguments.length)return e.slice();e=[],t=new Nn;for(const n of r)t.has(n)||t.set(n,e.push(n)-1);return i},i.range=function(t){return arguments.length?(r=Array.from(t),i):r.slice()},i.unknown=function(t){return arguments.length?(n=t,i):n},i.copy=function(){return Pn(e,r).unknown(n)},Dn.apply(i,arguments),i}function zn(){var t,e,r=Pn().unknown(void 0),n=r.domain,i=r.range,a=0,o=1,s=!1,l=0,c=0,h=.5;function u(){var r=n().length,u=o=qn?10:a>=Wn?5:a>=Hn?2:1;let s,l,c;return i<0?(c=Math.pow(10,-i)/o,s=Math.round(t*c),l=Math.round(e*c),s/ce&&--l,c=-c):(c=Math.pow(10,i)*o,s=Math.round(t/c),l=Math.round(e/c),s*ce&&--l),le?1:t>=e?0:NaN}function Vn(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function Zn(t){let e,r,n;function i(t,n,i=0,a=t.length){if(i>>1;r(t[e],n)<0?i=e+1:a=e}while(iXn(t(e),r),n=(e,r)=>t(e)-r):(e=t===Xn||t===Vn?t:Qn,r=t,n=t),{left:i,center:function(t,e,r=0,a=t.length){const o=i(t,e,r,a-1);return o>r&&n(t[o-1],e)>-n(t[o],e)?o-1:o},right:function(t,n,i=0,a=t.length){if(i>>1;r(t[e],n)<=0?i=e+1:a=e}while(ie&&(r=t,t=e,e=r),c=function(r){return Math.max(t,Math.min(e,r))}),n=l>2?pi:di,i=a=null,u}function u(e){return null==e||isNaN(e=+e)?r:(i||(i=n(o.map(t),s,l)))(t(c(e)))}return u.invert=function(r){return c(e((a||(a=n(s,o.map(t),le)))(r)))},u.domain=function(t){return arguments.length?(o=Array.from(t,li),h()):o.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=si,h()},u.clamp=function(t){return arguments.length?(c=!!t||hi,h()):c!==hi},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(r=t,u):r},function(r,n){return t=r,e=n,h()}}function mi(){return gi()(hi,hi)}function yi(t,e,r,n){var i,a=Yn(t,e,r);switch((n=Pr(null==n?",f":n)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=n.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ir(e)/3)))-Ir(Math.abs(t)))}(a,o))||(n.precision=i),Yr(n,o);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ir(e)-Ir(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(n.precision=i-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(i=function(t){return Math.max(0,-Ir(Math.abs(t)))}(a))||(n.precision=i-2*("%"===n.type))}return Gr(n)}function xi(t){var e=t.domain;return t.ticks=function(t){var r=e();return function(t,e,r){if(!((r=+r)>0))return[];if((t=+t)===(e=+e))return[t];const n=e=i))return[];const s=a-i+1,l=new Array(s);if(n)if(o<0)for(let c=0;c0;){if((i=Gn(l,c,r))===n)return a[o]=l,a[s]=c,e(a);if(i>0)l=Math.floor(l/i)*i,c=Math.ceil(c/i)*i;else{if(!(i<0))break;l=Math.ceil(l*i)/i,c=Math.floor(c*i)/i}n=i}return t},t}function bi(){var t=mi();return t.copy=function(){return fi(t,bi())},Dn.apply(t,arguments),xi(t)}const Ci=1e3,ki=6e4,wi=36e5,_i=864e5,vi=6048e5,Si=2592e6,Ti=31536e6,Ai=new Date,Mi=new Date;function Bi(t,e,r,n){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=r=>(t(r=new Date(r-1)),e(r,1),t(r),r),i.round=t=>{const e=i(t),r=i.ceil(t);return t-e(e(t=new Date(+t),null==r?1:Math.floor(r)),t),i.range=(r,n,a)=>{const o=[];if(r=i.ceil(r),a=null==a?1:Math.floor(a),!(r0))return o;let s;do{o.push(s=new Date(+r)),e(r,a),t(r)}while(sBi(e=>{if(e>=e)for(;t(e),!r(e);)e.setTime(e-1)},(t,n)=>{if(t>=t)if(n<0)for(;++n<=0;)for(;e(t,-1),!r(t););else for(;--n>=0;)for(;e(t,1),!r(t););}),r&&(i.count=(e,n)=>(Ai.setTime(+e),Mi.setTime(+n),t(Ai),t(Mi),Math.floor(r(Ai,Mi))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(n?e=>n(e)%t===0:e=>i.count(0,e)%t===0):i:null)),i}const Li=Bi(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Li.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Bi(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):Li:null);Li.range;const Fi=Bi(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*Ci)},(t,e)=>(e-t)/Ci,t=>t.getUTCSeconds()),$i=(Fi.range,Bi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Ci)},(t,e)=>{t.setTime(+t+e*ki)},(t,e)=>(e-t)/ki,t=>t.getMinutes())),Ei=($i.range,Bi(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*ki)},(t,e)=>(e-t)/ki,t=>t.getUTCMinutes())),Di=(Ei.range,Bi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Ci-t.getMinutes()*ki)},(t,e)=>{t.setTime(+t+e*wi)},(t,e)=>(e-t)/wi,t=>t.getHours())),Ni=(Di.range,Bi(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*wi)},(t,e)=>(e-t)/wi,t=>t.getUTCHours())),Oi=(Ni.range,Bi(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ki)/_i,t=>t.getDate()-1)),ji=(Oi.range,Bi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/_i,t=>t.getUTCDate()-1)),Ii=(ji.range,Bi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/_i,t=>Math.floor(t/_i)));Ii.range;function Ri(t){return Bi(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(t,e)=>{t.setDate(t.getDate()+7*e)},(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ki)/vi)}const Ki=Ri(0),Pi=Ri(1),zi=Ri(2),qi=Ri(3),Wi=Ri(4),Hi=Ri(5),Ui=Ri(6);Ki.range,Pi.range,zi.range,qi.range,Wi.range,Hi.range,Ui.range;function Gi(t){return Bi(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)},(t,e)=>(e-t)/vi)}const Yi=Gi(0),Xi=Gi(1),Vi=Gi(2),Zi=Gi(3),Qi=Gi(4),Ji=Gi(5),ta=Gi(6),ea=(Yi.range,Xi.range,Vi.range,Zi.range,Qi.range,Ji.range,ta.range,Bi(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear()),t=>t.getMonth())),ra=(ea.range,Bi(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear()),t=>t.getUTCMonth())),na=(ra.range,Bi(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear()));na.every=t=>isFinite(t=Math.floor(t))&&t>0?Bi(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)}):null;na.range;const ia=Bi(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());ia.every=t=>isFinite(t=Math.floor(t))&&t>0?Bi(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)}):null;ia.range;function aa(t,e,r,n,i,a){const o=[[Fi,1,Ci],[Fi,5,5e3],[Fi,15,15e3],[Fi,30,3e4],[a,1,ki],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,wi],[i,3,108e5],[i,6,216e5],[i,12,432e5],[n,1,_i],[n,2,1728e5],[r,1,vi],[e,1,Si],[e,3,7776e6],[t,1,Ti]];function s(e,r,n){const i=Math.abs(r-e)/n,a=Zn(([,,t])=>t).right(o,i);if(a===o.length)return t.every(Yn(e/Ti,r/Ti,n));if(0===a)return Li.every(Math.max(Yn(e,r,n),1));const[s,l]=o[i/o[a-1][2][t.toLowerCase(),e]))}function _a(t,e,r){var n=ma.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function va(t,e,r){var n=ma.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function Sa(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function Ta(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function Aa(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function Ma(t,e,r){var n=ma.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Ba(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function La(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function Fa(t,e,r){var n=ma.exec(e.slice(r,r+1));return n?(t.q=3*n[0]-3,r+n[0].length):-1}function $a(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function Ea(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Da(t,e,r){var n=ma.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function Na(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function Oa(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function ja(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function Ia(t,e,r){var n=ma.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function Ra(t,e,r){var n=ma.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function Ka(t,e,r){var n=ya.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function Pa(t,e,r){var n=ma.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function za(t,e,r){var n=ma.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function qa(t,e){return ba(t.getDate(),e,2)}function Wa(t,e){return ba(t.getHours(),e,2)}function Ha(t,e){return ba(t.getHours()%12||12,e,2)}function Ua(t,e){return ba(1+Oi.count(na(t),t),e,3)}function Ga(t,e){return ba(t.getMilliseconds(),e,3)}function Ya(t,e){return Ga(t,e)+"000"}function Xa(t,e){return ba(t.getMonth()+1,e,2)}function Va(t,e){return ba(t.getMinutes(),e,2)}function Za(t,e){return ba(t.getSeconds(),e,2)}function Qa(t){var e=t.getDay();return 0===e?7:e}function Ja(t,e){return ba(Ki.count(na(t)-1,t),e,2)}function to(t){var e=t.getDay();return e>=4||0===e?Wi(t):Wi.ceil(t)}function eo(t,e){return t=to(t),ba(Wi.count(na(t),t)+(4===na(t).getDay()),e,2)}function ro(t){return t.getDay()}function no(t,e){return ba(Pi.count(na(t)-1,t),e,2)}function io(t,e){return ba(t.getFullYear()%100,e,2)}function ao(t,e){return ba((t=to(t)).getFullYear()%100,e,2)}function oo(t,e){return ba(t.getFullYear()%1e4,e,4)}function so(t,e){var r=t.getDay();return ba((t=r>=4||0===r?Wi(t):Wi.ceil(t)).getFullYear()%1e4,e,4)}function lo(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ba(e/60|0,"0",2)+ba(e%60,"0",2)}function co(t,e){return ba(t.getUTCDate(),e,2)}function ho(t,e){return ba(t.getUTCHours(),e,2)}function uo(t,e){return ba(t.getUTCHours()%12||12,e,2)}function po(t,e){return ba(1+ji.count(ia(t),t),e,3)}function fo(t,e){return ba(t.getUTCMilliseconds(),e,3)}function go(t,e){return fo(t,e)+"000"}function mo(t,e){return ba(t.getUTCMonth()+1,e,2)}function yo(t,e){return ba(t.getUTCMinutes(),e,2)}function xo(t,e){return ba(t.getUTCSeconds(),e,2)}function bo(t){var e=t.getUTCDay();return 0===e?7:e}function Co(t,e){return ba(Yi.count(ia(t)-1,t),e,2)}function ko(t){var e=t.getUTCDay();return e>=4||0===e?Qi(t):Qi.ceil(t)}function wo(t,e){return t=ko(t),ba(Qi.count(ia(t),t)+(4===ia(t).getUTCDay()),e,2)}function _o(t){return t.getUTCDay()}function vo(t,e){return ba(Xi.count(ia(t)-1,t),e,2)}function So(t,e){return ba(t.getUTCFullYear()%100,e,2)}function To(t,e){return ba((t=ko(t)).getUTCFullYear()%100,e,2)}function Ao(t,e){return ba(t.getUTCFullYear()%1e4,e,4)}function Mo(t,e){var r=t.getUTCDay();return ba((t=r>=4||0===r?Qi(t):Qi.ceil(t)).getUTCFullYear()%1e4,e,4)}function Bo(){return"+0000"}function Lo(){return"%"}function Fo(t){return+t}function $o(t){return Math.floor(+t/1e3)}function Eo(t){return new Date(t)}function Do(t){return t instanceof Date?+t:+new Date(+t)}function No(t,e,r,n,i,a,o,s,l,c){var h=mi(),u=h.invert,d=h.domain,p=c(".%L"),f=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),b=c("%B"),C=c("%Y");function k(t){return(l(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Fo,s:$o,S:Za,u:Qa,U:Ja,V:eo,w:ro,W:no,x:null,X:null,y:io,Y:oo,Z:lo,"%":Lo},C={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:co,e:co,f:go,g:To,G:Mo,H:ho,I:uo,j:po,L:fo,m:mo,M:yo,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Fo,s:$o,S:xo,u:bo,U:Co,V:wo,w:_o,W:vo,x:null,X:null,y:So,Y:Ao,Z:Bo,"%":Lo},k={a:function(t,e,r){var n=p.exec(e.slice(r));return n?(t.w=f.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){var n=u.exec(e.slice(r));return n?(t.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){var n=y.exec(e.slice(r));return n?(t.m=x.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){var n=g.exec(e.slice(r));return n?(t.m=m.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,r,n){return v(t,e,r,n)},d:Ea,e:Ea,f:Ra,g:Ba,G:Ma,H:Na,I:Na,j:Da,L:Ia,m:$a,M:Oa,p:function(t,e,r){var n=c.exec(e.slice(r));return n?(t.p=h.get(n[0].toLowerCase()),r+n[0].length):-1},q:Fa,Q:Pa,s:za,S:ja,u:va,U:Sa,V:Ta,w:_a,W:Aa,x:function(t,e,n){return v(t,r,e,n)},X:function(t,e,r){return v(t,n,e,r)},y:Ba,Y:Ma,Z:La,"%":Ka};function w(t,e){return function(r){var n,i,a,o=[],s=-1,l=0,c=t.length;for(r instanceof Date||(r=new Date(+r));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(n=ua(da(a.y,0,1))).getUTCDay(),n=i>4||0===i?Xi.ceil(n):Xi(n),n=ji.offset(n,7*(a.V-1)),a.y=n.getUTCFullYear(),a.m=n.getUTCMonth(),a.d=n.getUTCDate()+(a.w+6)%7):(i=(n=ha(da(a.y,0,1))).getDay(),n=i>4||0===i?Pi.ceil(n):Pi(n),n=Oi.offset(n,7*(a.V-1)),a.y=n.getFullYear(),a.m=n.getMonth(),a.d=n.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?ua(da(a.y,0,1)).getUTCDay():ha(da(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,ua(a)):ha(a)}}function v(t,e,r,n){for(var i,a,o=0,s=e.length,l=r.length;o=l)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=k[i in ga?e.charAt(o++):i])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}return b.x=w(r,b),b.X=w(n,b),b.c=w(e,b),C.x=w(r,C),C.X=w(n,C),C.c=w(e,C),{format:function(t){var e=w(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=_(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",C);return e.toString=function(){return t},e},utcParse:function(t){var e=_(t+="",!0);return e.toString=function(){return t},e}}}(t),fa=pa.format,pa.parse,pa.utcFormat,pa.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const jo=function(t){for(var e=t.length/6|0,r=new Array(e),n=0;n=1?Xo:t<=-1?-Xo:Math.asin(t)}const Qo=Math.PI,Jo=2*Qo,ts=1e-6,es=Jo-ts;function rs(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return rs;const r=10**e;return function(t){this._+=t[0];for(let e=1,n=t.length;ets)if(Math.abs(h*s-l*c)>ts&&i){let d=r-a,p=n-o,f=s*s+l*l,g=d*d+p*p,m=Math.sqrt(f),y=Math.sqrt(u),x=i*Math.tan((Qo-Math.acos((f+u-g)/(2*m*y)))/2),b=x/y,C=x/m;Math.abs(b-1)>ts&&this._append`L${t+b*c},${e+b*h}`,this._append`A${i},${i},0,0,${+(h*d>c*p)},${this._x1=t+C*s},${this._y1=e+C*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,r,n,i,a){if(t=+t,e=+e,a=!!a,(r=+r)<0)throw new Error(`negative radius: ${r}`);let o=r*Math.cos(n),s=r*Math.sin(n),l=t+o,c=e+s,h=1^a,u=a?n-i:i-n;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>ts||Math.abs(this._y1-c)>ts)&&this._append`L${l},${c}`,r&&(u<0&&(u=u%Jo+Jo),u>es?this._append`A${r},${r},0,1,${h},${t-o},${e-s}A${r},${r},0,1,${h},${this._x1=l},${this._y1=c}`:u>ts&&this._append`A${r},${r},0,${+(u>=Qo)},${h},${this._x1=t+r*Math.cos(i)},${this._y1=e+r*Math.sin(i)}`)}rect(t,e,r,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${r=+r}v${+n}h${-r}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(null==r)e=null;else{const t=Math.floor(r);if(!(t>=0))throw new RangeError(`invalid digits: ${r}`);e=t}return t},()=>new ns(e)}function as(t){return t.innerRadius}function os(t){return t.outerRadius}function ss(t){return t.startAngle}function ls(t){return t.endAngle}function cs(t){return t&&t.padAngle}function hs(t,e,r,n,i,a,o){var s=t-r,l=e-n,c=(o?a:-a)/Uo(s*s+l*l),h=c*l,u=-c*s,d=t+h,p=e+u,f=r+h,g=n+u,m=(d+f)/2,y=(p+g)/2,x=f-d,b=g-p,C=x*x+b*b,k=i-a,w=d*g-f*p,_=(b<0?-1:1)*Uo(qo(0,k*k*C-w*w)),v=(w*b-x*_)/C,S=(-w*x-b*_)/C,T=(w*b+x*_)/C,A=(-w*x+b*_)/C,M=v-m,B=S-y,L=T-m,F=A-y;return M*M+B*B>L*L+F*F&&(v=T,S=A),{cx:v,cy:S,x01:-h,y01:-u,x11:v*(i/k-1),y11:S*(i/k-1)}}function us(){var t=as,e=os,r=Ro(0),n=null,i=ss,a=ls,o=cs,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),p=+e.apply(this,arguments),f=i.apply(this,arguments)-Xo,g=a.apply(this,arguments)-Xo,m=Ko(g-f),y=g>f;if(s||(s=c=l()),pGo)if(m>Vo-Go)s.moveTo(p*zo(f),p*Ho(f)),s.arc(0,0,p,f,g,!y),d>Go&&(s.moveTo(d*zo(g),d*Ho(g)),s.arc(0,0,d,g,f,y));else{var x,b,C=f,k=g,w=f,_=g,v=m,S=m,T=o.apply(this,arguments)/2,A=T>Go&&(n?+n.apply(this,arguments):Uo(d*d+p*p)),M=Wo(Ko(p-d)/2,+r.apply(this,arguments)),B=M,L=M;if(A>Go){var F=Zo(A/d*Ho(T)),$=Zo(A/p*Ho(T));(v-=2*F)>Go?(w+=F*=y?1:-1,_-=F):(v=0,w=_=(f+g)/2),(S-=2*$)>Go?(C+=$*=y?1:-1,k-=$):(S=0,C=k=(f+g)/2)}var E=p*zo(C),D=p*Ho(C),N=d*zo(_),O=d*Ho(_);if(M>Go){var j,I=p*zo(k),R=p*Ho(k),K=d*zo(w),P=d*Ho(w);if(m1?0:u<-1?Yo:Math.acos(u))/2),G=Uo(j[0]*j[0]+j[1]*j[1]);B=Wo(M,(d-G)/(U-1)),L=Wo(M,(p-G)/(U+1))}else B=L=0}S>Go?L>Go?(x=hs(K,P,E,D,p,L,y),b=hs(I,R,N,O,p,L,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),LGo&&v>Go?B>Go?(x=hs(N,O,I,R,d,-B,y),b=hs(E,D,K,P,d,-B,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),Bt?1:e>=t?0:NaN}function bs(t){return t}function Cs(){var t=bs,e=xs,r=null,n=Ro(0),i=Ro(Vo),a=Ro(0);function o(o){var s,l,c,h,u,d=(o=ds(o)).length,p=0,f=new Array(d),g=new Array(d),m=+n.apply(this,arguments),y=Math.min(Vo,Math.max(-Vo,i.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,a.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s0&&(p+=u);for(null!=e?f.sort(function(t,r){return e(g[t],g[r])}):null!=r&&f.sort(function(t,e){return r(o[t],o[e])}),s=0,c=p?(y-d*b)/p:0;s0?u*c:0)+b,g[l]={data:o[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:Ro(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,r=null,o):e},o.sort=function(t){return arguments.length?(r=t,e=null,o):r},o.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Ro(+t),o):n},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ro(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ro(+t),o):a},o}function ks(){}function ws(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function _s(t){this._context=t}function vs(t){return new _s(t)}function Ss(t){this._context=t}function Ts(t){return new Ss(t)}function As(t){this._context=t}function Ms(t){return new As(t)}ps.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ws(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ws(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Ss.prototype={areaStart:ks,areaEnd:ks,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ws(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},As.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:ws(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Bs{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Ls(t){return new Bs(t,!0)}function Fs(t){return new Bs(t,!1)}function $s(t,e){this._basis=new _s(t),this._beta=e}$s.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n,i=t[0],a=e[0],o=t[r]-i,s=e[r]-a,l=-1;++l<=r;)n=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+n*o),this._beta*e[l]+(1-this._beta)*(a+n*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Es=function t(e){function r(t){return 1===e?new _s(t):new $s(t,e)}return r.beta=function(e){return t(+e)},r}(.85);function Ds(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function Ns(t,e){this._context=t,this._k=(1-e)/6}Ns.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Ds(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Ds(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Os=function t(e){function r(t){return new Ns(t,e)}return r.tension=function(e){return t(+e)},r}(0);function js(t,e){this._context=t,this._k=(1-e)/6}js.prototype={areaStart:ks,areaEnd:ks,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Ds(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Is=function t(e){function r(t){return new js(t,e)}return r.tension=function(e){return t(+e)},r}(0);function Rs(t,e){this._context=t,this._k=(1-e)/6}Rs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ds(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ks=function t(e){function r(t){return new Rs(t,e)}return r.tension=function(e){return t(+e)},r}(0);function Ps(t,e,r){var n=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>Go){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Go){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*c+t._x1*t._l23_2a-e*t._l12_2a)/h,o=(o*c+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(n,i,a,o,t._x2,t._y2)}function zs(t,e){this._context=t,this._alpha=e}zs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Ps(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function r(t){return e?new zs(t,e):new Ns(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Ws(t,e){this._context=t,this._alpha=e}Ws.prototype={areaStart:ks,areaEnd:ks,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Ps(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Hs=function t(e){function r(t){return e?new Ws(t,e):new js(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Us(t,e){this._context=t,this._alpha=e}Us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ps(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Gs=function t(e){function r(t){return e?new Us(t,e):new Rs(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Ys(t){this._context=t}function Xs(t){return new Ys(t)}function Vs(t){return t<0?-1:1}function Zs(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),o=(r-t._y1)/(i||n<0&&-0),s=(a*i+o*n)/(n+i);return(Vs(a)+Vs(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Qs(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Js(t,e,r){var n=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-n)/3;t._context.bezierCurveTo(n+s,i+s*e,a-s,o-s*r,a,o)}function tl(t){this._context=t}function el(t){this._context=new rl(t)}function rl(t){this._context=t}function nl(t){return new tl(t)}function il(t){return new el(t)}function al(t){this._context=t}function ol(t){var e,r,n=t.length-1,i=new Array(n),a=new Array(n),o=new Array(n);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[n-1]=(t[n]+i[n-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}},dl.prototype={constructor:dl,scale:function(t){return 1===t?this:new dl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new dl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new dl(1,0,0);dl.prototype},71807:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>N});var n=r(96540),i=r(34164),a=r(34291),o=r(51715),s=r.n(o);function l({children:t}){return t}var c=r(26058),h=r(71765),u=r(74848);function d({line:t,token:e,...r}){return(0,u.jsx)("span",{...r})}const p={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function f({line:t,classNames:e,showLineNumbers:r,getLineProps:n,getTokenProps:a}){const o=function(t){const e=1===t.length&&"\n"===t[0].content?t[0]:void 0;return e?[{...e,content:""}]:t}(t),s=n({line:o,className:(0,i.A)(e,r&&p.codeLine)}),l=o.map((t,e)=>{const r=a({token:t});return(0,u.jsx)(d,{...r,line:o,token:t,children:r.children},e)});return(0,u.jsxs)("span",{...s,children:[r?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("span",{className:p.codeLineNumber}),(0,u.jsx)("span",{className:p.codeLineContent,children:l})]}):l,(0,u.jsx)("br",{})]})}var g=r(17562);const m=n.forwardRef((t,e)=>(0,u.jsx)("pre",{ref:e,tabIndex:0,...t,className:(0,i.A)(t.className,g.A.codeBlock,"thin-scrollbar")}));function y(t){const{metadata:e}=(0,a.Ph)();return(0,u.jsx)("code",{...t,className:(0,i.A)(t.className,g.A.codeBlockLines,void 0!==e.lineNumbersStart&&g.A.codeBlockLinesWithNumbering),style:{...t.style,counterReset:void 0===e.lineNumbersStart?void 0:"line-count "+(e.lineNumbersStart-1)}})}function x({className:t}){const{metadata:e,wordWrap:r}=(0,a.Ph)(),n=(0,c.A)(),{code:o,language:s,lineNumbersStart:l,lineClassNames:d}=e;return(0,u.jsx)(h.f4,{theme:n,code:o,language:s,children:({className:e,style:n,tokens:a,getLineProps:o,getTokenProps:s})=>(0,u.jsx)(m,{ref:r.codeBlockRef,className:(0,i.A)(t,e),style:n,children:(0,u.jsx)(y,{children:a.map((t,e)=>(0,u.jsx)(f,{line:t,getLineProps:o,getTokenProps:s,classNames:d[e],showLineNumbers:void 0!==l},e))})})})}var b=r(92303);function C({children:t,fallback:e}){return(0,b.default)()?(0,u.jsx)(u.Fragment,{children:t?.()}):e??null}var k=r(21312);function w({className:t,...e}){return(0,u.jsx)("button",{type:"button",...e,className:(0,i.A)("clean-btn",t)})}function _(t){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,u.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function v(t){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,u.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const S={copyButtonCopied:"copyButtonCopied_Vdqa",copyButtonIcons:"copyButtonIcons_IEyt",copyButtonIcon:"copyButtonIcon_TrPX",copyButtonSuccessIcon:"copyButtonSuccessIcon_cVMy"};function T(t){return t?(0,k.translate)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,k.translate)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"})}function A(){const{metadata:{code:t}}=(0,a.Ph)(),[e,r]=(0,n.useState)(!1),i=(0,n.useRef)(void 0),o=(0,n.useCallback)(()=>{!function(t,{target:e=document.body}={}){if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.all="unset",r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.width="2em",r.style.height="2em",r.style.padding="0",r.style.border="none",r.style.outline="none",r.style.boxShadow="none",r.style.background="transparent",r.style.fontSize="12pt",r.style.whiteSpace="pre";const i=document.getSelection(),a=i.rangeCount>0&&i.getRangeAt(0);e.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let o=!1;try{o=document.execCommand("copy")}catch{}r.remove(),a&&(i.removeAllRanges(),i.addRange(a)),n&&n.focus()}(t),r(!0),i.current=window.setTimeout(()=>{r(!1)},1e3)},[t]);return(0,n.useEffect)(()=>()=>window.clearTimeout(i.current),[]),{copyCode:o,isCopied:e}}function M({className:t}){const{copyCode:e,isCopied:r}=A();return(0,u.jsx)(w,{"aria-label":T(r),title:(0,k.translate)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.A)(t,S.copyButton,r&&S.copyButtonCopied),onClick:e,children:(0,u.jsxs)("span",{className:S.copyButtonIcons,"aria-hidden":"true",children:[(0,u.jsx)(_,{className:S.copyButtonIcon}),(0,u.jsx)(v,{className:S.copyButtonSuccessIcon})]})})}function B(t){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,u.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const L={wordWrapButtonIcon:"wordWrapButtonIcon_b1P5",wordWrapButtonEnabled:"wordWrapButtonEnabled_uzNF"};function F({className:t}){const{wordWrap:e}=(0,a.Ph)();if(!(e.isEnabled||e.isCodeScrollable))return!1;const r=(0,k.translate)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,u.jsx)(w,{onClick:()=>e.toggle(),className:(0,i.A)(t,e.isEnabled&&L.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,u.jsx)(B,{className:L.wordWrapButtonIcon,"aria-hidden":"true"})})}const $={buttonGroup:"buttonGroup_M5ko"};function E({className:t}){return(0,u.jsx)(C,{children:()=>(0,u.jsxs)("div",{className:(0,i.A)(t,$.buttonGroup),children:[(0,u.jsx)(F,{}),(0,u.jsx)(M,{})]})})}const D={codeBlockContent:"codeBlockContent_QJqH",codeBlockTitle:"codeBlockTitle_OeMC",codeBlock:"codeBlock_a8dz"};function N({className:t}){const{metadata:e}=(0,a.Ph)();return(0,u.jsxs)(s(),{as:"div",className:(0,i.A)(t,e.className),children:[e.title&&(0,u.jsx)("div",{className:D.codeBlockTitle,children:(0,u.jsx)(l,{children:e.title})}),(0,u.jsxs)("div",{className:D.codeBlockContent,children:[(0,u.jsx)(x,{}),(0,u.jsx)(E,{})]})]})}},72136:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n="object"==typeof global&&global&&global.Object===Object&&global},72453:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});const n={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),hsl2rgb:({h:t,s:e,l:r},i)=>{if(!e)return 2.55*r;t/=360,e/=100;const a=(r/=100)<.5?r*(1+e):r+e-r*e,o=2*r-a;switch(i){case"r":return 255*n.hue2rgb(o,a,t+1/3);case"g":return 255*n.hue2rgb(o,a,t);case"b":return 255*n.hue2rgb(o,a,t-1/3)}},rgb2hsl:({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;const i=Math.max(t,e,r),a=Math.min(t,e,r),o=(i+a)/2;if("l"===n)return 100*o;if(i===a)return 0;const s=i-a;if("s"===n)return 100*(o>.5?s/(2-i-a):s/(i+a));switch(i){case t:return 60*((e-r)/s+(ee>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},72550:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=r(36513),s=n(r(29493)),l=n(r(99208)),c=r(60542);e.default=function({children:t}){const e=function(){const{metadata:t,frontMatter:e,contentTitle:r}=(0,c.useDoc)();return e.hide_title||void 0!==r?null:t.title}();return(0,i.jsxs)("div",{className:(0,a.default)(o.ThemeClassNames.docs.docMarkdown,"markdown"),children:[e&&(0,i.jsx)("header",{children:(0,i.jsx)(l.default,{as:"h1",children:e})}),(0,i.jsx)(s.default,{children:t})]})}},73590:(t,e,r)=>{"use strict";r.d(e,{D:()=>o});var n=r(67633),i=r(40797),a=r(70451),o=(0,i.K2)(t=>{const{securityLevel:e}=(0,n.D7)();let r=(0,a.Ltv)("body");if("sandbox"===e){const e=(0,a.Ltv)(`#i${t}`),n=e.node()?.contentDocument??document;r=(0,a.Ltv)(n.body)}return r.select(`#${t}`)},"selectSvgElement")},73981:(t,e,r)=>{"use strict";r.d(e,{H:()=>rr,r:()=>er});var n=r(40797);function i(t){return null==t}function a(t){return"object"==typeof t&&null!==t}function o(t){return Array.isArray(t)?t:i(t)?[]:[t]}function s(t,e){var r,n,i,a;if(e)for(r=0,n=(a=Object.keys(e)).length;rs&&(e=n-s+(a=" ... ").length),r-n>s&&(r=n+s-(o=" ...").length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+o,pos:n-e+a.length}}function g(t,e){return h.repeat(" ",e-t.length)+t}function m(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var r,n=/\r?\n|\r|\0/g,i=[0],a=[],o=-1;r=n.exec(t.buffer);)a.push(r.index),i.push(r.index+r[0].length),t.position<=r.index&&o<0&&(o=i.length-2);o<0&&(o=i.length-1);var s,l,c="",u=Math.min(t.line+e.linesAfter,a.length).toString().length,d=e.maxLength-(e.indent+u+3);for(s=1;s<=e.linesBefore&&!(o-s<0);s++)l=f(t.buffer,i[o-s],a[o-s],t.position-(i[o]-i[o-s]),d),c=h.repeat(" ",e.indent)+g((t.line-s+1).toString(),u)+" | "+l.str+"\n"+c;for(l=f(t.buffer,i[o],a[o],t.position,d),c+=h.repeat(" ",e.indent)+g((t.line+1).toString(),u)+" | "+l.str+"\n",c+=h.repeat("-",e.indent+u+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(o+s>=a.length);s++)l=f(t.buffer,i[o+s],a[o+s],t.position-(i[o]-i[o+s]),d),c+=h.repeat(" ",e.indent)+g((t.line+s+1).toString(),u)+" | "+l.str+"\n";return c.replace(/\n$/,"")}(0,n.K2)(f,"getLine"),(0,n.K2)(g,"padStart"),(0,n.K2)(m,"makeSnippet");var y=m,x=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],b=["scalar","sequence","mapping"];function C(t){var e={};return null!==t&&Object.keys(t).forEach(function(r){t[r].forEach(function(t){e[String(t)]=r})}),e}function k(t,e){if(e=e||{},Object.keys(e).forEach(function(e){if(-1===x.indexOf(e))throw new p('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=C(e.styleAliases||null),-1===b.indexOf(this.kind))throw new p('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}(0,n.K2)(C,"compileStyleAliases"),(0,n.K2)(k,"Type$1");var w=k;function _(t,e){var r=[];return t[e].forEach(function(t){var e=r.length;r.forEach(function(r,n){r.tag===t.tag&&r.kind===t.kind&&r.multi===t.multi&&(e=n)}),r[e]=t}),r}function v(){var t,e,r={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(t){t.multi?(r.multi[t.kind].push(t),r.multi.fallback.push(t)):r[t.kind][t.tag]=r.fallback[t.tag]=t}for((0,n.K2)(i,"collectType"),t=0,e=arguments.length;t=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:(0,n.K2)(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:(0,n.K2)(function(t){return t.toString(10)},"decimal"),hexadecimal:(0,n.K2)(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),z=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function q(t){return null!==t&&!(!z.test(t)||"_"===t[t.length-1])}function W(t){var e,r;return r="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:r*parseFloat(e,10)}(0,n.K2)(q,"resolveYamlFloat"),(0,n.K2)(W,"constructYamlFloat");var H=/^[-+]?[0-9]+e/;function U(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(h.isNegativeZero(t))return"-0.0";return r=t.toString(10),H.test(r)?r.replace("e",".e"):r}function G(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||h.isNegativeZero(t))}(0,n.K2)(U,"representYamlFloat"),(0,n.K2)(G,"isFloat");var Y=new w("tag:yaml.org,2002:float",{kind:"scalar",resolve:q,construct:W,predicate:G,represent:U,defaultStyle:"lowercase"}),X=T.extend({implicit:[L,D,P,Y]}),V=X,Z=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Q=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function J(t){return null!==t&&(null!==Z.exec(t)||null!==Q.exec(t))}function tt(t){var e,r,n,i,a,o,s,l,c=0,h=null;if(null===(e=Z.exec(t))&&(e=Q.exec(t)),null===e)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],o=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(r,n,i,a,o,s,c)),h&&l.setTime(l.getTime()-h),l}function et(t){return t.toISOString()}(0,n.K2)(J,"resolveYamlTimestamp"),(0,n.K2)(tt,"constructYamlTimestamp"),(0,n.K2)(et,"representYamlTimestamp");var rt=new w("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:J,construct:tt,instanceOf:Date,represent:et});function nt(t){return"<<"===t||null===t}(0,n.K2)(nt,"resolveYamlMerge");var it=new w("tag:yaml.org,2002:merge",{kind:"scalar",resolve:nt}),at="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";function ot(t){if(null===t)return!1;var e,r,n=0,i=t.length,a=at;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8==0}function st(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=at,o=0,s=[];for(e=0;e>16&255),s.push(o>>8&255),s.push(255&o)),o=o<<6|a.indexOf(n.charAt(e));return 0===(r=i%4*6)?(s.push(o>>16&255),s.push(o>>8&255),s.push(255&o)):18===r?(s.push(o>>10&255),s.push(o>>2&255)):12===r&&s.push(o>>4&255),new Uint8Array(s)}function lt(t){var e,r,n="",i=0,a=t.length,o=at;for(e=0;e>18&63],n+=o[i>>12&63],n+=o[i>>6&63],n+=o[63&i]),i=(i<<8)+t[e];return 0===(r=a%3)?(n+=o[i>>18&63],n+=o[i>>12&63],n+=o[i>>6&63],n+=o[63&i]):2===r?(n+=o[i>>10&63],n+=o[i>>4&63],n+=o[i<<2&63],n+=o[64]):1===r&&(n+=o[i>>2&63],n+=o[i<<4&63],n+=o[64],n+=o[64]),n}function ct(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)}(0,n.K2)(ot,"resolveYamlBinary"),(0,n.K2)(st,"constructYamlBinary"),(0,n.K2)(lt,"representYamlBinary"),(0,n.K2)(ct,"isBinary");var ht=new w("tag:yaml.org,2002:binary",{kind:"scalar",resolve:ot,construct:st,predicate:ct,represent:lt}),ut=Object.prototype.hasOwnProperty,dt=Object.prototype.toString;function pt(t){if(null===t)return!0;var e,r,n,i,a,o=[],s=t;for(e=0,r=s.length;e>10),56320+(t-65536&1023))}(0,n.K2)(Ft,"_class"),(0,n.K2)($t,"is_EOL"),(0,n.K2)(Et,"is_WHITE_SPACE"),(0,n.K2)(Dt,"is_WS_OR_EOL"),(0,n.K2)(Nt,"is_FLOW_INDICATOR"),(0,n.K2)(Ot,"fromHexCode"),(0,n.K2)(jt,"escapedHexLen"),(0,n.K2)(It,"fromDecimalCode"),(0,n.K2)(Rt,"simpleEscapeSequence"),(0,n.K2)(Kt,"charFromCodepoint");var Pt,zt=new Array(256),qt=new Array(256);for(Pt=0;Pt<256;Pt++)zt[Pt]=Rt(Pt)?1:0,qt[Pt]=Rt(Pt);function Wt(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||vt,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Ht(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=y(r),new p(e,r)}function Ut(t,e){throw Ht(t,e)}function Gt(t,e){t.onWarning&&t.onWarning.call(null,Ht(t,e))}(0,n.K2)(Wt,"State$1"),(0,n.K2)(Ht,"generateError"),(0,n.K2)(Ut,"throwError"),(0,n.K2)(Gt,"throwWarning");var Yt={YAML:(0,n.K2)(function(t,e,r){var n,i,a;null!==t.version&&Ut(t,"duplication of %YAML directive"),1!==r.length&&Ut(t,"YAML directive accepts exactly one argument"),null===(n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]))&&Ut(t,"ill-formed argument of the YAML directive"),i=parseInt(n[1],10),a=parseInt(n[2],10),1!==i&&Ut(t,"unacceptable YAML version of the document"),t.version=r[0],t.checkLineBreaks=a<2,1!==a&&2!==a&&Gt(t,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:(0,n.K2)(function(t,e,r){var n,i;2!==r.length&&Ut(t,"TAG directive accepts exactly two arguments"),n=r[0],i=r[1],Bt.test(n)||Ut(t,"ill-formed tag handle (first argument) of the TAG directive"),St.call(t.tagMap,n)&&Ut(t,'there is a previously declared suffix for "'+n+'" tag handle'),Lt.test(i)||Ut(t,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch(a){Ut(t,"tag prefix is malformed: "+i)}t.tagMap[n]=i},"handleTagDirective")};function Xt(t,e,r,n){var i,a,o,s;if(e1&&(t.result+=h.repeat("\n",e-1))}function re(t,e,r){var n,i,a,o,s,l,c,h,u=t.kind,d=t.result;if(Dt(h=t.input.charCodeAt(t.position))||Nt(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(Dt(n=t.input.charCodeAt(t.position+1))||r&&Nt(n)))return!1;for(t.kind="scalar",t.result="",i=a=t.position,o=!1;0!==h;){if(58===h){if(Dt(n=t.input.charCodeAt(t.position+1))||r&&Nt(n))break}else if(35===h){if(Dt(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&te(t)||r&&Nt(h))break;if($t(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,Jt(t,!1,-1),t.lineIndent>=e){o=!0,h=t.input.charCodeAt(t.position);continue}t.position=a,t.line=s,t.lineStart=l,t.lineIndent=c;break}}o&&(Xt(t,i,a,!1),ee(t,t.line-s),i=a=t.position,o=!1),Et(h)||(a=t.position+1),h=t.input.charCodeAt(++t.position)}return Xt(t,i,a,!1),!!t.result||(t.kind=u,t.result=d,!1)}function ne(t,e){var r,n,i;if(39!==(r=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(r=t.input.charCodeAt(t.position));)if(39===r){if(Xt(t,n,t.position,!0),39!==(r=t.input.charCodeAt(++t.position)))return!0;n=t.position,t.position++,i=t.position}else $t(r)?(Xt(t,n,i,!0),ee(t,Jt(t,!1,e)),n=i=t.position):t.position===t.lineStart&&te(t)?Ut(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Ut(t,"unexpected end of the stream within a single quoted scalar")}function ie(t,e){var r,n,i,a,o,s;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return Xt(t,r,t.position,!0),t.position++,!0;if(92===s){if(Xt(t,r,t.position,!0),$t(s=t.input.charCodeAt(++t.position)))Jt(t,!1,e);else if(s<256&&zt[s])t.result+=qt[s],t.position++;else if((o=jt(s))>0){for(i=o,a=0;i>0;i--)(o=Ot(s=t.input.charCodeAt(++t.position)))>=0?a=(a<<4)+o:Ut(t,"expected hexadecimal character");t.result+=Kt(a),t.position++}else Ut(t,"unknown escape sequence");r=n=t.position}else $t(s)?(Xt(t,r,n,!0),ee(t,Jt(t,!1,e)),r=n=t.position):t.position===t.lineStart&&te(t)?Ut(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Ut(t,"unexpected end of the stream within a double quoted scalar")}function ae(t,e){var r,n,i,a,o,s,l,c,h,u,d,p,f=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))o=93,c=!1,a=[];else{if(123!==p)return!1;o=125,c=!0,a={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),p=t.input.charCodeAt(++t.position);0!==p;){if(Jt(t,!0,e),(p=t.input.charCodeAt(t.position))===o)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=a,!0;f?44===p&&Ut(t,"expected the node content, but found ','"):Ut(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===p&&Dt(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,Jt(t,!0,e)),r=t.line,n=t.lineStart,i=t.position,de(t,e,1,!1,!0),u=t.tag,h=t.result,Jt(t,!0,e),p=t.input.charCodeAt(t.position),!l&&t.line!==r||58!==p||(s=!0,p=t.input.charCodeAt(++t.position),Jt(t,!0,e),de(t,e,1,!1,!0),d=t.result),c?Zt(t,a,y,u,h,d,r,n,i):s?a.push(Zt(t,null,y,u,h,d,r,n,i)):a.push(h),Jt(t,!0,e),44===(p=t.input.charCodeAt(t.position))?(f=!0,p=t.input.charCodeAt(++t.position)):f=!1}Ut(t,"unexpected end of the stream within a flow collection")}function oe(t,e){var r,n,i,a,o=1,s=!1,l=!1,c=e,u=0,d=!1;if(124===(a=t.input.charCodeAt(t.position)))n=!1;else{if(62!==a)return!1;n=!0}for(t.kind="scalar",t.result="";0!==a;)if(43===(a=t.input.charCodeAt(++t.position))||45===a)1===o?o=43===a?3:2:Ut(t,"repeat of a chomping mode identifier");else{if(!((i=It(a))>=0))break;0===i?Ut(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?Ut(t,"repeat of an indentation width identifier"):(c=e+i-1,l=!0)}if(Et(a)){do{a=t.input.charCodeAt(++t.position)}while(Et(a));if(35===a)do{a=t.input.charCodeAt(++t.position)}while(!$t(a)&&0!==a)}for(;0!==a;){for(Qt(t),t.lineIndent=0,a=t.input.charCodeAt(t.position);(!l||t.lineIndentc&&(c=t.lineIndent),$t(a))u++;else{if(t.lineIndente)&&0!==n)Ut(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(y&&(o=t.line,s=t.lineStart,l=t.position),de(t,e,4,!0,i)&&(y?g=t.result:m=t.result),y||(Zt(t,d,p,f,g,m,o,s,l),f=g=m=null),Jt(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&0!==c)Ut(t,"bad indentation of a mapping entry");else if(t.lineIndente?f=1:t.lineIndent===e?f=0:t.lineIndente?f=1:t.lineIndent===e?f=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l"),null!==t.result&&u.kind!==t.kind&&Ut(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):Ut(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function pe(t){var e,r,n,i,a=t.position,o=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(i=t.input.charCodeAt(t.position))&&(Jt(t,!0,-1),i=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==i));){for(o=!0,i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!Dt(i);)i=t.input.charCodeAt(++t.position);for(n=[],(r=t.input.slice(e,t.position)).length<1&&Ut(t,"directive name must not be less than one character in length");0!==i;){for(;Et(i);)i=t.input.charCodeAt(++t.position);if(35===i){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&!$t(i));break}if($t(i))break;for(e=t.position;0!==i&&!Dt(i);)i=t.input.charCodeAt(++t.position);n.push(t.input.slice(e,t.position))}0!==i&&Qt(t),St.call(Yt,r)?Yt[r](t,r,n):Gt(t,'unknown document directive "'+r+'"')}Jt(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,Jt(t,!0,-1)):o&&Ut(t,"directives end mark is expected"),de(t,t.lineIndent-1,4,!1,!0),Jt(t,!0,-1),t.checkLineBreaks&&At.test(t.input.slice(a,t.position))&&Gt(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&te(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,Jt(t,!0,-1)):t.position=55296&&n<=56319&&e+1=56320&&r<=57343?1024*(n-55296)+r-56320+65536:n}function je(t){return/^\n* /.test(t)}(0,n.K2)(Te,"State"),(0,n.K2)(Ae,"indentString"),(0,n.K2)(Me,"generateNextLine"),(0,n.K2)(Be,"testImplicitResolving"),(0,n.K2)(Le,"isWhitespace"),(0,n.K2)(Fe,"isPrintable"),(0,n.K2)($e,"isNsCharOrWhitespace"),(0,n.K2)(Ee,"isPlainSafe"),(0,n.K2)(De,"isPlainSafeFirst"),(0,n.K2)(Ne,"isPlainSafeLast"),(0,n.K2)(Oe,"codePointAt"),(0,n.K2)(je,"needIndentIndicator");function Ie(t,e,r,n,i,a,o,s){var l,c=0,h=null,u=!1,d=!1,p=-1!==n,f=-1,g=De(Oe(t,0))&&Ne(Oe(t,t.length-1));if(e||o)for(l=0;l=65536?l+=2:l++){if(!Fe(c=Oe(t,l)))return 5;g=g&&Ee(c,h,s),h=c}else{for(l=0;l=65536?l+=2:l++){if(10===(c=Oe(t,l)))u=!0,p&&(d=d||l-f-1>n&&" "!==t[f+1],f=l);else if(!Fe(c))return 5;g=g&&Ee(c,h,s),h=c}d=d||p&&l-f-1>n&&" "!==t[f+1]}return u||d?r>9&&je(t)?5:o?2===a?5:2:d?4:3:!g||o||i(t)?2===a?5:2:1}function Re(t,e,r,i,a){t.dump=function(){if(0===e.length)return 2===t.quotingType?'""':"''";if(!t.noCompatMode&&(-1!==we.indexOf(e)||_e.test(e)))return 2===t.quotingType?'"'+e+'"':"'"+e+"'";var o=t.indent*Math.max(1,r),s=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o),l=i||t.flowLevel>-1&&r>=t.flowLevel;function c(e){return Be(t,e)}switch((0,n.K2)(c,"testAmbiguity"),Ie(e,l,t.indent,s,c,t.quotingType,t.forceQuotes&&!i,a)){case 1:return e;case 2:return"'"+e.replace(/'/g,"''")+"'";case 3:return"|"+Ke(e,t.indent)+Pe(Ae(e,o));case 4:return">"+Ke(e,t.indent)+Pe(Ae(ze(e,s),o));case 5:return'"'+We(e)+'"';default:throw new p("impossible error: invalid scalar style")}}()}function Ke(t,e){var r=je(t)?String(e):"",n="\n"===t[t.length-1];return r+(n&&("\n"===t[t.length-2]||"\n"===t)?"+":n?"":"-")+"\n"}function Pe(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function ze(t,e){for(var r,n,i,a=/(\n+)([^\n]*)/g,o=(r=-1!==(r=t.indexOf("\n"))?r:t.length,a.lastIndex=r,qe(t.slice(0,r),e)),s="\n"===t[0]||" "===t[0];i=a.exec(t);){var l=i[1],c=i[2];n=" "===c[0],o+=l+(s||n||""===c?"":"\n")+qe(c,e),s=n}return o}function qe(t,e){if(""===t||" "===t[0])return t;for(var r,n,i=/ [^ ]/g,a=0,o=0,s=0,l="";r=i.exec(t);)(s=r.index)-a>e&&(n=o>a?o:s,l+="\n"+t.slice(a,n),a=n+1),o=s;return l+="\n",t.length-a>e&&o>a?l+=t.slice(a,o)+"\n"+t.slice(o+1):l+=t.slice(a),l.slice(1)}function We(t){for(var e,r="",n=0,i=0;i=65536?i+=2:i++)n=Oe(t,i),!(e=ke[n])&&Fe(n)?(r+=t[i],n>=65536&&(r+=t[i+1])):r+=e||Se(n);return r}function He(t,e,r){var n,i,a,o="",s=t.tag;for(n=0,i=r.length;n1024&&(s+="? "),s+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Ve(t,e,o,!1,!1)&&(l+=s+=t.dump));t.tag=c,t.dump="{"+l+"}"}function Ye(t,e,r,n){var i,a,o,s,l,c,h="",u=t.tag,d=Object.keys(r);if(!0===t.sortKeys)d.sort();else if("function"==typeof t.sortKeys)d.sort(t.sortKeys);else if(t.sortKeys)throw new p("sortKeys must be a boolean or a function");for(i=0,a=d.length;i1024)&&(t.dump&&10===t.dump.charCodeAt(0)?c+="?":c+="? "),c+=t.dump,l&&(c+=Me(t,e)),Ve(t,e+1,s,!0,l)&&(t.dump&&10===t.dump.charCodeAt(0)?c+=":":c+=": ",h+=c+=t.dump));t.tag=u,t.dump=h||"{}"}function Xe(t,e,r){var n,i,a,o,s,l;for(a=0,o=(i=r?t.explicitTypes:t.implicitTypes).length;a tag resolver accepts not "'+l+'" style');n=s.represent[l](e,l)}t.dump=n}return!0}return!1}function Ve(t,e,r,n,i,a,o){t.tag=null,t.dump=r,Xe(t,r,!1)||Xe(t,r,!0);var s,l=xe.call(t.dump),c=n;n&&(n=t.flowLevel<0||t.flowLevel>e);var h,u,d="[object Object]"===l||"[object Array]"===l;if(d&&(u=-1!==(h=t.duplicates.indexOf(r))),(null!==t.tag&&"?"!==t.tag||u||2!==t.indent&&e>0)&&(i=!1),u&&t.usedDuplicates[h])t.dump="*ref_"+h;else{if(d&&u&&!t.usedDuplicates[h]&&(t.usedDuplicates[h]=!0),"[object Object]"===l)n&&0!==Object.keys(t.dump).length?(Ye(t,e,t.dump,i),u&&(t.dump="&ref_"+h+t.dump)):(Ge(t,e,t.dump),u&&(t.dump="&ref_"+h+" "+t.dump));else if("[object Array]"===l)n&&0!==t.dump.length?(t.noArrayIndent&&!o&&e>0?Ue(t,e-1,t.dump,i):Ue(t,e,t.dump,i),u&&(t.dump="&ref_"+h+t.dump)):(He(t,e,t.dump),u&&(t.dump="&ref_"+h+" "+t.dump));else{if("[object String]"!==l){if("[object Undefined]"===l)return!1;if(t.skipInvalid)return!1;throw new p("unacceptable kind of an object to dump "+l)}"?"!==t.tag&&Re(t,t.dump,e,a,c)}null!==t.tag&&"?"!==t.tag&&(s=encodeURI("!"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,"%21"),s="!"===t.tag[0]?"!"+s:"tag:yaml.org,2002:"===s.slice(0,18)?"!!"+s.slice(18):"!<"+s+">",t.dump=s+" "+t.dump)}return!0}function Ze(t,e){var r,n,i=[],a=[];for(Qe(t,i,a),r=0,n=a.length;r=e?t:""+Array(e+1-n.length).join(r)+t},x={s:y,z:function(t){var e=-t.utcOffset(),r=Math.abs(e),n=Math.floor(r/60),i=r%60;return(e<=0?"+":"-")+y(n,2,"0")+":"+y(i,2,"0")},m:function t(e,r){if(e.date()1)return t(o[0])}else{var s=e.name;C[s]=e,i=s}return!n&&i&&(b=i),i||!n&&b},v=function(t,e){if(w(t))return t.clone();var r="object"==typeof e?e:{};return r.date=t,r.args=arguments,new T(r)},S=x;S.l=_,S.i=w,S.w=function(t,e){return v(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var T=function(){function m(t){this.$L=_(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[k]=!0}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,r=t.utc;if(null===e)return new Date(NaN);if(S.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var i=n[2]-1||0,a=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return S},y.isValid=function(){return!(this.$d.toString()===p)},y.isSame=function(t,e){var r=v(t);return this.startOf(e)<=r&&r<=this.endOf(e)},y.isAfter=function(t,e){return v(t){"use strict";r.d(e,{A:()=>g});var n=r(93539),i=r(63122);const a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(a.re);if(!e)return;const r=e[1],i=parseInt(r,16),o=r.length,s=o%4==0,l=o>4,c=l?1:17,h=l?8:4,u=s?0:-1,d=l?255:15;return n.A.set({r:(i>>h*(u+3)&d)*c,g:(i>>h*(u+2)&d)*c,b:(i>>h*(u+1)&d)*c,a:s?(i&d)*c/255:1},t)},stringify:t=>{const{r:e,g:r,b:n,a:a}=t;return a<1?`#${i.Y[Math.round(e)]}${i.Y[Math.round(r)]}${i.Y[Math.round(n)]}${i.Y[Math.round(255*a)]}`:`#${i.Y[Math.round(e)]}${i.Y[Math.round(r)]}${i.Y[Math.round(n)]}`}},o=a;var s=r(72453);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,r]=e;switch(r){case"grad":return s.A.channel.clamp.h(.9*parseFloat(t));case"rad":return s.A.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.A.channel.clamp.h(360*parseFloat(t))}}return s.A.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const r=t.match(l.re);if(!r)return;const[,i,a,o,c,h]=r;return n.A.set({h:l._hue2deg(i),s:s.A.channel.clamp.s(parseFloat(a)),l:s.A.channel.clamp.l(parseFloat(o)),a:c?s.A.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${s.A.lang.round(e)}, ${s.A.lang.round(r)}%, ${s.A.lang.round(n)}%, ${i})`:`hsl(${s.A.lang.round(e)}, ${s.A.lang.round(r)}%, ${s.A.lang.round(n)}%)`}},c=l,h={colors:{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",cyanaqua:"#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",rebeccapurple:"#663399",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",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return o.parse(e)},stringify:t=>{const e=o.stringify(t);for(const r in h.colors)if(h.colors[r]===e)return r}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const r=t.match(d.re);if(!r)return;const[,i,a,o,l,c,h,u,p]=r;return n.A.set({r:s.A.channel.clamp.r(a?2.55*parseFloat(i):parseFloat(i)),g:s.A.channel.clamp.g(l?2.55*parseFloat(o):parseFloat(o)),b:s.A.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.A.channel.clamp.a(p?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${s.A.lang.round(e)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)}, ${s.A.lang.round(i)})`:`rgb(${s.A.lang.round(e)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)})`}},p=d,f={format:{keyword:h,hex:o,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=o.parse(t)||p.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(i.Z.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?p.stringify(t):o.stringify(t)},g=f},75263:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(95635);const i=(t,e)=>(0,n.A)(t,"l",-e)},75986:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>h});r(96540);var n=r(34164),i=r(17559),a=r(60542),o=r(26849),s=r.n(o);const l={tocMobile:"tocMobile_ITEo"};var c=r(74848);function h(){const{toc:t,frontMatter:e}=(0,a.useDoc)();return(0,c.jsx)(s(),{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,n.A)(i.G.docs.docTocMobile,l.tocMobile)})}},76875:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});const n=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)};var i=Math.max;const a=function(t,e,r){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,o=-1,s=i(a.length-e,0),l=Array(s);++o{"use strict";r.d(e,{A:()=>i});var n=r(95635);const i=(t,e)=>(0,n.A)(t,"l",e)},80127:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});const n=function(){this.__data__=[],this.size=0};var i=r(66984);const a=function(t,e){for(var r=t.length;r--;)if((0,i.A)(t[r][0],e))return r;return-1};var o=Array.prototype.splice;const s=function(t){var e=this.__data__,r=a(e,t);return!(r<0)&&(r==e.length-1?e.pop():o.call(e,r,1),--this.size,!0)};const l=function(t){var e=this.__data__,r=a(e,t);return r<0?void 0:e[r][1]};const c=function(t){return a(this.__data__,t)>-1};const h=function(t,e){var r=this.__data__,n=a(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{"use strict";r.d(e,{A:()=>l});var n=r(41917),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,o=a&&a.exports===i?n.A.Buffer:void 0,s=o?o.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var r=t.length,n=s?s(r):new t.constructor(r);return t.copy(n),n}},81121:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=Function.prototype.toString;const i=function(t){if(null!=t){try{return n.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},83235:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={admonition:"admonition_ntHH",admonitionHeading:"admonitionHeading_JPfy",admonitionIcon:"admonitionIcon_BGV6",admonitionContent:"admonitionContent_iozl"}},83607:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});const n=function(t,e){for(var r=-1,n=Array(t);++r{"use strict";r.d(e,{A:()=>i});var n=r(18744);const i=function(){try{var t=(0,n.A)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},85088:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(36513),o=n(r(64157)),s=n(r(33203)),l=r(60542);e.default=function(t){const e=`docs-doc-id-${t.content.metadata.unversionedId}`,r=t.content;return(0,i.jsx)(l.DocProvider,{content:t.content,children:(0,i.jsxs)(a.HtmlClassNameProvider,{className:e,children:[(0,i.jsx)(o.default,{}),(0,i.jsx)(s.default,{children:(0,i.jsx)(r,{})})]})})}},85827:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={tag:"tag_dtsN",tagRegular:"tagRegular_SGIC",tagWithCount:"tagWithCount_gIvh"}},86068:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=n(r(21312)),s=r(36513),l=n(r(86777)),c=r(97481),h=r(23025);e.default=function({className:t}){const e=(0,h.useDocsVersion)();return e.badge?(0,i.jsx)("span",{className:(0,a.default)(t,s.ThemeClassNames.docs.docVersionBadge,"badge badge--secondary",l.default.badge),children:(0,i.jsx)(c.Typography,{variant:"body3",children:(0,i.jsx)(o.default,{id:"theme.docs.versionBadge.label",values:{versionLabel:e.label},children:"Version: {versionLabel}"})})}):null}},86777:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={badge:"badge_AsjZ"}},88308:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(36513),o=r(54865),s=n(r(71807));e.default=function(t){const e=function(t){const{prism:e}=(0,a.useThemeConfig)();return(0,o.createCodeBlockMetadata)({code:t.children,className:t.className,metastring:t.metastring,magicComments:e.magicComments,defaultLanguage:e.defaultLanguage,language:t.language,title:t.title,showLineNumbers:t.showLineNumbers})}(t),r=(0,o.useCodeWordWrap)();return(0,i.jsx)(o.CodeBlockContextProvider,{metadata:e,wordWrap:r,children:(0,i.jsx)(s.default,{})})}},88496:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(241),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=n.A?n.A.toStringTag:void 0;const l=function(t){var e=a.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(l){}var i=o.call(t);return n&&(e?t[s]=r:delete t[s]),i};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=n.A?n.A.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},88857:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(97481),o=r(36513),s=n(r(21312)),l=n(r(34559)),c=n(r(96540)),h=n(r(83235));const u={note:{infimaClassName:"secondary",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M8.00004 11.3333C8.18893 11.3333 8.34737 11.2693 8.47537 11.1413C8.60337 11.0133 8.66715 10.8551 8.66671 10.6667C8.66671 10.4778 8.60271 10.3193 8.47471 10.1913C8.34671 10.0633 8.18849 9.99957 8.00004 10C7.81115 10 7.65271 10.064 7.52471 10.192C7.39671 10.32 7.33293 10.4782 7.33337 10.6667C7.33337 10.8556 7.39737 11.014 7.52537 11.142C7.65337 11.27 7.8116 11.3338 8.00004 11.3333ZM7.33337 8.66668H8.66671V4.66668H7.33337V8.66668ZM8.00004 14.6667C7.07782 14.6667 6.21115 14.4916 5.40004 14.1413C4.58893 13.7911 3.88337 13.3162 3.28337 12.7167C2.68337 12.1167 2.20849 11.4111 1.85871 10.6C1.50893 9.7889 1.33382 8.92223 1.33337 8.00001C1.33337 7.07779 1.50849 6.21112 1.85871 5.40001C2.20893 4.5889 2.68382 3.88334 3.28337 3.28334C3.88337 2.68334 4.58893 2.20845 5.40004 1.85868C6.21115 1.5089 7.07782 1.33379 8.00004 1.33334C8.92226 1.33334 9.78893 1.50845 10.6 1.85868C11.4112 2.2089 12.1167 2.68379 12.7167 3.28334C13.3167 3.88334 13.7918 4.5889 14.142 5.40001C14.4923 6.21112 14.6672 7.07779 14.6667 8.00001C14.6667 8.92223 14.4916 9.7889 14.1414 10.6C13.7912 11.4111 13.3163 12.1167 12.7167 12.7167C12.1167 13.3167 11.4112 13.7918 10.6 14.142C9.78893 14.4922 8.92226 14.6671 8.00004 14.6667ZM8.00004 13.3333C9.48893 13.3333 10.75 12.8167 11.7834 11.7833C12.8167 10.75 13.3334 9.4889 13.3334 8.00001C13.3334 6.51112 12.8167 5.25001 11.7834 4.21668C10.75 3.18334 9.48893 2.66668 8.00004 2.66668C6.51115 2.66668 5.25004 3.18334 4.21671 4.21668C3.18337 5.25001 2.66671 6.51112 2.66671 8.00001C2.66671 9.4889 3.18337 10.75 4.21671 11.7833C5.25004 12.8167 6.51115 13.3333 8.00004 13.3333Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})},tip:{infimaClassName:"success",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M8 14.6666C7.63333 14.6666 7.31933 14.536 7.058 14.2746C6.79667 14.0133 6.66622 13.6995 6.66667 13.3333H9.33333C9.33333 13.7 9.20267 14.014 8.94133 14.2753C8.68 14.5366 8.36622 14.6671 8 14.6666ZM5.33333 12.6666V11.3333H10.6667V12.6666H5.33333ZM5.5 10.6666C4.73333 10.2111 4.12489 9.59998 3.67467 8.83331C3.22445 8.06665 2.99956 7.23331 3 6.33331C3 4.94442 3.48622 3.76376 4.45867 2.79131C5.43111 1.81887 6.61156 1.33287 8 1.33331C9.38889 1.33331 10.5696 1.81954 11.542 2.79198C12.5144 3.76442 13.0004 4.94487 13 6.33331C13 7.23331 12.7751 8.06665 12.3253 8.83331C11.8756 9.59998 11.2671 10.2111 10.5 10.6666H5.5ZM5.9 9.33331H10.1C10.6 8.97776 10.9862 8.53887 11.2587 8.01665C11.5311 7.49442 11.6671 6.93331 11.6667 6.33331C11.6667 5.31109 11.3111 4.44442 10.6 3.73331C9.88889 3.0222 9.02222 2.66665 8 2.66665C6.97778 2.66665 6.11111 3.0222 5.4 3.73331C4.68889 4.44442 4.33333 5.31109 4.33333 6.33331C4.33333 6.93331 4.46956 7.49442 4.742 8.01665C5.01444 8.53887 5.40045 8.97776 5.9 9.33331Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})},danger:{infimaClassName:"danger",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M5.5 14L2 10.5V5.5L5.5 2H10.5L14 5.5V10.5L10.5 14H5.5ZM6.1 10.8333L8 8.93333L9.9 10.8333L10.8333 9.9L8.93333 8L10.8333 6.1L9.9 5.16667L8 7.06667L6.1 5.16667L5.16667 6.1L7.06667 8L5.16667 9.9L6.1 10.8333ZM6.06667 12.6667H9.93333L12.6667 9.93333V6.06667L9.93333 3.33333H6.06667L3.33333 6.06667V9.93333L6.06667 12.6667Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})},info:{infimaClassName:"info",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M7.33334 11.3333H8.66668V7.33331H7.33334V11.3333ZM8.00001 5.99998C8.1889 5.99998 8.34734 5.93598 8.47534 5.80798C8.60334 5.67998 8.66712 5.52176 8.66668 5.33331C8.66668 5.14442 8.60268 4.98598 8.47468 4.85798C8.34668 4.72998 8.18845 4.6662 8.00001 4.66665C7.81112 4.66665 7.65268 4.73065 7.52468 4.85865C7.39668 4.98665 7.3329 5.14487 7.33334 5.33331C7.33334 5.5222 7.39734 5.68065 7.52534 5.80865C7.65334 5.93665 7.81157 6.00042 8.00001 5.99998ZM8.00001 14.6666C7.07779 14.6666 6.21112 14.4915 5.40001 14.1413C4.5889 13.7911 3.88334 13.3162 3.28334 12.7166C2.68334 12.1166 2.20845 11.4111 1.85868 10.6C1.5089 9.78887 1.33379 8.9222 1.33334 7.99998C1.33334 7.07776 1.50845 6.21109 1.85868 5.39998C2.2089 4.58887 2.68379 3.88331 3.28334 3.28331C3.88334 2.68331 4.5889 2.20842 5.40001 1.85865C6.21112 1.50887 7.07779 1.33376 8.00001 1.33331C8.92223 1.33331 9.7889 1.50842 10.6 1.85865C11.4111 2.20887 12.1167 2.68376 12.7167 3.28331C13.3167 3.88331 13.7918 4.58887 14.142 5.39998C14.4922 6.21109 14.6671 7.07776 14.6667 7.99998C14.6667 8.9222 14.4916 9.78887 14.1413 10.6C13.7911 11.4111 13.3162 12.1166 12.7167 12.7166C12.1167 13.3166 11.4111 13.7918 10.6 14.142C9.7889 14.4922 8.92223 14.6671 8.00001 14.6666ZM8.00001 13.3333C9.4889 13.3333 10.75 12.8166 11.7833 11.7833C12.8167 10.75 13.3333 9.48887 13.3333 7.99998C13.3333 6.51109 12.8167 5.24998 11.7833 4.21665C10.75 3.18331 9.4889 2.66665 8.00001 2.66665C6.51112 2.66665 5.25001 3.18331 4.21668 4.21665C3.18334 5.24998 2.66668 6.51109 2.66668 7.99998C2.66668 9.48887 3.18334 10.75 4.21668 11.7833C5.25001 12.8166 6.51112 13.3333 8.00001 13.3333Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})},caution:{infimaClassName:"warning",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M8.00001 14.6833C7.82224 14.6833 7.65268 14.65 7.49135 14.5833C7.33001 14.5167 7.1829 14.4222 7.05001 14.3L1.70001 8.94999C1.57779 8.81666 1.48335 8.66932 1.41668 8.50799C1.35001 8.34666 1.31668 8.17732 1.31668 7.99999C1.31668 7.82221 1.35001 7.64999 1.41668 7.48332C1.48335 7.31666 1.57779 7.17221 1.70001 7.04999L7.05001 1.69999C7.18335 1.56666 7.33068 1.46932 7.49201 1.40799C7.65335 1.34666 7.82268 1.31621 8.00001 1.31666C8.17779 1.31666 8.35001 1.34732 8.51668 1.40866C8.68335 1.46999 8.82779 1.5671 8.95001 1.69999L14.3 7.04999C14.4333 7.17221 14.5307 7.31666 14.592 7.48332C14.6533 7.64999 14.6838 7.82221 14.6833 7.99999C14.6833 8.17777 14.6529 8.34732 14.592 8.50866C14.5311 8.66999 14.4338 8.8171 14.3 8.94999L8.95001 14.3C8.82779 14.4222 8.68335 14.5167 8.51668 14.5833C8.35001 14.65 8.17779 14.6833 8.00001 14.6833ZM8.00001 13.35L13.35 7.99999L8.00001 2.64999L2.65001 7.99999L8.00001 13.35ZM7.33335 8.66666H8.66668V4.66666H7.33335V8.66666ZM8.00001 10.6667C8.1889 10.6667 8.34735 10.6027 8.47535 10.4747C8.60335 10.3467 8.66713 10.1884 8.66668 9.99999C8.66668 9.8111 8.60268 9.65266 8.47468 9.52466C8.34668 9.39666 8.18846 9.33288 8.00001 9.33332C7.81113 9.33332 7.65268 9.39732 7.52468 9.52532C7.39668 9.65332 7.3329 9.81154 7.33335 9.99999C7.33335 10.1889 7.39735 10.3473 7.52535 10.4753C7.65335 10.6033 7.81157 10.6671 8.00001 10.6667Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})}},d={secondary:"note",important:"info",success:"tip",warning:"danger"};function p(t){const{mdxAdmonitionTitle:e,rest:r}=function(t){const e=c.default.Children.toArray(t),r=e.find(t=>c.default.isValidElement(t)&&"mdxAdmonitionTitle"===t.props?.mdxType),n=(0,i.jsx)(i.Fragment,{children:e.filter(t=>t!==r)});return{mdxAdmonitionTitle:r,rest:n}}(t.children);return{...t,title:t.title??e,children:r}}e.default=function(t){const{children:e,type:r,title:n,icon:s}=p(t),c=function(t){const e=d[t]??t,r=u[e];return r||(console.warn(`No admonition config found for admonition type "${e}". Using Info as fallback.`),u.info)}(r),f=n??c.label,{iconComponent:g}=c,m=s??(0,i.jsx)(g,{});return(0,i.jsxs)("div",{className:(0,l.default)(o.ThemeClassNames.common.admonition,o.ThemeClassNames.common.admonitionType(t.type),`alert--${c.infimaClassName}`,h.default.admonition),children:[(0,i.jsx)("span",{className:h.default.admonitionIcon,children:m}),(0,i.jsxs)("div",{children:[(0,i.jsx)(a.Typography,{variant:"body1",className:h.default.admonitionHeading,children:f}),(0,i.jsx)(a.Typography,{variant:"body1",className:h.default.admonitionContent,children:e})]})]})}},89610:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(88496),i=r(23149);const a=function(t){if(!(0,i.A)(t))return!1;var e=(0,n.A)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},89724:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>o});r(96540);var n=r(34164);const i={img:"img_ev3q"};var a=r(74848);function o(t){return(0,a.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,n.A)(e,i.img))});var e}},90565:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(43988);const i=function(t){var e=new t.constructor(t.byteLength);return new n.A(e).set(new n.A(t)),e}},92049:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=Array.isArray},93539:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(72453),i=r(63122);const a=class{constructor(){this.type=i.Z.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=i.Z.ALL}is(t){return this.type===t}};const o=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.Z.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:r,l:i}=t;void 0===e&&(t.h=n.A.channel.rgb2hsl(t,"h")),void 0===r&&(t.s=n.A.channel.rgb2hsl(t,"s")),void 0===i&&(t.l=n.A.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:r,b:i}=t;void 0===e&&(t.r=n.A.channel.hsl2rgb(t,"r")),void 0===r&&(t.g=n.A.channel.hsl2rgb(t,"g")),void 0===i&&(t.b=n.A.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(i.Z.HSL)||void 0===e?(this._ensureHSL(),n.A.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(i.Z.HSL)||void 0===e?(this._ensureHSL(),n.A.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(i.Z.HSL)||void 0===e?(this._ensureHSL(),n.A.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(i.Z.RGB)||void 0===e?(this._ensureRGB(),n.A.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(i.Z.RGB)||void 0===e?(this._ensureRGB(),n.A.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(i.Z.RGB)||void 0===e?(this._ensureRGB(),n.A.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(i.Z.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(i.Z.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(i.Z.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(i.Z.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(i.Z.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(i.Z.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},95635:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(72453),i=r(74886);const a=(t,e,r)=>{const a=i.A.parse(t),o=a[e],s=n.A.channel.clamp[e](o+r);return o!==s&&(a[e]=s),i.A.stringify(a)}},97271:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=Object.prototype;const i=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},97795:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>c});r(96540);var n=r(34164),i=r(26058),a=r(17559),o=r(34291);const s={codeBlockContainer:"codeBlockContainer_Ckt0"};var l=r(74848);function c({as:t,...e}){const r=(0,i.A)(),c=(0,o.M$)(r);return(0,l.jsx)(t,{...e,style:c,className:(0,n.A)(e.className,s.codeBlockContainer,a.G.common.codeBlock)})}},99208:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(31795)),o=r(59667);e.default=function(t){const e=(0,o.useMDXEnhancementElements)("heading","after",t);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.default,{...t}),e]})}},99418:(t,e,r)=>{"use strict";r.d(e,{A:()=>st});const{entries:n,setPrototypeOf:i,isFrozen:a,getPrototypeOf:o,getOwnPropertyDescriptor:s}=Object;let{freeze:l,seal:c,create:h}=Object,{apply:u,construct:d}="undefined"!=typeof Reflect&&Reflect;l||(l=function(t){return t}),c||(c=function(t){return t}),u||(u=function(t,e){for(var r=arguments.length,n=new Array(r>2?r-2:0),i=2;i1?e-1:0),n=1;n1?r-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:x;i&&i(t,null);let n=e.length;for(;n--;){let i=e[n];if("string"==typeof i){const t=r(i);t!==i&&(a(e)||(e[n]=t),i=t)}t[i]=!0}return t}function L(t){for(let e=0;e/gm),U=c(/\$\{[\w\W]*/gm),G=c(/^data-[\-\w.\u00B7-\uFFFF]+$/),Y=c(/^aria-[\-\w]+$/),X=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),V=c(/^(?:\w+script|data):/i),Z=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Q=c(/^html$/i),J=c(/^[a-z][.\w]*(-[.\w]+)+$/i);var tt=Object.freeze({__proto__:null,ARIA_ATTR:Y,ATTR_WHITESPACE:Z,CUSTOM_ELEMENT:J,DATA_ATTR:G,DOCTYPE_NAME:Q,ERB_EXPR:H,IS_ALLOWED_URI:X,IS_SCRIPT_OR_DATA:V,MUSTACHE_EXPR:W,TMPLIT_EXPR:U});const et=1,rt=3,nt=7,it=8,at=9,ot=function(){return"undefined"==typeof window?null:window};var st=function t(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ot();const r=e=>t(e);if(r.version="3.2.7",r.removed=[],!e||!e.document||e.document.nodeType!==at||!e.Element)return r.isSupported=!1,r;let{document:i}=e;const a=i,o=a.currentScript,{DocumentFragment:s,HTMLTemplateElement:c,Node:u,Element:d,NodeFilter:A,NamedNodeMap:M=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:L,DOMParser:W,trustedTypes:H}=e,U=d.prototype,G=$(U,"cloneNode"),Y=$(U,"remove"),V=$(U,"nextSibling"),Z=$(U,"childNodes"),J=$(U,"parentNode");if("function"==typeof c){const t=i.createElement("template");t.content&&t.content.ownerDocument&&(i=t.content.ownerDocument)}let st,lt="";const{implementation:ct,createNodeIterator:ht,createDocumentFragment:ut,getElementsByTagName:dt}=i,{importNode:pt}=a;let ft={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};r.isSupported="function"==typeof n&&"function"==typeof J&&ct&&void 0!==ct.createHTMLDocument;const{MUSTACHE_EXPR:gt,ERB_EXPR:mt,TMPLIT_EXPR:yt,DATA_ATTR:xt,ARIA_ATTR:bt,IS_SCRIPT_OR_DATA:Ct,ATTR_WHITESPACE:kt,CUSTOM_ELEMENT:wt}=tt;let{IS_ALLOWED_URI:_t}=tt,vt=null;const St=B({},[...E,...D,...N,...j,...R]);let Tt=null;const At=B({},[...K,...P,...z,...q]);let Mt=Object.seal(h(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Bt=null,Lt=null,Ft=!0,$t=!0,Et=!1,Dt=!0,Nt=!1,Ot=!0,jt=!1,It=!1,Rt=!1,Kt=!1,Pt=!1,zt=!1,qt=!0,Wt=!1,Ht=!0,Ut=!1,Gt={},Yt=null;const Xt=B({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Vt=null;const Zt=B({},["audio","video","img","source","image","track"]);let Qt=null;const Jt=B({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),te="http://www.w3.org/1998/Math/MathML",ee="http://www.w3.org/2000/svg",re="http://www.w3.org/1999/xhtml";let ne=re,ie=!1,ae=null;const oe=B({},[te,ee,re],b);let se=B({},["mi","mo","mn","ms","mtext"]),le=B({},["annotation-xml"]);const ce=B({},["title","style","font","a","script"]);let he=null;const ue=["application/xhtml+xml","text/html"];let de=null,pe=null;const fe=i.createElement("form"),ge=function(t){return t instanceof RegExp||t instanceof Function},me=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!pe||pe!==t){if(t&&"object"==typeof t||(t={}),t=F(t),he=-1===ue.indexOf(t.PARSER_MEDIA_TYPE)?"text/html":t.PARSER_MEDIA_TYPE,de="application/xhtml+xml"===he?b:x,vt=v(t,"ALLOWED_TAGS")?B({},t.ALLOWED_TAGS,de):St,Tt=v(t,"ALLOWED_ATTR")?B({},t.ALLOWED_ATTR,de):At,ae=v(t,"ALLOWED_NAMESPACES")?B({},t.ALLOWED_NAMESPACES,b):oe,Qt=v(t,"ADD_URI_SAFE_ATTR")?B(F(Jt),t.ADD_URI_SAFE_ATTR,de):Jt,Vt=v(t,"ADD_DATA_URI_TAGS")?B(F(Zt),t.ADD_DATA_URI_TAGS,de):Zt,Yt=v(t,"FORBID_CONTENTS")?B({},t.FORBID_CONTENTS,de):Xt,Bt=v(t,"FORBID_TAGS")?B({},t.FORBID_TAGS,de):F({}),Lt=v(t,"FORBID_ATTR")?B({},t.FORBID_ATTR,de):F({}),Gt=!!v(t,"USE_PROFILES")&&t.USE_PROFILES,Ft=!1!==t.ALLOW_ARIA_ATTR,$t=!1!==t.ALLOW_DATA_ATTR,Et=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Dt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Nt=t.SAFE_FOR_TEMPLATES||!1,Ot=!1!==t.SAFE_FOR_XML,jt=t.WHOLE_DOCUMENT||!1,Kt=t.RETURN_DOM||!1,Pt=t.RETURN_DOM_FRAGMENT||!1,zt=t.RETURN_TRUSTED_TYPE||!1,Rt=t.FORCE_BODY||!1,qt=!1!==t.SANITIZE_DOM,Wt=t.SANITIZE_NAMED_PROPS||!1,Ht=!1!==t.KEEP_CONTENT,Ut=t.IN_PLACE||!1,_t=t.ALLOWED_URI_REGEXP||X,ne=t.NAMESPACE||re,se=t.MATHML_TEXT_INTEGRATION_POINTS||se,le=t.HTML_INTEGRATION_POINTS||le,Mt=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ge(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Mt.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ge(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Mt.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Mt.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Nt&&($t=!1),Pt&&(Kt=!0),Gt&&(vt=B({},R),Tt=[],!0===Gt.html&&(B(vt,E),B(Tt,K)),!0===Gt.svg&&(B(vt,D),B(Tt,P),B(Tt,q)),!0===Gt.svgFilters&&(B(vt,N),B(Tt,P),B(Tt,q)),!0===Gt.mathMl&&(B(vt,j),B(Tt,z),B(Tt,q))),t.ADD_TAGS&&(vt===St&&(vt=F(vt)),B(vt,t.ADD_TAGS,de)),t.ADD_ATTR&&(Tt===At&&(Tt=F(Tt)),B(Tt,t.ADD_ATTR,de)),t.ADD_URI_SAFE_ATTR&&B(Qt,t.ADD_URI_SAFE_ATTR,de),t.FORBID_CONTENTS&&(Yt===Xt&&(Yt=F(Yt)),B(Yt,t.FORBID_CONTENTS,de)),Ht&&(vt["#text"]=!0),jt&&B(vt,["html","head","body"]),vt.table&&(B(vt,["tbody"]),delete Bt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');st=t.TRUSTED_TYPES_POLICY,lt=st.createHTML("")}else void 0===st&&(st=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let r=null;const n="data-tt-policy-suffix";e&&e.hasAttribute(n)&&(r=e.getAttribute(n));const i="dompurify"+(r?"#"+r:"");try{return t.createPolicy(i,{createHTML:t=>t,createScriptURL:t=>t})}catch(a){return console.warn("TrustedTypes policy "+i+" could not be created."),null}}(H,o)),null!==st&&"string"==typeof lt&&(lt=st.createHTML(""));l&&l(t),pe=t}},ye=B({},[...D,...N,...O]),xe=B({},[...j,...I]),be=function(t){m(r.removed,{element:t});try{J(t).removeChild(t)}catch(e){Y(t)}},Ce=function(t,e){try{m(r.removed,{attribute:e.getAttributeNode(t),from:e})}catch(n){m(r.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t)if(Kt||Pt)try{be(e)}catch(n){}else try{e.setAttribute(t,"")}catch(n){}},ke=function(t){let e=null,r=null;if(Rt)t=""+t;else{const e=C(t,/^[\r\n\t ]+/);r=e&&e[0]}"application/xhtml+xml"===he&&ne===re&&(t=''+t+"");const n=st?st.createHTML(t):t;if(ne===re)try{e=(new W).parseFromString(n,he)}catch(o){}if(!e||!e.documentElement){e=ct.createDocument(ne,"template",null);try{e.documentElement.innerHTML=ie?lt:n}catch(o){}}const a=e.body||e.documentElement;return t&&r&&a.insertBefore(i.createTextNode(r),a.childNodes[0]||null),ne===re?dt.call(e,jt?"html":"body")[0]:jt?e.documentElement:a},we=function(t){return ht.call(t.ownerDocument||t,t,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT|A.SHOW_PROCESSING_INSTRUCTION|A.SHOW_CDATA_SECTION,null)},_e=function(t){return t instanceof L&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof M)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ve=function(t){return"function"==typeof u&&t instanceof u};function Se(t,e,n){p(t,t=>{t.call(r,e,n,pe)})}const Te=function(t){let e=null;if(Se(ft.beforeSanitizeElements,t,null),_e(t))return be(t),!0;const n=de(t.nodeName);if(Se(ft.uponSanitizeElement,t,{tagName:n,allowedTags:vt}),Ot&&t.hasChildNodes()&&!ve(t.firstElementChild)&&S(/<[/\w!]/g,t.innerHTML)&&S(/<[/\w!]/g,t.textContent))return be(t),!0;if(t.nodeType===nt)return be(t),!0;if(Ot&&t.nodeType===it&&S(/<[/\w]/g,t.data))return be(t),!0;if(!vt[n]||Bt[n]){if(!Bt[n]&&Me(n)){if(Mt.tagNameCheck instanceof RegExp&&S(Mt.tagNameCheck,n))return!1;if(Mt.tagNameCheck instanceof Function&&Mt.tagNameCheck(n))return!1}if(Ht&&!Yt[n]){const e=J(t)||t.parentNode,r=Z(t)||t.childNodes;if(r&&e){for(let n=r.length-1;n>=0;--n){const i=G(r[n],!0);i.__removalCount=(t.__removalCount||0)+1,e.insertBefore(i,V(t))}}}return be(t),!0}return t instanceof d&&!function(t){let e=J(t);e&&e.tagName||(e={namespaceURI:ne,tagName:"template"});const r=x(t.tagName),n=x(e.tagName);return!!ae[t.namespaceURI]&&(t.namespaceURI===ee?e.namespaceURI===re?"svg"===r:e.namespaceURI===te?"svg"===r&&("annotation-xml"===n||se[n]):Boolean(ye[r]):t.namespaceURI===te?e.namespaceURI===re?"math"===r:e.namespaceURI===ee?"math"===r&&le[n]:Boolean(xe[r]):t.namespaceURI===re?!(e.namespaceURI===ee&&!le[n])&&!(e.namespaceURI===te&&!se[n])&&!xe[r]&&(ce[r]||!ye[r]):!("application/xhtml+xml"!==he||!ae[t.namespaceURI]))}(t)?(be(t),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!S(/<\/no(script|embed|frames)/i,t.innerHTML)?(Nt&&t.nodeType===rt&&(e=t.textContent,p([gt,mt,yt],t=>{e=k(e,t," ")}),t.textContent!==e&&(m(r.removed,{element:t.cloneNode()}),t.textContent=e)),Se(ft.afterSanitizeElements,t,null),!1):(be(t),!0)},Ae=function(t,e,r){if(qt&&("id"===e||"name"===e)&&(r in i||r in fe))return!1;if($t&&!Lt[e]&&S(xt,e));else if(Ft&&S(bt,e));else if(!Tt[e]||Lt[e]){if(!(Me(t)&&(Mt.tagNameCheck instanceof RegExp&&S(Mt.tagNameCheck,t)||Mt.tagNameCheck instanceof Function&&Mt.tagNameCheck(t))&&(Mt.attributeNameCheck instanceof RegExp&&S(Mt.attributeNameCheck,e)||Mt.attributeNameCheck instanceof Function&&Mt.attributeNameCheck(e,t))||"is"===e&&Mt.allowCustomizedBuiltInElements&&(Mt.tagNameCheck instanceof RegExp&&S(Mt.tagNameCheck,r)||Mt.tagNameCheck instanceof Function&&Mt.tagNameCheck(r))))return!1}else if(Qt[e]);else if(S(_t,k(r,kt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==w(r,"data:")||!Vt[t]){if(Et&&!S(Ct,k(r,kt,"")));else if(r)return!1}else;return!0},Me=function(t){return"annotation-xml"!==t&&C(t,wt)},Be=function(t){Se(ft.beforeSanitizeAttributes,t,null);const{attributes:e}=t;if(!e||_e(t))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tt,forceKeepAttr:void 0};let i=e.length;for(;i--;){const o=e[i],{name:s,namespaceURI:l,value:c}=o,h=de(s),u=c;let d="value"===s?u:_(u);if(n.attrName=h,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,Se(ft.uponSanitizeAttribute,t,n),d=n.attrValue,!Wt||"id"!==h&&"name"!==h||(Ce(s,t),d="user-content-"+d),Ot&&S(/((--!?|])>)|<\/(style|title|textarea)/i,d)){Ce(s,t);continue}if("attributename"===h&&C(d,"href")){Ce(s,t);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){Ce(s,t);continue}if(!Dt&&S(/\/>/i,d)){Ce(s,t);continue}Nt&&p([gt,mt,yt],t=>{d=k(d,t," ")});const f=de(t.nodeName);if(Ae(f,h,d)){if(st&&"object"==typeof H&&"function"==typeof H.getAttributeType)if(l);else switch(H.getAttributeType(f,h)){case"TrustedHTML":d=st.createHTML(d);break;case"TrustedScriptURL":d=st.createScriptURL(d)}if(d!==u)try{l?t.setAttributeNS(l,s,d):t.setAttribute(s,d),_e(t)?be(t):g(r.removed)}catch(a){Ce(s,t)}}else Ce(s,t)}Se(ft.afterSanitizeAttributes,t,null)},Le=function t(e){let r=null;const n=we(e);for(Se(ft.beforeSanitizeShadowDOM,e,null);r=n.nextNode();)Se(ft.uponSanitizeShadowNode,r,null),Te(r),Be(r),r.content instanceof s&&t(r.content);Se(ft.afterSanitizeShadowDOM,e,null)};return r.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,i=null,o=null,l=null;if(ie=!t,ie&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ve(t)){if("function"!=typeof t.toString)throw T("toString is not a function");if("string"!=typeof(t=t.toString()))throw T("dirty is not a string, aborting")}if(!r.isSupported)return t;if(It||me(e),r.removed=[],"string"==typeof t&&(Ut=!1),Ut){if(t.nodeName){const e=de(t.nodeName);if(!vt[e]||Bt[e])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof u)n=ke("\x3c!----\x3e"),i=n.ownerDocument.importNode(t,!0),i.nodeType===et&&"BODY"===i.nodeName||"HTML"===i.nodeName?n=i:n.appendChild(i);else{if(!Kt&&!Nt&&!jt&&-1===t.indexOf("<"))return st&&zt?st.createHTML(t):t;if(n=ke(t),!n)return Kt?null:zt?lt:""}n&&Rt&&be(n.firstChild);const c=we(Ut?t:n);for(;o=c.nextNode();)Te(o),Be(o),o.content instanceof s&&Le(o.content);if(Ut)return t;if(Kt){if(Pt)for(l=ut.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Tt.shadowroot||Tt.shadowrootmode)&&(l=pt.call(a,l,!0)),l}let h=jt?n.outerHTML:n.innerHTML;return jt&&vt["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&S(Q,n.ownerDocument.doctype.name)&&(h="\n"+h),Nt&&p([gt,mt,yt],t=>{h=k(h,t," ")}),st&&zt?st.createHTML(h):h},r.setConfig=function(){me(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),It=!0},r.clearConfig=function(){pe=null,It=!1},r.isValidAttribute=function(t,e,r){pe||me({});const n=de(t),i=de(e);return Ae(n,i,r)},r.addHook=function(t,e){"function"==typeof e&&m(ft[t],e)},r.removeHook=function(t,e){if(void 0!==e){const r=f(ft[t],e);return-1===r?void 0:y(ft[t],r,1)[0]}return g(ft[t])},r.removeHooks=function(t){ft[t]=[]},r.removeAllHooks=function(){ft={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},r}()},99912:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(41917);const i=function(){return!1};var a="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=a&&"object"==typeof module&&module&&!module.nodeType&&module,s=o&&o.exports===a?n.A.Buffer:void 0;const l=(s?s.isBuffer:void 0)||i}}]); \ No newline at end of file diff --git a/assets/js/17896441.0bf3733d.js.LICENSE.txt b/assets/js/17896441.0bf3733d.js.LICENSE.txt new file mode 100644 index 0000000..3c2b500 --- /dev/null +++ b/assets/js/17896441.0bf3733d.js.LICENSE.txt @@ -0,0 +1 @@ +/*! @license DOMPurify 3.2.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.7/LICENSE */ diff --git a/assets/js/17896441.7ecfd138.js b/assets/js/17896441.7ecfd138.js deleted file mode 100644 index b59a929..0000000 --- a/assets/js/17896441.7ecfd138.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 17896441.7ecfd138.js.LICENSE.txt */ -(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[8401],{241:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=r(41917).A.Symbol},387:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={tocCollapsibleButton:"tocCollapsibleButton_dxRj",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_TSyC"}},1788:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(21312)),o=r(36513),s=r(30911),l=r(97481);e.default=function({editUrl:t}){return(0,i.jsxs)("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:o.ThemeClassNames.common.editThisPage,children:[(0,i.jsx)(s.IconEdit,{}),(0,i.jsx)(l.Typography,{variant:"body2",children:(0,i.jsx)(a.default,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})})]})}},1801:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(90565);const i=function(t,e){var r=e?(0,n.A)(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}},1804:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>x});r(96540);var n=r(34164),i=r(17559),a=r(60542),o=r(70331),s=r.n(o),l=r(1788),c=r.n(l),h=r(21312),u=r(36266),d=r(74848);function p({lastUpdatedAt:t}){const e=new Date(t),r=(0,u.i)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(e);return(0,d.jsx)(h.default,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,d.jsx)("b",{children:(0,d.jsx)("time",{dateTime:e.toISOString(),itemProp:"dateModified",children:r})})},children:" on {date}"})}function f({lastUpdatedBy:t}){return(0,d.jsx)(h.default,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,d.jsx)("b",{children:t})},children:" by {user}"})}function g({lastUpdatedAt:t,lastUpdatedBy:e}){return(0,d.jsxs)("span",{className:i.G.common.lastUpdated,children:[(0,d.jsx)(h.default,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,d.jsx)(p,{lastUpdatedAt:t}):"",byUser:e?(0,d.jsx)(f,{lastUpdatedBy:e}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const m={lastUpdated:"lastUpdated_JAkA"};function y({className:t,editUrl:e,lastUpdatedAt:r,lastUpdatedBy:i}){return(0,d.jsxs)("div",{className:(0,n.A)("row",t),children:[(0,d.jsx)("div",{className:"col",children:e&&(0,d.jsx)(c(),{editUrl:e})}),(0,d.jsx)("div",{className:(0,n.A)("col",m.lastUpdated),children:(r||i)&&(0,d.jsx)(g,{lastUpdatedAt:r,lastUpdatedBy:i})})]})}function x(){const{metadata:t}=(0,a.useDoc)(),{editUrl:e,lastUpdatedAt:r,lastUpdatedBy:o,tags:l}=t,c=l.length>0,h=!!(e||r||o);return c||h?(0,d.jsxs)("footer",{className:(0,n.A)(i.G.docs.docFooter,"docusaurus-mt-lg"),children:[c&&(0,d.jsx)("div",{className:(0,n.A)("row margin-top--sm",i.G.docs.docFooterTagsRow),children:(0,d.jsx)("div",{className:"col",children:(0,d.jsx)(s(),{tags:l})})}),h&&(0,d.jsx)(y,{className:(0,n.A)("margin-top--sm",i.G.docs.docFooterEditMetaRow),editUrl:e,lastUpdatedAt:r,lastUpdatedBy:o})]}):null}},2509:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={breadcrumbsContainer:"breadcrumbsContainer_RLvU"}},3219:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(72453),i=r(74886);const a=t=>{const{r:e,g:r,b:a}=i.A.parse(t),o=.2126*n.A.channel.toLinear(e)+.7152*n.A.channel.toLinear(r)+.0722*n.A.channel.toLinear(a);return n.A.lang.round(o)},o=t=>a(t)>=.5,s=t=>!o(t)},3767:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(24326),i=r(6832);const a=function(t){return(0,n.A)(function(e,r){var n=-1,a=r.length,o=a>1?r[a-1]:void 0,s=a>2?r[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&(0,i.A)(r[0],r[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++n{"use strict";r.d(e,{A:()=>n});const n=function(t){return function(e,r,n){for(var i=-1,a=Object(e),o=n(e),s=o.length;s--;){var l=o[t?s:++i];if(!1===r(a[l],l,a))break}return e}}()},5254:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},6832:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(66984),i=r(38446),a=r(25353),o=r(23149);const s=function(t,e,r){if(!(0,o.A)(r))return!1;var s=typeof e;return!!("number"==s?(0,i.A)(r)&&(0,a.A)(e,r.length):"string"==s&&e in r)&&(0,n.A)(r[e],t)}},6911:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={collapse:"collapse_LWBd"}},8232:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(72453),i=r(74886);const a=(t,e)=>{const r=i.A.parse(t);for(const i in e)r[i]=n.A.channel.clamp[i](e[i]);return i.A.stringify(r)}},8872:(t,e,r)=>{"use strict";r.d(e,{n:()=>n});var n={name:"mermaid",version:"11.9.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.5",katex:"^0.16.22",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^16.0.0",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",canvas:"^3.1.0",chokidar:"3.6.0",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.1.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}},9779:(t,e,r)=>{"use strict";r.d(e,{A:()=>_});var n=r(18744),i=r(41917);const a=(0,n.A)(i.A,"DataView");var o=r(68335);const s=(0,n.A)(i.A,"Promise");var l=r(39857);const c=(0,n.A)(i.A,"WeakMap");var h=r(88496),u=r(81121),d="[object Map]",p="[object Promise]",f="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.A)(a),x=(0,u.A)(o.A),b=(0,u.A)(s),C=(0,u.A)(l.A),k=(0,u.A)(c),w=h.A;(a&&w(new a(new ArrayBuffer(1)))!=m||o.A&&w(new o.A)!=d||s&&w(s.resolve())!=p||l.A&&w(new l.A)!=f||c&&w(new c)!=g)&&(w=function(t){var e=(0,h.A)(t),r="[object Object]"==e?t.constructor:void 0,n=r?(0,u.A)(r):"";if(n)switch(n){case y:return m;case x:return d;case b:return p;case C:return f;case k:return g}return e});const _=w},11580:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!("get"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return i(e,t),e},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const s=r(74848),l=a(r(96540)),c=o(r(6911)),h=r(97481);e.default=function(t){const e=l.default.Children.toArray(t.children),[r,n]=(0,l.useState)(!0),i=e.find(t=>l.default.isValidElement(t)&&"summary"===t.props?.mdxType),a=(0,s.jsx)(s.Fragment,{children:e.filter(t=>t!==i)});return(0,s.jsx)(h.Collapse,{...t,open:r,onChange:t=>n(t),label:i,className:c.default.collapse,children:a})}},11754:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(80127);const i=function(){this.__data__=new n.A,this.size=0};const a=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r};const o=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=r(68335),c=r(29471);const h=function(t,e){var r=this.__data__;if(r instanceof n.A){var i=r.__data__;if(!l.A||i.length<199)return i.push([t,e]),this.size=++r.size,this;r=this.__data__=new c.A(i)}return r.set(t,e),this.size=r.size,this};function u(t){var e=this.__data__=new n.A(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=s,u.prototype.set=h;const d=u},15647:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=(0,r(40367).A)(Object.getPrototypeOf,Object)},16750:(t,e,r)=>{"use strict";e.J=void 0;var n=r(69119);function i(t){return t.replace(n.ctrlCharactersRegex,"").replace(n.htmlEntitiesRegex,function(t,e){return String.fromCharCode(e)})}function a(t){try{return decodeURIComponent(t)}catch(e){return t}}e.J=function(t){if(!t)return n.BLANK_URL;var e,r=a(t.trim());do{e=(r=a(r=i(r).replace(n.htmlCtrlEntityRegex,"").replace(n.ctrlCharactersRegex,"").replace(n.whitespaceEscapeCharsRegex,"").trim())).match(n.ctrlCharactersRegex)||r.match(n.htmlEntitiesRegex)||r.match(n.htmlCtrlEntityRegex)||r.match(n.whitespaceEscapeCharsRegex)}while(e&&e.length>0);var o=r;if(!o)return n.BLANK_URL;if(function(t){return n.relativeFirstCharacters.indexOf(t[0])>-1}(o))return o;var s=o.trimStart(),l=s.match(n.urlSchemeRegex);if(!l)return o;var c=l[0].toLowerCase().trim();if(n.invalidProtocolRegex.test(c))return n.BLANK_URL;var h=s.replace(/\\/g,"/");if("mailto:"===c||c.includes("://"))return h;if("http:"===c||"https:"===c){if(!function(t){return URL.canParse(t)}(h))return n.BLANK_URL;var u=new URL(h);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return h}},17562:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n={codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm"}},18598:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(23149),i=Object.create;const a=function(){function t(){}return function(e){if(!(0,n.A)(e))return{};if(i)return i(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();var o=r(15647),s=r(97271);const l=function(t){return"function"!=typeof t.constructor||(0,s.A)(t)?{}:a((0,o.A)(t))}},18744:(t,e,r)=>{"use strict";r.d(e,{A:()=>x});var n=r(89610);const i=r(41917).A["__core-js_shared__"];var a,o=(a=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";const s=function(t){return!!o&&o in t};var l=r(23149),c=r(81121),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,p=u.toString,f=d.hasOwnProperty,g=RegExp("^"+p.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.A)(t)||s(t))&&((0,n.A)(t)?g:h).test((0,c.A)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var r=y(t,e);return m(r)?r:void 0}},19114:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>u});var n=r(96540),i=r(6342),a=r(37243),o=r(20366),s=r(28774),l=r(74848);function c({toc:t,className:e,linkClassName:r,isChild:n}){return t.length?(0,l.jsx)("ul",{className:n?void 0:e,children:t.map(t=>(0,l.jsxs)("li",{children:[(0,l.jsx)(s.default,{to:`#${t.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,l.jsx)(c,{isChild:!0,toc:t.children,className:e,linkClassName:r})]},t.id))}):null}const h=n.memo(c);function u({toc:t,className:e="table-of-contents table-of-contents__left-border",linkClassName:r="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:c,maxHeadingLevel:u,...d}){const p=(0,i.p)(),f=c??p.tableOfContents.minHeadingLevel,g=u??p.tableOfContents.maxHeadingLevel,m=(0,a.h)({toc:t,minHeadingLevel:f,maxHeadingLevel:g}),y=(0,n.useMemo)(()=>{if(r&&s)return{linkClassName:r,linkActiveClassName:s,minHeadingLevel:f,maxHeadingLevel:g}},[r,s,f,g]);return(0,o.i)(y),(0,l.jsx)(h,{toc:m,className:e,linkClassName:r,...d})}},20385:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(97481),o=n(r(21312)),s=n(r(34559)),l=n(r(387));e.default=function({collapsed:t,...e}){return(0,i.jsxs)("button",{type:"button",...e,className:(0,s.default)("clean-btn",l.default.tocCollapsibleButton,!t&&l.default.tocCollapsibleButtonExpanded,e.className),children:[(0,i.jsx)("div",{}),(0,i.jsx)(a.Typography,{variant:"body2",children:(0,i.jsx)(o.default,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})}),t?(0,i.jsx)(a.ChevronDownIcon,{}):(0,i.jsx)(a.ChevronUpIcon,{})]})}},20821:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>h});r(96540);var n=r(60542),i=r(34164),a=r(21312),o=r(30795),s=r.n(o),l=r(74848);function c(t){const{className:e,previous:r,next:n}=t;return(0,l.jsxs)("nav",{className:(0,i.A)(e,"pagination-nav"),"aria-label":(0,a.translate)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[r&&(0,l.jsx)(s(),{...r,subLabel:(0,l.jsx)(a.default,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,l.jsx)(s(),{...n,subLabel:(0,l.jsx)(a.default,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function h(){const{metadata:t}=(0,n.useDoc)();return(0,l.jsx)(c,{className:"docusaurus-mt-lg",previous:t.previous,next:t.next})}},21893:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={codeBlockContainer:"codeBlockContainer_EB2s"}},22031:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(52851),i=r(52528);const a=function(t,e,r,a){var o=!r;r||(r={});for(var s=-1,l=e.length;++s{"use strict";r.d(e,{A:()=>n});const n=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},24326:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(29008),i=r(76875),a=r(67525);const o=function(t,e){return(0,a.A)((0,i.A)(t,e,n.A),t+"")}},24859:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(29646));e.default=function(t){return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(a.default,{...t})})}},25347:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={tocCollapsible:"tocCollapsible_ROek",tocCollapsibleContent:"tocCollapsibleContent_Qsjj",tocCollapsibleExpanded:"tocCollapsibleExpanded_zTjk"}},25353:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=/^(?:0|[1-9]\d*)$/;const i=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t{"use strict";r.d(e,{A:()=>s});var n=r(72453),i=r(93539),a=r(74886),o=r(8232);const s=(t,e,r=0,s=1)=>{if("number"!=typeof t)return(0,o.A)(t,{a:e});const l=i.A.set({r:n.A.channel.clamp.r(t),g:n.A.channel.clamp.g(e),b:n.A.channel.clamp.b(r),a:n.A.channel.clamp.a(s)});return a.A.stringify(l)}},26849:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=r(36513),s=n(r(19114)),l=n(r(20385)),c=n(r(25347));e.default=function({toc:t,className:e,minHeadingLevel:r,maxHeadingLevel:n}){const{collapsed:h,toggleCollapsed:u}=(0,o.useCollapsible)({initialState:!0});return(0,i.jsxs)("div",{className:(0,a.default)(c.default.tocCollapsible,!h&&c.default.tocCollapsibleExpanded,e),children:[(0,i.jsx)(l.default,{collapsed:h,onClick:u}),(0,i.jsx)(o.Collapsible,{lazy:!0,className:c.default.tocCollapsibleContent,collapsed:h,children:(0,i.jsx)(s.default,{toc:t,minHeadingLevel:r,maxHeadingLevel:n})})]})}},28453:(t,e,r)=>{"use strict";r.d(e,{R:()=>o,x:()=>s});var n=r(96540);const i={},a=n.createContext(i);function o(t){const e=n.useContext(a);return n.useMemo(function(){return"function"==typeof t?t(e):{...e,...t}},[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:o(t.components),n.createElement(a.Provider,{value:e},t.children)}},28823:(t,e,r)=>{"use strict";r.d(e,{O:()=>n});var n=(0,r(41750).K2)(({flowchart:t})=>{const e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:e+r}},"getSubGraphTitleMargins")},29008:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return t}},29026:(t,e,r)=>{"use strict";r.d(e,{H:()=>rr,r:()=>er});var n=r(41750);function i(t){return null==t}function a(t){return"object"==typeof t&&null!==t}function o(t){return Array.isArray(t)?t:i(t)?[]:[t]}function s(t,e){var r,n,i,a;if(e)for(r=0,n=(a=Object.keys(e)).length;rs&&(e=n-s+(a=" ... ").length),r-n>s&&(r=n+s-(o=" ...").length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+o,pos:n-e+a.length}}function g(t,e){return h.repeat(" ",e-t.length)+t}function m(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var r,n=/\r?\n|\r|\0/g,i=[0],a=[],o=-1;r=n.exec(t.buffer);)a.push(r.index),i.push(r.index+r[0].length),t.position<=r.index&&o<0&&(o=i.length-2);o<0&&(o=i.length-1);var s,l,c="",u=Math.min(t.line+e.linesAfter,a.length).toString().length,d=e.maxLength-(e.indent+u+3);for(s=1;s<=e.linesBefore&&!(o-s<0);s++)l=f(t.buffer,i[o-s],a[o-s],t.position-(i[o]-i[o-s]),d),c=h.repeat(" ",e.indent)+g((t.line-s+1).toString(),u)+" | "+l.str+"\n"+c;for(l=f(t.buffer,i[o],a[o],t.position,d),c+=h.repeat(" ",e.indent)+g((t.line+1).toString(),u)+" | "+l.str+"\n",c+=h.repeat("-",e.indent+u+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(o+s>=a.length);s++)l=f(t.buffer,i[o+s],a[o+s],t.position-(i[o]-i[o+s]),d),c+=h.repeat(" ",e.indent)+g((t.line+s+1).toString(),u)+" | "+l.str+"\n";return c.replace(/\n$/,"")}(0,n.K2)(f,"getLine"),(0,n.K2)(g,"padStart"),(0,n.K2)(m,"makeSnippet");var y=m,x=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],b=["scalar","sequence","mapping"];function C(t){var e={};return null!==t&&Object.keys(t).forEach(function(r){t[r].forEach(function(t){e[String(t)]=r})}),e}function k(t,e){if(e=e||{},Object.keys(e).forEach(function(e){if(-1===x.indexOf(e))throw new p('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=C(e.styleAliases||null),-1===b.indexOf(this.kind))throw new p('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}(0,n.K2)(C,"compileStyleAliases"),(0,n.K2)(k,"Type$1");var w=k;function _(t,e){var r=[];return t[e].forEach(function(t){var e=r.length;r.forEach(function(r,n){r.tag===t.tag&&r.kind===t.kind&&r.multi===t.multi&&(e=n)}),r[e]=t}),r}function v(){var t,e,r={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(t){t.multi?(r.multi[t.kind].push(t),r.multi.fallback.push(t)):r[t.kind][t.tag]=r.fallback[t.tag]=t}for((0,n.K2)(i,"collectType"),t=0,e=arguments.length;t=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:(0,n.K2)(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:(0,n.K2)(function(t){return t.toString(10)},"decimal"),hexadecimal:(0,n.K2)(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),K=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function q(t){return null!==t&&!(!K.test(t)||"_"===t[t.length-1])}function W(t){var e,r;return r="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:r*parseFloat(e,10)}(0,n.K2)(q,"resolveYamlFloat"),(0,n.K2)(W,"constructYamlFloat");var H=/^[-+]?[0-9]+e/;function U(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(h.isNegativeZero(t))return"-0.0";return r=t.toString(10),H.test(r)?r.replace("e",".e"):r}function G(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||h.isNegativeZero(t))}(0,n.K2)(U,"representYamlFloat"),(0,n.K2)(G,"isFloat");var Y=new w("tag:yaml.org,2002:float",{kind:"scalar",resolve:q,construct:W,predicate:G,represent:U,defaultStyle:"lowercase"}),X=T.extend({implicit:[L,D,z,Y]}),V=X,Z=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Q=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function J(t){return null!==t&&(null!==Z.exec(t)||null!==Q.exec(t))}function tt(t){var e,r,n,i,a,o,s,l,c=0,h=null;if(null===(e=Z.exec(t))&&(e=Q.exec(t)),null===e)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],o=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(r,n,i,a,o,s,c)),h&&l.setTime(l.getTime()-h),l}function et(t){return t.toISOString()}(0,n.K2)(J,"resolveYamlTimestamp"),(0,n.K2)(tt,"constructYamlTimestamp"),(0,n.K2)(et,"representYamlTimestamp");var rt=new w("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:J,construct:tt,instanceOf:Date,represent:et});function nt(t){return"<<"===t||null===t}(0,n.K2)(nt,"resolveYamlMerge");var it=new w("tag:yaml.org,2002:merge",{kind:"scalar",resolve:nt}),at="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";function ot(t){if(null===t)return!1;var e,r,n=0,i=t.length,a=at;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8==0}function st(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=at,o=0,s=[];for(e=0;e>16&255),s.push(o>>8&255),s.push(255&o)),o=o<<6|a.indexOf(n.charAt(e));return 0===(r=i%4*6)?(s.push(o>>16&255),s.push(o>>8&255),s.push(255&o)):18===r?(s.push(o>>10&255),s.push(o>>2&255)):12===r&&s.push(o>>4&255),new Uint8Array(s)}function lt(t){var e,r,n="",i=0,a=t.length,o=at;for(e=0;e>18&63],n+=o[i>>12&63],n+=o[i>>6&63],n+=o[63&i]),i=(i<<8)+t[e];return 0===(r=a%3)?(n+=o[i>>18&63],n+=o[i>>12&63],n+=o[i>>6&63],n+=o[63&i]):2===r?(n+=o[i>>10&63],n+=o[i>>4&63],n+=o[i<<2&63],n+=o[64]):1===r&&(n+=o[i>>2&63],n+=o[i<<4&63],n+=o[64],n+=o[64]),n}function ct(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)}(0,n.K2)(ot,"resolveYamlBinary"),(0,n.K2)(st,"constructYamlBinary"),(0,n.K2)(lt,"representYamlBinary"),(0,n.K2)(ct,"isBinary");var ht=new w("tag:yaml.org,2002:binary",{kind:"scalar",resolve:ot,construct:st,predicate:ct,represent:lt}),ut=Object.prototype.hasOwnProperty,dt=Object.prototype.toString;function pt(t){if(null===t)return!0;var e,r,n,i,a,o=[],s=t;for(e=0,r=s.length;e>10),56320+(t-65536&1023))}(0,n.K2)(Ft,"_class"),(0,n.K2)($t,"is_EOL"),(0,n.K2)(Et,"is_WHITE_SPACE"),(0,n.K2)(Dt,"is_WS_OR_EOL"),(0,n.K2)(Ot,"is_FLOW_INDICATOR"),(0,n.K2)(Nt,"fromHexCode"),(0,n.K2)(jt,"escapedHexLen"),(0,n.K2)(It,"fromDecimalCode"),(0,n.K2)(Rt,"simpleEscapeSequence"),(0,n.K2)(Pt,"charFromCodepoint");var zt,Kt=new Array(256),qt=new Array(256);for(zt=0;zt<256;zt++)Kt[zt]=Rt(zt)?1:0,qt[zt]=Rt(zt);function Wt(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||vt,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Ht(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=y(r),new p(e,r)}function Ut(t,e){throw Ht(t,e)}function Gt(t,e){t.onWarning&&t.onWarning.call(null,Ht(t,e))}(0,n.K2)(Wt,"State$1"),(0,n.K2)(Ht,"generateError"),(0,n.K2)(Ut,"throwError"),(0,n.K2)(Gt,"throwWarning");var Yt={YAML:(0,n.K2)(function(t,e,r){var n,i,a;null!==t.version&&Ut(t,"duplication of %YAML directive"),1!==r.length&&Ut(t,"YAML directive accepts exactly one argument"),null===(n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]))&&Ut(t,"ill-formed argument of the YAML directive"),i=parseInt(n[1],10),a=parseInt(n[2],10),1!==i&&Ut(t,"unacceptable YAML version of the document"),t.version=r[0],t.checkLineBreaks=a<2,1!==a&&2!==a&&Gt(t,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:(0,n.K2)(function(t,e,r){var n,i;2!==r.length&&Ut(t,"TAG directive accepts exactly two arguments"),n=r[0],i=r[1],Bt.test(n)||Ut(t,"ill-formed tag handle (first argument) of the TAG directive"),St.call(t.tagMap,n)&&Ut(t,'there is a previously declared suffix for "'+n+'" tag handle'),Lt.test(i)||Ut(t,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch(a){Ut(t,"tag prefix is malformed: "+i)}t.tagMap[n]=i},"handleTagDirective")};function Xt(t,e,r,n){var i,a,o,s;if(e1&&(t.result+=h.repeat("\n",e-1))}function re(t,e,r){var n,i,a,o,s,l,c,h,u=t.kind,d=t.result;if(Dt(h=t.input.charCodeAt(t.position))||Ot(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(Dt(n=t.input.charCodeAt(t.position+1))||r&&Ot(n)))return!1;for(t.kind="scalar",t.result="",i=a=t.position,o=!1;0!==h;){if(58===h){if(Dt(n=t.input.charCodeAt(t.position+1))||r&&Ot(n))break}else if(35===h){if(Dt(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&te(t)||r&&Ot(h))break;if($t(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,Jt(t,!1,-1),t.lineIndent>=e){o=!0,h=t.input.charCodeAt(t.position);continue}t.position=a,t.line=s,t.lineStart=l,t.lineIndent=c;break}}o&&(Xt(t,i,a,!1),ee(t,t.line-s),i=a=t.position,o=!1),Et(h)||(a=t.position+1),h=t.input.charCodeAt(++t.position)}return Xt(t,i,a,!1),!!t.result||(t.kind=u,t.result=d,!1)}function ne(t,e){var r,n,i;if(39!==(r=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(r=t.input.charCodeAt(t.position));)if(39===r){if(Xt(t,n,t.position,!0),39!==(r=t.input.charCodeAt(++t.position)))return!0;n=t.position,t.position++,i=t.position}else $t(r)?(Xt(t,n,i,!0),ee(t,Jt(t,!1,e)),n=i=t.position):t.position===t.lineStart&&te(t)?Ut(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Ut(t,"unexpected end of the stream within a single quoted scalar")}function ie(t,e){var r,n,i,a,o,s;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return Xt(t,r,t.position,!0),t.position++,!0;if(92===s){if(Xt(t,r,t.position,!0),$t(s=t.input.charCodeAt(++t.position)))Jt(t,!1,e);else if(s<256&&Kt[s])t.result+=qt[s],t.position++;else if((o=jt(s))>0){for(i=o,a=0;i>0;i--)(o=Nt(s=t.input.charCodeAt(++t.position)))>=0?a=(a<<4)+o:Ut(t,"expected hexadecimal character");t.result+=Pt(a),t.position++}else Ut(t,"unknown escape sequence");r=n=t.position}else $t(s)?(Xt(t,r,n,!0),ee(t,Jt(t,!1,e)),r=n=t.position):t.position===t.lineStart&&te(t)?Ut(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Ut(t,"unexpected end of the stream within a double quoted scalar")}function ae(t,e){var r,n,i,a,o,s,l,c,h,u,d,p,f=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))o=93,c=!1,a=[];else{if(123!==p)return!1;o=125,c=!0,a={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),p=t.input.charCodeAt(++t.position);0!==p;){if(Jt(t,!0,e),(p=t.input.charCodeAt(t.position))===o)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=a,!0;f?44===p&&Ut(t,"expected the node content, but found ','"):Ut(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===p&&Dt(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,Jt(t,!0,e)),r=t.line,n=t.lineStart,i=t.position,de(t,e,1,!1,!0),u=t.tag,h=t.result,Jt(t,!0,e),p=t.input.charCodeAt(t.position),!l&&t.line!==r||58!==p||(s=!0,p=t.input.charCodeAt(++t.position),Jt(t,!0,e),de(t,e,1,!1,!0),d=t.result),c?Zt(t,a,y,u,h,d,r,n,i):s?a.push(Zt(t,null,y,u,h,d,r,n,i)):a.push(h),Jt(t,!0,e),44===(p=t.input.charCodeAt(t.position))?(f=!0,p=t.input.charCodeAt(++t.position)):f=!1}Ut(t,"unexpected end of the stream within a flow collection")}function oe(t,e){var r,n,i,a,o=1,s=!1,l=!1,c=e,u=0,d=!1;if(124===(a=t.input.charCodeAt(t.position)))n=!1;else{if(62!==a)return!1;n=!0}for(t.kind="scalar",t.result="";0!==a;)if(43===(a=t.input.charCodeAt(++t.position))||45===a)1===o?o=43===a?3:2:Ut(t,"repeat of a chomping mode identifier");else{if(!((i=It(a))>=0))break;0===i?Ut(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?Ut(t,"repeat of an indentation width identifier"):(c=e+i-1,l=!0)}if(Et(a)){do{a=t.input.charCodeAt(++t.position)}while(Et(a));if(35===a)do{a=t.input.charCodeAt(++t.position)}while(!$t(a)&&0!==a)}for(;0!==a;){for(Qt(t),t.lineIndent=0,a=t.input.charCodeAt(t.position);(!l||t.lineIndentc&&(c=t.lineIndent),$t(a))u++;else{if(t.lineIndente)&&0!==n)Ut(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(y&&(o=t.line,s=t.lineStart,l=t.position),de(t,e,4,!0,i)&&(y?g=t.result:m=t.result),y||(Zt(t,d,p,f,g,m,o,s,l),f=g=m=null),Jt(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&0!==c)Ut(t,"bad indentation of a mapping entry");else if(t.lineIndente?f=1:t.lineIndent===e?f=0:t.lineIndente?f=1:t.lineIndent===e?f=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l"),null!==t.result&&u.kind!==t.kind&&Ut(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):Ut(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function pe(t){var e,r,n,i,a=t.position,o=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(i=t.input.charCodeAt(t.position))&&(Jt(t,!0,-1),i=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==i));){for(o=!0,i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!Dt(i);)i=t.input.charCodeAt(++t.position);for(n=[],(r=t.input.slice(e,t.position)).length<1&&Ut(t,"directive name must not be less than one character in length");0!==i;){for(;Et(i);)i=t.input.charCodeAt(++t.position);if(35===i){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&!$t(i));break}if($t(i))break;for(e=t.position;0!==i&&!Dt(i);)i=t.input.charCodeAt(++t.position);n.push(t.input.slice(e,t.position))}0!==i&&Qt(t),St.call(Yt,r)?Yt[r](t,r,n):Gt(t,'unknown document directive "'+r+'"')}Jt(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,Jt(t,!0,-1)):o&&Ut(t,"directives end mark is expected"),de(t,t.lineIndent-1,4,!1,!0),Jt(t,!0,-1),t.checkLineBreaks&&At.test(t.input.slice(a,t.position))&&Gt(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&te(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,Jt(t,!0,-1)):t.position=55296&&n<=56319&&e+1=56320&&r<=57343?1024*(n-55296)+r-56320+65536:n}function je(t){return/^\n* /.test(t)}(0,n.K2)(Te,"State"),(0,n.K2)(Ae,"indentString"),(0,n.K2)(Me,"generateNextLine"),(0,n.K2)(Be,"testImplicitResolving"),(0,n.K2)(Le,"isWhitespace"),(0,n.K2)(Fe,"isPrintable"),(0,n.K2)($e,"isNsCharOrWhitespace"),(0,n.K2)(Ee,"isPlainSafe"),(0,n.K2)(De,"isPlainSafeFirst"),(0,n.K2)(Oe,"isPlainSafeLast"),(0,n.K2)(Ne,"codePointAt"),(0,n.K2)(je,"needIndentIndicator");function Ie(t,e,r,n,i,a,o,s){var l,c=0,h=null,u=!1,d=!1,p=-1!==n,f=-1,g=De(Ne(t,0))&&Oe(Ne(t,t.length-1));if(e||o)for(l=0;l=65536?l+=2:l++){if(!Fe(c=Ne(t,l)))return 5;g=g&&Ee(c,h,s),h=c}else{for(l=0;l=65536?l+=2:l++){if(10===(c=Ne(t,l)))u=!0,p&&(d=d||l-f-1>n&&" "!==t[f+1],f=l);else if(!Fe(c))return 5;g=g&&Ee(c,h,s),h=c}d=d||p&&l-f-1>n&&" "!==t[f+1]}return u||d?r>9&&je(t)?5:o?2===a?5:2:d?4:3:!g||o||i(t)?2===a?5:2:1}function Re(t,e,r,i,a){t.dump=function(){if(0===e.length)return 2===t.quotingType?'""':"''";if(!t.noCompatMode&&(-1!==we.indexOf(e)||_e.test(e)))return 2===t.quotingType?'"'+e+'"':"'"+e+"'";var o=t.indent*Math.max(1,r),s=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o),l=i||t.flowLevel>-1&&r>=t.flowLevel;function c(e){return Be(t,e)}switch((0,n.K2)(c,"testAmbiguity"),Ie(e,l,t.indent,s,c,t.quotingType,t.forceQuotes&&!i,a)){case 1:return e;case 2:return"'"+e.replace(/'/g,"''")+"'";case 3:return"|"+Pe(e,t.indent)+ze(Ae(e,o));case 4:return">"+Pe(e,t.indent)+ze(Ae(Ke(e,s),o));case 5:return'"'+We(e)+'"';default:throw new p("impossible error: invalid scalar style")}}()}function Pe(t,e){var r=je(t)?String(e):"",n="\n"===t[t.length-1];return r+(n&&("\n"===t[t.length-2]||"\n"===t)?"+":n?"":"-")+"\n"}function ze(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function Ke(t,e){for(var r,n,i,a=/(\n+)([^\n]*)/g,o=(r=-1!==(r=t.indexOf("\n"))?r:t.length,a.lastIndex=r,qe(t.slice(0,r),e)),s="\n"===t[0]||" "===t[0];i=a.exec(t);){var l=i[1],c=i[2];n=" "===c[0],o+=l+(s||n||""===c?"":"\n")+qe(c,e),s=n}return o}function qe(t,e){if(""===t||" "===t[0])return t;for(var r,n,i=/ [^ ]/g,a=0,o=0,s=0,l="";r=i.exec(t);)(s=r.index)-a>e&&(n=o>a?o:s,l+="\n"+t.slice(a,n),a=n+1),o=s;return l+="\n",t.length-a>e&&o>a?l+=t.slice(a,o)+"\n"+t.slice(o+1):l+=t.slice(a),l.slice(1)}function We(t){for(var e,r="",n=0,i=0;i=65536?i+=2:i++)n=Ne(t,i),!(e=ke[n])&&Fe(n)?(r+=t[i],n>=65536&&(r+=t[i+1])):r+=e||Se(n);return r}function He(t,e,r){var n,i,a,o="",s=t.tag;for(n=0,i=r.length;n1024&&(s+="? "),s+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Ve(t,e,o,!1,!1)&&(l+=s+=t.dump));t.tag=c,t.dump="{"+l+"}"}function Ye(t,e,r,n){var i,a,o,s,l,c,h="",u=t.tag,d=Object.keys(r);if(!0===t.sortKeys)d.sort();else if("function"==typeof t.sortKeys)d.sort(t.sortKeys);else if(t.sortKeys)throw new p("sortKeys must be a boolean or a function");for(i=0,a=d.length;i1024)&&(t.dump&&10===t.dump.charCodeAt(0)?c+="?":c+="? "),c+=t.dump,l&&(c+=Me(t,e)),Ve(t,e+1,s,!0,l)&&(t.dump&&10===t.dump.charCodeAt(0)?c+=":":c+=": ",h+=c+=t.dump));t.tag=u,t.dump=h||"{}"}function Xe(t,e,r){var n,i,a,o,s,l;for(a=0,o=(i=r?t.explicitTypes:t.implicitTypes).length;a tag resolver accepts not "'+l+'" style');n=s.represent[l](e,l)}t.dump=n}return!0}return!1}function Ve(t,e,r,n,i,a,o){t.tag=null,t.dump=r,Xe(t,r,!1)||Xe(t,r,!0);var s,l=xe.call(t.dump),c=n;n&&(n=t.flowLevel<0||t.flowLevel>e);var h,u,d="[object Object]"===l||"[object Array]"===l;if(d&&(u=-1!==(h=t.duplicates.indexOf(r))),(null!==t.tag&&"?"!==t.tag||u||2!==t.indent&&e>0)&&(i=!1),u&&t.usedDuplicates[h])t.dump="*ref_"+h;else{if(d&&u&&!t.usedDuplicates[h]&&(t.usedDuplicates[h]=!0),"[object Object]"===l)n&&0!==Object.keys(t.dump).length?(Ye(t,e,t.dump,i),u&&(t.dump="&ref_"+h+t.dump)):(Ge(t,e,t.dump),u&&(t.dump="&ref_"+h+" "+t.dump));else if("[object Array]"===l)n&&0!==t.dump.length?(t.noArrayIndent&&!o&&e>0?Ue(t,e-1,t.dump,i):Ue(t,e,t.dump,i),u&&(t.dump="&ref_"+h+t.dump)):(He(t,e,t.dump),u&&(t.dump="&ref_"+h+" "+t.dump));else{if("[object String]"!==l){if("[object Undefined]"===l)return!1;if(t.skipInvalid)return!1;throw new p("unacceptable kind of an object to dump "+l)}"?"!==t.tag&&Re(t,t.dump,e,a,c)}null!==t.tag&&"?"!==t.tag&&(s=encodeURI("!"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,"%21"),s="!"===t.tag[0]?"!"+s:"tag:yaml.org,2002:"===s.slice(0,18)?"!!"+s.slice(18):"!<"+s+">",t.dump=s+" "+t.dump)}return!0}function Ze(t,e){var r,n,i=[],a=[];for(Qe(t,i,a),r=0,n=a.length;r{"use strict";r.d(e,{A:()=>_});const n=(0,r(18744).A)(Object,"create");const i=function(){this.__data__=n?n(null):{},this.size=0};const a=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var o=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(n){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return o.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return n?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{"use strict";r.r(e),r.d(e,{default:()=>T});var n=r(96540),i=r(28453),a=r(5260),o=r(24859),s=r.n(o),l=r(74848);function c(t){return(0,l.jsx)("code",{...t})}var h=r(28774);var u=r(11580),d=r.n(u),p=r(99208),f=r.n(p),g=r(34164);const m="containsTaskList_mC6p";function y(t){if(void 0!==t)return(0,g.A)(t,t?.includes("contains-task-list")&&m)}var x=r(63427);var b=r(4186),C=r.n(b),k=r(88857),w=r.n(k),_=r(36930),v=r.n(_);const S={Head:a.A,details:d(),Details:d(),code:function(t){return function(t){return void 0!==t.children&&n.Children.toArray(t.children).every(t=>"string"==typeof t&&!t.includes("\n"))}(t)?(0,l.jsx)(c,{...t}):(0,l.jsx)(s(),{...t})},a:function(t){return(0,l.jsx)(h.default,{...t})},pre:function(t){return(0,l.jsx)(l.Fragment,{children:t.children})},ul:function(t){return(0,l.jsx)("ul",{...t,className:y(t.className)})},li:function(t){return(0,x.A)().collectAnchor(t.id),(0,l.jsx)("li",{...t})},img:C(),h1:t=>(0,l.jsx)(f(),{as:"h1",...t}),h2:t=>(0,l.jsx)(f(),{as:"h2",...t}),h3:t=>(0,l.jsx)(f(),{as:"h3",...t}),h4:t=>(0,l.jsx)(f(),{as:"h4",...t}),h5:t=>(0,l.jsx)(f(),{as:"h5",...t}),h6:t=>(0,l.jsx)(f(),{as:"h6",...t}),admonition:w(),mermaid:v()};function T({children:t}){return(0,l.jsx)(i.x,{components:S,children:t})}},29646:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>p});var n=r(96540),i=r(92303),a=r(34164),o=r(51715),s=r.n(o),l=r(17562),c=r(74848);function h({children:t,className:e}){return(0,c.jsx)(s(),{as:"pre",tabIndex:0,className:(0,a.A)(l.A.codeBlockStandalone,"thin-scrollbar",e),children:(0,c.jsx)("code",{className:l.A.codeBlockLines,children:t})})}var u=r(88308),d=r.n(u);function p({children:t,...e}){const r=(0,i.default)(),a=function(t){return n.Children.toArray(t).some(t=>(0,n.isValidElement)(t))?t:Array.isArray(t)?t.join(""):t}(t),o="string"==typeof a?d():h;return(0,c.jsx)(o,{...e,children:a},String(r))}},29893:(t,e,r)=>{"use strict";function n(t,e,r){if(t&&t.length){const[n,i]=e,a=Math.PI/180*r,o=Math.cos(a),s=Math.sin(a);for(const e of t){const[t,r]=e;e[0]=(t-n)*o-(r-i)*s+n,e[1]=(t-n)*s+(r-i)*o+i}}}function i(t,e){return t[0]===e[0]&&t[1]===e[1]}function a(t,e,r,a=1){const o=r,s=Math.max(e,.1),l=t[0]&&t[0][0]&&"number"==typeof t[0][0]?[t]:t,c=[0,0];if(o)for(const i of l)n(i,c,o);const h=function(t,e,r){const n=[];for(const h of t){const t=[...h];i(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&n.push(t)}const a=[];e=Math.max(e,.1);const o=[];for(const i of n)for(let t=0;tt.ymine.ymin?1:t.xe.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax)),!o.length)return a;let s=[],l=o[0].ymin,c=0;for(;s.length||o.length;){if(o.length){let t=-1;for(let e=0;el);e++)t=e;o.splice(0,t+1).forEach(t=>{s.push({s:l,edge:t})})}if(s=s.filter(t=>!(t.edge.ymax<=l)),s.sort((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x)),(1!==r||c%e==0)&&s.length>1)for(let t=0;t=s.length)break;const r=s[t].edge,n=s[e].edge;a.push([[Math.round(r.x),l],[Math.round(n.x),l]])}l+=r,s.forEach(t=>{t.edge.x=t.edge.x+r*t.edge.islope}),c++}return a}(l,s,a);if(o){for(const t of l)n(t,c,-o);!function(t,e,r){const i=[];t.forEach(t=>i.push(...t)),n(i,e,r)}(h,c,-o)}return h}function o(t,e){var r;const n=e.hachureAngle+90;let i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let o=1;return e.roughness>=1&&((null===(r=e.randomizer)||void 0===r?void 0:r.next())||Math.random())>.7&&(o=i),a(t,i,n,o||1)}r.d(e,{A:()=>it});class s{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const r=o(t,e);return{type:"fillSketch",ops:this.renderLines(r,e)}}renderLines(t,e){const r=[];for(const n of t)r.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return r}}function l(t){const e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}class c extends s{fillPolygons(t,e){let r=e.hachureGap;r<0&&(r=4*e.strokeWidth),r=Math.max(r,.1);const n=o(t,Object.assign({},e,{hachureGap:r})),i=Math.PI/180*e.hachureAngle,a=[],s=.5*r*Math.cos(i),c=.5*r*Math.sin(i);for(const[o,h]of n)l([o,h])&&a.push([[o[0]-s,o[1]+c],[...h]],[[o[0]+s,o[1]-c],[...h]]);return{type:"fillSketch",ops:this.renderLines(a,e)}}}class h extends s{fillPolygons(t,e){const r=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),i=this._fillPolygons(t,n);return r.ops=r.ops.concat(i.ops),r}}class u{constructor(t){this.helper=t}fillPolygons(t,e){const r=o(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(r,e)}dotsOnLines(t,e){const r=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let i=e.fillWeight;i<0&&(i=e.strokeWidth/2);const a=n/4;for(const o of t){const t=l(o),s=t/n,c=Math.ceil(s)-1,h=t-c*n,u=(o[0][0]+o[1][0])/2-n/4,d=Math.min(o[0][1],o[1][1]);for(let o=0;o{const a=l(t),o=Math.floor(a/(r+n)),s=(a+n-o*(r+n))/2;let c=t[0],h=t[1];c[0]>h[0]&&(c=t[1],h=t[0]);const u=Math.atan((h[1]-c[1])/(h[0]-c[0]));for(let l=0;l{const i=l(t),a=Math.round(i/(2*e));let o=t[0],s=t[1];o[0]>s[0]&&(o=t[1],s=t[0]);const c=Math.atan((s[1]-o[1])/(s[0]-o[0]));for(let l=0;ln%2?t+r:t+e);a.push({key:"C",data:t}),e=t[4],r=t[5];break}case"Q":a.push({key:"Q",data:[...s]}),e=s[2],r=s[3];break;case"q":{const t=s.map((t,n)=>n%2?t+r:t+e);a.push({key:"Q",data:t}),e=t[2],r=t[3];break}case"A":a.push({key:"A",data:[...s]}),e=s[5],r=s[6];break;case"a":e+=s[5],r+=s[6],a.push({key:"A",data:[s[0],s[1],s[2],s[3],s[4],e,r]});break;case"H":a.push({key:"H",data:[...s]}),e=s[0];break;case"h":e+=s[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...s]}),r=s[0];break;case"v":r+=s[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...s]}),e=s[2],r=s[3];break;case"s":{const t=s.map((t,n)=>n%2?t+r:t+e);a.push({key:"S",data:t}),e=t[2],r=t[3];break}case"T":a.push({key:"T",data:[...s]}),e=s[0],r=s[1];break;case"t":e+=s[0],r+=s[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function C(t){const e=[];let r="",n=0,i=0,a=0,o=0,s=0,l=0;for(const{key:c,data:h}of t){switch(c){case"M":e.push({key:"M",data:[...h]}),[n,i]=h,[a,o]=h;break;case"C":e.push({key:"C",data:[...h]}),n=h[4],i=h[5],s=h[2],l=h[3];break;case"L":e.push({key:"L",data:[...h]}),[n,i]=h;break;case"H":n=h[0],e.push({key:"L",data:[n,i]});break;case"V":i=h[0],e.push({key:"L",data:[n,i]});break;case"S":{let t=0,a=0;"C"===r||"S"===r?(t=n+(n-s),a=i+(i-l)):(t=n,a=i),e.push({key:"C",data:[t,a,...h]}),s=h[0],l=h[1],n=h[2],i=h[3];break}case"T":{const[t,a]=h;let o=0,c=0;"Q"===r||"T"===r?(o=n+(n-s),c=i+(i-l)):(o=n,c=i);const u=n+2*(o-n)/3,d=i+2*(c-i)/3,p=t+2*(o-t)/3,f=a+2*(c-a)/3;e.push({key:"C",data:[u,d,p,f,t,a]}),s=o,l=c,n=t,i=a;break}case"Q":{const[t,r,a,o]=h,c=n+2*(t-n)/3,u=i+2*(r-i)/3,d=a+2*(t-a)/3,p=o+2*(r-o)/3;e.push({key:"C",data:[c,u,d,p,a,o]}),s=t,l=r,n=a,i=o;break}case"A":{const t=Math.abs(h[0]),r=Math.abs(h[1]),a=h[2],o=h[3],s=h[4],l=h[5],c=h[6];0===t||0===r?(e.push({key:"C",data:[n,i,l,c,l,c]}),n=l,i=c):n===l&&i===c||(w(n,i,l,c,t,r,a,o,s).forEach(function(t){e.push({key:"C",data:t})}),n=l,i=c);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=o}r=c}return e}function k(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function w(t,e,r,n,i,a,o,s,l,c){const h=(u=o,Math.PI*u/180);var u;let d=[],p=0,f=0,g=0,m=0;if(c)[p,f,g,m]=c;else{[t,e]=k(t,e,-h),[r,n]=k(r,n,-h);const o=(t-r)/2,c=(e-n)/2;let u=o*o/(i*i)+c*c/(a*a);u>1&&(u=Math.sqrt(u),i*=u,a*=u);const d=i*i,y=a*a,x=d*y-d*c*c-y*o*o,b=d*c*c+y*o*o,C=(s===l?-1:1)*Math.sqrt(Math.abs(x/b));g=C*i*c/a+(t+r)/2,m=C*-a*o/i+(e+n)/2,p=Math.asin(parseFloat(((e-m)/a).toFixed(9))),f=Math.asin(parseFloat(((n-m)/a).toFixed(9))),tf&&(p-=2*Math.PI),!l&&f>p&&(f-=2*Math.PI)}let y=f-p;if(Math.abs(y)>120*Math.PI/180){const t=f,e=r,s=n;f=l&&f>p?p+120*Math.PI/180*1:p+120*Math.PI/180*-1,d=w(r=g+i*Math.cos(f),n=m+a*Math.sin(f),e,s,i,a,o,0,l,[f,t,g,m])}y=f-p;const x=Math.cos(p),b=Math.sin(p),C=Math.cos(f),_=Math.sin(f),v=Math.tan(y/4),S=4/3*i*v,T=4/3*a*v,A=[t,e],M=[t+S*b,e-T*x],B=[r+S*_,n-T*C],L=[r,n];if(M[0]=2*A[0]-M[0],M[1]=2*A[1]-M[1],c)return[M,B,L].concat(d);{d=[M,B,L].concat(d);const t=[];for(let e=0;e2){const i=[];for(let e=0;e2*Math.PI&&(p=0,f=2*Math.PI);const g=2*Math.PI/l.curveStepCount,m=Math.min(g/2,(f-p)/2),y=K(m,c,h,u,d,p,f,1,l);if(!l.disableMultiStroke){const t=K(m,c,h,u,d,p,f,1.5,l);y.push(...t)}return o&&(s?y.push(...j(c,h,c+u*Math.cos(p),h+d*Math.sin(p),l),...j(c,h,c+u*Math.cos(f),h+d*Math.sin(f),l)):y.push({op:"lineTo",data:[c,h]},{op:"lineTo",data:[c+u*Math.cos(p),h+d*Math.sin(p)]})),{type:"path",ops:y}}function L(t,e){const r=C(b(x(t))),n=[];let i=[0,0],a=[0,0];for(const{key:o,data:s}of r)switch(o){case"M":a=[s[0],s[1]],i=[s[0],s[1]];break;case"L":n.push(...j(a[0],a[1],s[0],s[1],e)),a=[s[0],s[1]];break;case"C":{const[t,r,i,o,l,c]=s;n.push(...q(t,r,i,o,l,c,a,e)),a=[l,c];break}case"Z":n.push(...j(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function F(t,e){const r=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,i=n.length;if(i>2){r.push({op:"move",data:[n[0][0]+N(t,e),n[0][1]+N(t,e)]});for(let a=1;a500?.4:-.0016668*l+1.233334;let h=i.maxRandomnessOffset||0;h*h*100>s&&(h=l/10);const u=h/2,d=.2+.2*D(i);let p=i.bowing*i.maxRandomnessOffset*(n-e)/200,f=i.bowing*i.maxRandomnessOffset*(t-r)/200;p=N(p,i,c),f=N(f,i,c);const g=[],m=()=>N(u,i,c),y=()=>N(h,i,c),x=i.preserveVertices;return a&&(o?g.push({op:"move",data:[t+(x?0:m()),e+(x?0:m())]}):g.push({op:"move",data:[t+(x?0:N(h,i,c)),e+(x?0:N(h,i,c))]})),o?g.push({op:"bcurveTo",data:[p+t+(r-t)*d+m(),f+e+(n-e)*d+m(),p+t+2*(r-t)*d+m(),f+e+2*(n-e)*d+m(),r+(x?0:m()),n+(x?0:m())]}):g.push({op:"bcurveTo",data:[p+t+(r-t)*d+y(),f+e+(n-e)*d+y(),p+t+2*(r-t)*d+y(),f+e+2*(n-e)*d+y(),r+(x?0:y()),n+(x?0:y())]}),g}function R(t,e,r){if(!t.length)return[];const n=[];n.push([t[0][0]+N(e,r),t[0][1]+N(e,r)]),n.push([t[0][0]+N(e,r),t[0][1]+N(e,r)]);for(let i=1;i3){const a=[],o=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let e=1;e+21&&i.push(r)):i.push(r),i.push(t[e+3])}else{const n=.5,a=t[e+0],o=t[e+1],s=t[e+2],l=t[e+3],c=Y(a,o,n),h=Y(o,s,n),u=Y(s,l,n),d=Y(c,h,n),p=Y(h,u,n),f=Y(d,p,n);X([a,c,d,f],0,r,i),X([f,p,u,l],0,r,i)}var a,o;return i}function V(t,e){return Z(t,0,t.length,e)}function Z(t,e,r,n,i){const a=i||[],o=t[e],s=t[r-1];let l=0,c=1;for(let h=e+1;hl&&(l=e,c=h)}return Math.sqrt(l)>n?(Z(t,e,c+1,n,a),Z(t,c,r,n,a)):(a.length||a.push(o),a.push(s)),a}function Q(t,e=.15,r){const n=[],i=(t.length-1)/3;for(let a=0;a0?Z(n,0,n.length,r):n}const J="none";class tt{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,r){return{shape:t,sets:e||[],options:r||this.defaultOptions}}line(t,e,r,n,i){const a=this._o(i);return this._d("line",[v(t,e,r,n,a)],a)}rectangle(t,e,r,n,i){const a=this._o(i),o=[],s=function(t,e,r,n,i){return function(t,e){return S(t,!0,e)}([[t,e],[t+r,e],[t+r,e+n],[t,e+n]],i)}(t,e,r,n,a);if(a.fill){const i=[[t,e],[t+r,e],[t+r,e+n],[t,e+n]];"solid"===a.fillStyle?o.push(F([i],a)):o.push($([i],a))}return a.stroke!==J&&o.push(s),this._d("rectangle",o,a)}ellipse(t,e,r,n,i){const a=this._o(i),o=[],s=A(r,n,a),l=M(t,e,a,s);if(a.fill)if("solid"===a.fillStyle){const r=M(t,e,a,s).opset;r.type="fillPath",o.push(r)}else o.push($([l.estimatedPoints],a));return a.stroke!==J&&o.push(l.opset),this._d("ellipse",o,a)}circle(t,e,r,n){const i=this.ellipse(t,e,r,r,n);return i.shape="circle",i}linearPath(t,e){const r=this._o(e);return this._d("linearPath",[S(t,!1,r)],r)}arc(t,e,r,n,i,a,o=!1,s){const l=this._o(s),c=[],h=B(t,e,r,n,i,a,o,!0,l);if(o&&l.fill)if("solid"===l.fillStyle){const o=Object.assign({},l);o.disableMultiStroke=!0;const s=B(t,e,r,n,i,a,!0,!1,o);s.type="fillPath",c.push(s)}else c.push(function(t,e,r,n,i,a,o){const s=t,l=e;let c=Math.abs(r/2),h=Math.abs(n/2);c+=N(.01*c,o),h+=N(.01*h,o);let u=i,d=a;for(;u<0;)u+=2*Math.PI,d+=2*Math.PI;d-u>2*Math.PI&&(u=0,d=2*Math.PI);const p=(d-u)/o.curveStepCount,f=[];for(let g=u;g<=d;g+=p)f.push([s+c*Math.cos(g),l+h*Math.sin(g)]);return f.push([s+c*Math.cos(d),l+h*Math.sin(d)]),f.push([s,l]),$([f],o)}(t,e,r,n,i,a,l));return l.stroke!==J&&c.push(h),this._d("arc",c,l)}curve(t,e){const r=this._o(e),n=[],i=T(t,r);if(r.fill&&r.fill!==J)if("solid"===r.fillStyle){const e=T(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(e.ops)})}else{const e=[],i=t;if(i.length){const t="number"==typeof i[0][0]?[i]:i;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Q(H([n[0],n[0],n[1],n[2]]),10,(1+r.roughness)/2)):e.push(...Q(H(n),10,(1+r.roughness)/2))}e.length&&n.push($([e],r))}return r.stroke!==J&&n.push(i),this._d("curve",n,r)}polygon(t,e){const r=this._o(e),n=[],i=S(t,!0,r);return r.fill&&("solid"===r.fillStyle?n.push(F([t],r)):n.push($([t],r))),r.stroke!==J&&n.push(i),this._d("polygon",n,r)}path(t,e){const r=this._o(e),n=[];if(!t)return this._d("path",n,r);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");const i=r.fill&&"transparent"!==r.fill&&r.fill!==J,a=r.stroke!==J,o=!!(r.simplification&&r.simplification<1),s=function(t,e,r){const n=C(b(x(t))),i=[];let a=[],o=[0,0],s=[];const l=()=>{s.length>=4&&a.push(...Q(s,1)),s=[]},c=()=>{l(),a.length&&(i.push(a),a=[])};for(const{key:u,data:d}of n)switch(u){case"M":c(),o=[d[0],d[1]],a.push(o);break;case"L":l(),a.push([d[0],d[1]]);break;case"C":if(!s.length){const t=a.length?a[a.length-1]:o;s.push([t[0],t[1]])}s.push([d[0],d[1]]),s.push([d[2],d[3]]),s.push([d[4],d[5]]);break;case"Z":l(),a.push([o[0],o[1]])}if(c(),!r)return i;const h=[];for(const u of i){const t=V(u,r);t.length&&h.push(t)}return h}(t,0,o?4-4*(r.simplification||1):(1+r.roughness)/2),l=L(t,r);if(i)if("solid"===r.fillStyle)if(1===s.length){const e=L(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));n.push({type:"fillPath",ops:this._mergedShape(e.ops)})}else n.push(F(s,r));else n.push($(s,r));return a&&(o?s.forEach(t=>{n.push(S(t,!1,r))}):n.push(l)),this._d("path",n,r)}opsToPath(t,e){let r="";for(const n of t.ops){const t="number"==typeof e&&e>=0?n.data.map(t=>+t.toFixed(e)):n.data;switch(n.op){case"move":r+=`M${t[0]} ${t[1]} `;break;case"bcurveTo":r+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case"lineTo":r+=`L${t[0]} ${t[1]} `}}return r.trim()}toPaths(t){const e=t.sets||[],r=t.options||this.defaultOptions,n=[];for(const i of e){let t=null;switch(i.type){case"path":t={d:this.opsToPath(i),stroke:r.stroke,strokeWidth:r.strokeWidth,fill:J};break;case"fillPath":t={d:this.opsToPath(i),stroke:J,strokeWidth:0,fill:r.fill||J};break;case"fillSketch":t=this.fillSketch(i,r)}t&&n.push(t)}return n}fillSketch(t,e){let r=e.fillWeight;return r<0&&(r=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||J,strokeWidth:r,fill:J}}_mergedShape(t){return t.filter((t,e)=>0===e||"move"!==t.op)}}class et{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new tt(e)}draw(t){const e=t.sets||[],r=t.options||this.getDefaultOptions(),n=this.ctx,i=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case"path":n.save(),n.strokeStyle="none"===r.stroke?"transparent":r.stroke,n.lineWidth=r.strokeWidth,r.strokeLineDash&&n.setLineDash(r.strokeLineDash),r.strokeLineDashOffset&&(n.lineDashOffset=r.strokeLineDashOffset),this._drawToContext(n,a,i),n.restore();break;case"fillPath":{n.save(),n.fillStyle=r.fill||"";const e="curve"===t.shape||"polygon"===t.shape||"path"===t.shape?"evenodd":"nonzero";this._drawToContext(n,a,i,e),n.restore();break}case"fillSketch":this.fillSketch(n,a,r)}}fillSketch(t,e,r){let n=r.fillWeight;n<0&&(n=r.strokeWidth/2),t.save(),r.fillLineDash&&t.setLineDash(r.fillLineDash),r.fillLineDashOffset&&(t.lineDashOffset=r.fillLineDashOffset),t.strokeStyle=r.fill||"",t.lineWidth=n,this._drawToContext(t,e,r.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,r,n="nonzero"){t.beginPath();for(const i of e.ops){const e="number"==typeof r&&r>=0?i.data.map(t=>+t.toFixed(r)):i.data;switch(i.op){case"move":t.moveTo(e[0],e[1]);break;case"bcurveTo":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case"lineTo":t.lineTo(e[0],e[1])}}"fillPath"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,r,n,i){const a=this.gen.line(t,e,r,n,i);return this.draw(a),a}rectangle(t,e,r,n,i){const a=this.gen.rectangle(t,e,r,n,i);return this.draw(a),a}ellipse(t,e,r,n,i){const a=this.gen.ellipse(t,e,r,n,i);return this.draw(a),a}circle(t,e,r,n){const i=this.gen.circle(t,e,r,n);return this.draw(i),i}linearPath(t,e){const r=this.gen.linearPath(t,e);return this.draw(r),r}polygon(t,e){const r=this.gen.polygon(t,e);return this.draw(r),r}arc(t,e,r,n,i,a,o=!1,s){const l=this.gen.arc(t,e,r,n,i,a,o,s);return this.draw(l),l}curve(t,e){const r=this.gen.curve(t,e);return this.draw(r),r}path(t,e){const r=this.gen.path(t,e);return this.draw(r),r}}const rt="http://www.w3.org/2000/svg";class nt{constructor(t,e){this.svg=t,this.gen=new tt(e)}draw(t){const e=t.sets||[],r=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,i=n.createElementNS(rt,"g"),a=t.options.fixedDecimalPlaceDigits;for(const o of e){let e=null;switch(o.type){case"path":e=n.createElementNS(rt,"path"),e.setAttribute("d",this.opsToPath(o,a)),e.setAttribute("stroke",r.stroke),e.setAttribute("stroke-width",r.strokeWidth+""),e.setAttribute("fill","none"),r.strokeLineDash&&e.setAttribute("stroke-dasharray",r.strokeLineDash.join(" ").trim()),r.strokeLineDashOffset&&e.setAttribute("stroke-dashoffset",`${r.strokeLineDashOffset}`);break;case"fillPath":e=n.createElementNS(rt,"path"),e.setAttribute("d",this.opsToPath(o,a)),e.setAttribute("stroke","none"),e.setAttribute("stroke-width","0"),e.setAttribute("fill",r.fill||""),"curve"!==t.shape&&"polygon"!==t.shape||e.setAttribute("fill-rule","evenodd");break;case"fillSketch":e=this.fillSketch(n,o,r)}e&&i.appendChild(e)}return i}fillSketch(t,e,r){let n=r.fillWeight;n<0&&(n=r.strokeWidth/2);const i=t.createElementNS(rt,"path");return i.setAttribute("d",this.opsToPath(e,r.fixedDecimalPlaceDigits)),i.setAttribute("stroke",r.fill||""),i.setAttribute("stroke-width",n+""),i.setAttribute("fill","none"),r.fillLineDash&&i.setAttribute("stroke-dasharray",r.fillLineDash.join(" ").trim()),r.fillLineDashOffset&&i.setAttribute("stroke-dashoffset",`${r.fillLineDashOffset}`),i}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,r,n,i){const a=this.gen.line(t,e,r,n,i);return this.draw(a)}rectangle(t,e,r,n,i){const a=this.gen.rectangle(t,e,r,n,i);return this.draw(a)}ellipse(t,e,r,n,i){const a=this.gen.ellipse(t,e,r,n,i);return this.draw(a)}circle(t,e,r,n){const i=this.gen.circle(t,e,r,n);return this.draw(i)}linearPath(t,e){const r=this.gen.linearPath(t,e);return this.draw(r)}polygon(t,e){const r=this.gen.polygon(t,e);return this.draw(r)}arc(t,e,r,n,i,a,o=!1,s){const l=this.gen.arc(t,e,r,n,i,a,o,s);return this.draw(l)}curve(t,e){const r=this.gen.curve(t,e);return this.draw(r)}path(t,e){const r=this.gen.path(t,e);return this.draw(r)}}var it={canvas:(t,e)=>new et(t,e),svg:(t,e)=>new nt(t,e),generator:t=>new tt(t),newSeed:()=>tt.newSeed()}},30070:(t,e,r)=>{"use strict";r.d(e,{R:()=>s});var n=r(41750),i={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};function a(t,e){if(void 0===t||void 0===e)return{angle:0,deltaX:0,deltaY:0};t=o(t),e=o(e);const[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}(0,n.K2)(a,"calculateDeltaAndAngle");var o=(0,n.K2)(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),s=(0,n.K2)(t=>({x:(0,n.K2)(function(e,r,n){let s=0;const l=o(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(i,t.arrowTypeEnd)){const{angle:e,deltaX:r}=a(n[n.length-1],n[n.length-2]);s=i[t.arrowTypeEnd]*Math.cos(e)*(r>=0?1:-1)}const c=Math.abs(o(e).x-o(n[n.length-1]).x),h=Math.abs(o(e).y-o(n[n.length-1]).y),u=Math.abs(o(e).x-o(n[0]).x),d=Math.abs(o(e).y-o(n[0]).y),p=i[t.arrowTypeStart],f=i[t.arrowTypeEnd];if(c0&&h0&&d=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(i,t.arrowTypeEnd)){const{angle:e,deltaY:r}=a(n[n.length-1],n[n.length-2]);s=i[t.arrowTypeEnd]*Math.abs(Math.sin(e))*(r>=0?1:-1)}const c=Math.abs(o(e).y-o(n[n.length-1]).y),h=Math.abs(o(e).x-o(n[n.length-1]).x),u=Math.abs(o(e).y-o(n[0]).y),d=Math.abs(o(e).x-o(n[0]).x),p=i[t.arrowTypeStart],f=i[t.arrowTypeEnd];if(c0&&h0&&d{"use strict";r.r(e),r.d(e,{default:()=>n});const n={docItemContainer:"docItemContainer_hrrU",docItemGrid:"docItemGrid_SzoZ",gap1:"gap1_XuuQ",toc:"toc_pP_5",tocMobile:"tocMobile_imaF",docItemCol:"docItemCol_F52z"}},31795:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>a});r(96540);var n=r(51107),i=r(74848);function a(t){return(0,i.jsx)(n.A,{...t})}},33203:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.useDocTOC=void 0;const i=r(74848),a=r(36513),o=n(r(47471)),s=n(r(72550)),l=n(r(1804)),c=n(r(20821)),h=n(r(67825)),u=n(r(75986)),d=n(r(86068)),p=n(r(51878)),f=n(r(34559)),g=r(44975),m=r(59667),y=n(r(31409)),x=r(60542);function b(){const{frontMatter:t,toc:e}=(0,x.useDoc)(),r=(0,a.useWindowSize)(),n=(0,g.useMedia)("(min-width: 1200px)"),o=t.hide_table_of_contents,s=!o&&e.length>0;return{hidden:o,mobile:s?(0,i.jsx)("div",{className:y.default.tocMobile,children:(0,i.jsx)(u.default,{})}):void 0,desktop:s&&(n||"ssr"===r)?(0,i.jsx)(h.default,{}):void 0}}e.useDocTOC=b,e.default=function({children:t}){const e=b();return(0,i.jsxs)("div",{className:(0,f.default)("row",y.default.docItemGrid),children:[(0,i.jsxs)("div",{className:(0,f.default)(y.default.docItemCol),children:[(0,i.jsx)(p.default,{}),(0,i.jsxs)("div",{className:y.default.docItemContainer,children:[(0,i.jsxs)("article",{children:[(0,i.jsx)(o.default,{}),(0,i.jsx)(d.default,{}),(0,i.jsx)(m.MDXEnhancementContext.Provider,{value:{items:[{component:"heading",position:"after",render:t=>"h1"===t.as&&e.mobile}]},children:(0,i.jsx)(s.default,{children:t})}),(0,i.jsx)(l.default,{})]}),(0,i.jsx)(c.default,{})]})]}),(0,i.jsx)("div",{className:y.default.gap1}),e.desktop&&(0,i.jsx)("div",{className:(0,f.default)(y.default.toc),children:e.desktop})]})}},33858:(t,e,r)=>{"use strict";r.d(e,{A:()=>u});var n=r(88496),i=r(5254),a=r(53098),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1;const s=function(t){return(0,a.A)(t)&&(0,i.A)(t.length)&&!!o[(0,n.A)(t)]};var l=r(52789),c=r(64841),h=c.A&&c.A.isTypedArray;const u=h?(0,l.A)(h):s},36930:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(49540)),o=r(34286);e.default=function(t){return(0,i.jsx)(o.LightBoxWrapper,{children:(0,i.jsx)(a.default,{...t})})}},38446:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(89610),i=r(5254);const a=function(t){return null!=t&&(0,i.A)(t.length)&&!(0,n.A)(t)}},39142:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return function(){return t}}},39759:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";r.d(e,{A:()=>a});var n=r(18744),i=r(41917);const a=(0,n.A)(i.A,"Set")},40367:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t,e){return function(r){return t(e(r))}}},41750:(t,e,r)=>{"use strict";r.d(e,{C0:()=>S,VA:()=>y,K2:()=>m,xA:()=>ut,hH:()=>$,Dl:()=>Pt,IU:()=>re,Wt:()=>Zt,Y2:()=>Kt,a$:()=>Ht,sb:()=>J,ME:()=>pe,UI:()=>V,Ch:()=>A,mW:()=>T,DB:()=>_,_3:()=>Lt,EJ:()=>w,m7:()=>oe,iN:()=>ie,zj:()=>ct,D7:()=>ue,Gs:()=>be,J$:()=>L,ab:()=>le,Q2:()=>st,P$:()=>z,ID:()=>Bt,Wi:()=>Rt,H1:()=>yt,Rm:()=>b,QO:()=>Et,Js:()=>xe,Xd:()=>M,VJ:()=>zt,cL:()=>dt,$i:()=>Z,jZ:()=>_t,oB:()=>fe,wZ:()=>at,EI:()=>ae,SV:()=>ne,Nk:()=>lt,XV:()=>de,ke:()=>se,He:()=>C,UU:()=>it,ot:()=>Ut,mj:()=>ge,tM:()=>Vt,H$:()=>H,B6:()=>ot});var n=r(74353),i=r(74886),a=r(8232);const o=(t,e)=>{const r=i.A.parse(t),n={};for(const i in e)e[i]&&(n[i]=r[i]+e[i]);return(0,a.A)(t,n)};var s=r(25582);const l=(t,e,r=50)=>{const{r:n,g:a,b:o,a:l}=i.A.parse(t),{r:c,g:h,b:u,a:d}=i.A.parse(e),p=r/100,f=2*p-1,g=l-d,m=((f*g===-1?f:(f+g)/(1+f*g))+1)/2,y=1-m,x=n*m+c*y,b=a*m+h*y,C=o*m+u*y,k=l*p+d*(1-p);return(0,s.A)(x,b,C,k)},c=(t,e=100)=>{const r=i.A.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,l(r,t,e)};var h,u=r(75263),d=r(78041),p=r(3219),f=r(99418),g=Object.defineProperty,m=(t,e)=>g(t,"name",{value:e,configurable:!0}),y=(t,e)=>{for(var r in e)g(t,r,{get:e[r],enumerable:!0})},x={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},b={trace:m((...t)=>{},"trace"),debug:m((...t)=>{},"debug"),info:m((...t)=>{},"info"),warn:m((...t)=>{},"warn"),error:m((...t)=>{},"error"),fatal:m((...t)=>{},"fatal")},C=m(function(t="fatal"){let e=x.fatal;"string"==typeof t?t.toLowerCase()in x&&(e=x[t]):"number"==typeof t&&(e=t),b.trace=()=>{},b.debug=()=>{},b.info=()=>{},b.warn=()=>{},b.error=()=>{},b.fatal=()=>{},e<=x.fatal&&(b.fatal=console.error?console.error.bind(console,k("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",k("FATAL"))),e<=x.error&&(b.error=console.error?console.error.bind(console,k("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",k("ERROR"))),e<=x.warn&&(b.warn=console.warn?console.warn.bind(console,k("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",k("WARN"))),e<=x.info&&(b.info=console.info?console.info.bind(console,k("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",k("INFO"))),e<=x.debug&&(b.debug=console.debug?console.debug.bind(console,k("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",k("DEBUG"))),e<=x.trace&&(b.trace=console.debug?console.debug.bind(console,k("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",k("TRACE")))},"setLogLevel"),k=m(t=>`%c${n().format("ss.SSS")} : ${t} : `,"format"),w=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,_=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,v=/\s*%%.*\n/gm,S=class extends Error{static{m(this,"UnknownDiagramError")}constructor(t){super(t),this.name="UnknownDiagramError"}},T={},A=m(function(t,e){t=t.replace(w,"").replace(_,"").replace(v,"\n");for(const[r,{detector:n}]of Object.entries(T)){if(n(t,e))return r}throw new S(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),M=m((...t)=>{for(const{id:e,detector:r,loader:n}of t)B(e,r,n)},"registerLazyLoadedDiagrams"),B=m((t,e,r)=>{T[t]&&b.warn(`Detector with key ${t} already exists. Overwriting.`),T[t]={detector:e,loader:r},b.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),L=m(t=>T[t].loader,"getDiagramLoader"),F=m((t,e,{depth:r=2,clobber:n=!1}={})=>{const i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(e=>F(t,e,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(e=>{t.includes(e)||t.push(e)}),t):void 0===t||r<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach(i=>{"object"!=typeof e[i]||void 0!==t[i]&&"object"!=typeof t[i]?(n||"object"!=typeof t[i]&&"object"!=typeof e[i])&&(t[i]=e[i]):(void 0===t[i]&&(t[i]=Array.isArray(e[i])?[]:{}),t[i]=F(t[i],e[i],{depth:r-1,clobber:n}))}),t)},"assignWithDepth"),$=F,E="#ffffff",D="#f2f2f2",O=m((t,e)=>o(t,e?{s:-40,l:10}:{s:-40,l:-10}),"mkBorder"),N=class{static{m(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||o(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||o(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||O(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||O(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||O(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||O(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||c(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||c(this.tertiaryColor),this.lineColor=this.lineColor||c(this.background),this.arrowheadColor=this.arrowheadColor||c(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,u.A)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,u.A)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||c(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,d.A)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||"navy",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||(0,u.A)(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||(0,u.A)(this.mainBkg,10)):(this.rowOdd=this.rowOdd||(0,d.A)(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||(0,d.A)(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},j=m(t=>{const e=new N;return e.calculate(t),e},"getThemeVariables"),I=class{static{m(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,d.A)(this.primaryColor,16),this.tertiaryColor=o(this.primaryColor,{h:-160}),this.primaryBorderColor=c(this.background),this.secondaryBorderColor=O(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=O(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.tertiaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,d.A)(c("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=(0,s.A)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,u.A)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,u.A)(this.sectionBkgColor,10),this.taskBorderColor=(0,s.A)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,s.A)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||(0,d.A)(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||(0,u.A)(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=(0,d.A)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,d.A)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,d.A)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=o(this.primaryColor,{h:64}),this.fillType3=o(this.secondaryColor,{h:64}),this.fillType4=o(this.primaryColor,{h:-64}),this.fillType5=o(this.secondaryColor,{h:-64}),this.fillType6=o(this.primaryColor,{h:128}),this.fillType7=o(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330});for(let t=0;t{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},R=m(t=>{const e=new I;return e.calculate(t),e},"getThemeVariables"),P=class{static{m(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=o(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=o(this.primaryColor,{h:-160}),this.primaryBorderColor=O(this.primaryColor,this.darkMode),this.secondaryBorderColor=O(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=O(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.tertiaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.sectionBkgColor=(0,s.A)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="navy",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,u.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,u.A)(this.tertiaryColor,40);for(let t=0;t{"calculated"===this[t]&&(this[t]=void 0)}),"object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach(e=>{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},z=m(t=>{const e=new P;return e.calculate(t),e},"getThemeVariables"),K=class{static{m(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,d.A)("#cde498",10),this.primaryBorderColor=O(this.primaryColor,this.darkMode),this.secondaryBorderColor=O(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=O(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.primaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=(0,u.A)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||o(this.primaryColor,{h:30}),this.cScale4=this.cScale4||o(this.primaryColor,{h:60}),this.cScale5=this.cScale5||o(this.primaryColor,{h:90}),this.cScale6=this.cScale6||o(this.primaryColor,{h:120}),this.cScale7=this.cScale7||o(this.primaryColor,{h:150}),this.cScale8=this.cScale8||o(this.primaryColor,{h:210}),this.cScale9=this.cScale9||o(this.primaryColor,{h:270}),this.cScale10=this.cScale10||o(this.primaryColor,{h:300}),this.cScale11=this.cScale11||o(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,u.A)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,u.A)(this.tertiaryColor,40);for(let t=0;t{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},q=m(t=>{const e=new K;return e.calculate(t),e},"getThemeVariables"),W=class{static{m(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,d.A)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=o(this.primaryColor,{h:-160}),this.primaryBorderColor=O(this.primaryColor,this.darkMode),this.secondaryBorderColor=O(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=O(this.tertiaryColor,this.darkMode),this.primaryTextColor=c(this.primaryColor),this.secondaryTextColor=c(this.secondaryColor),this.tertiaryTextColor=c(this.tertiaryColor),this.lineColor=c(this.background),this.textColor=c(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||(0,d.A)(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=(0,d.A)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,d.A)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let t=0;t{this[e]=t[e]}),this.updateColors(),e.forEach(e=>{this[e]=t[e]})}},H={base:{getThemeVariables:j},dark:{getThemeVariables:R},default:{getThemeVariables:z},forest:{getThemeVariables:q},neutral:{getThemeVariables:m(t=>{const e=new W;return e.calculate(t),e},"getThemeVariables")}},U={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,maxLabelWidth:360,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1},G={...U,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:H.default.getThemeVariables(),sequence:{...U.sequence,messageFont:m(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:m(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:m(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...U.gantt,tickInterval:void 0,useWidth:void 0},c4:{...U.c4,useWidth:void 0,personFont:m(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...U.flowchart,inheritDir:!1},external_personFont:m(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:m(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:m(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:m(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:m(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:m(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:m(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:m(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:m(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:m(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:m(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:m(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:m(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:m(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:m(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:m(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:m(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:m(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:m(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:m(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:m(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...U.pie,useWidth:984},xyChart:{...U.xyChart,useWidth:void 0},requirement:{...U.requirement,useWidth:void 0},packet:{...U.packet},radar:{...U.radar},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","}},Y=m((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:"object"==typeof t[n]&&null!==t[n]?[...r,e+n,...Y(t[n],"")]:[...r,e+n],[]),"keyify"),X=new Set(Y(G,"")),V=G,Z=m(t=>{if(b.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach(t=>Z(t));else{for(const e of Object.keys(t)){if(b.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!X.has(e)||null==t[e]){b.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){b.debug("sanitizing object",e),Z(t[e]);continue}const r=["themeCSS","fontFamily","altFontFamily"];for(const n of r)e.includes(n)&&(b.debug("sanitizing css option",e),t[e]=Q(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}b.debug("After sanitization",t)}},"sanitizeDirective"),Q=m(t=>{let e=0,r=0;for(const n of t){if(e{let r=$({},t),n={};for(const i of e)ht(i),n=$(n,i);if(r=$(r,n),n.theme&&n.theme in H){const t=$({},h),e=$(t.themeVariables||{},n.themeVariables);r.theme&&r.theme in H&&(r.themeVariables=H[r.theme].getThemeVariables(e))}return mt(rt=r),rt},"updateCurrentConfig"),it=m(t=>(tt=$({},J),tt=$(tt,t),t.theme&&H[t.theme]&&(tt.themeVariables=H[t.theme].getThemeVariables(t.themeVariables)),nt(tt,et),tt),"setSiteConfig"),at=m(t=>{h=$({},t)},"saveConfigFromInitialize"),ot=m(t=>(tt=$(tt,t),nt(tt,et),tt),"updateSiteConfig"),st=m(()=>$({},tt),"getSiteConfig"),lt=m(t=>(mt(t),$(rt,t),ct()),"setConfig"),ct=m(()=>$({},rt),"getConfig"),ht=m(t=>{t&&(["secure",...tt.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(b.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&ht(t[e])}))},"sanitize"),ut=m(t=>{Z(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),et.push(t),nt(tt,et)},"addDirective"),dt=m((t=tt)=>{nt(t,et=[])},"reset"),pt={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},ft={},gt=m(t=>{ft[t]||(b.warn(pt[t]),ft[t]=!0)},"issueWarning"),mt=m(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&>("LAZY_LOAD_DEPRECATED")},"checkConfig"),yt=//gi,xt=m(t=>{if(!t)return[""];return Mt(t).replace(/\\n/g,"#br#").split("#br#")},"getRows"),bt=(()=>{let t=!1;return()=>{t||(Ct(),t=!0)}})();function Ct(){const t="data-temp-href-target";f.A.addHook("beforeSanitizeAttributes",e=>{e instanceof Element&&"A"===e.tagName&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),f.A.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&"A"===e.tagName&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),"_blank"===e.getAttribute("target")&&e.setAttribute("rel","noopener"))})}m(Ct,"setupDompurifyHooks");var kt=m(t=>{bt();return f.A.sanitize(t)},"removeScript"),wt=m((t,e)=>{if(!1!==e.flowchart?.htmlLabels){const r=e.securityLevel;"antiscript"===r||"strict"===r?t=kt(t):"loose"!==r&&(t=(t=(t=Mt(t)).replace(//g,">")).replace(/=/g,"="),t=At(t))}return t},"sanitizeMore"),_t=m((t,e)=>t?t=e.dompurifyConfig?f.A.sanitize(wt(t,e),e.dompurifyConfig).toString():f.A.sanitize(wt(t,e),{FORBID_TAGS:["style"]}).toString():t,"sanitizeText"),vt=m((t,e)=>"string"==typeof t?_t(t,e):t.flat().map(t=>_t(t,e)),"sanitizeTextOrArray"),St=m(t=>yt.test(t),"hasBreaks"),Tt=m(t=>t.split(yt),"splitBreaks"),At=m(t=>t.replace(/#br#/g,"
    "),"placeholderToBreak"),Mt=m(t=>t.replace(yt,"#br#"),"breakToPlaceholder"),Bt=m(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),Lt=m(t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),"evaluate"),Ft=m(function(...t){const e=t.filter(t=>!isNaN(t));return Math.max(...e)},"getMax"),$t=m(function(...t){const e=t.filter(t=>!isNaN(t));return Math.min(...e)},"getMin"),Et=m(function(t){const e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),Ot=m((t,e)=>{const r=Dt(t,"~"),n=Dt(e,"~");return 1===r&&1===n},"shouldCombineSets"),Nt=m(t=>{const e=Dt(t,"~");let r=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),r=!0);const n=[...t];let i=n.indexOf("~"),a=n.lastIndexOf("~");for(;-1!==i&&-1!==a&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),jt=m(()=>void 0!==window.MathMLElement,"isMathMLSupported"),It=/\$\$(.*)\$\$/g,Rt=m(t=>(t.match(It)?.length??0)>0,"hasKatex"),Pt=m(async(t,e)=>{t=await zt(t,e);const r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0";const n=document.querySelector("body");n?.insertAdjacentElement("beforeend",r);const i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),zt=m(async(t,e)=>{if(!Rt(t))return t;if(!(jt()||e.legacyMathML||e.forceLegacyMathML))return t.replace(It,"MathML is unsupported in this environment.");{const{default:n}=await r.e(2130).then(r.bind(r,22130)),i=e.forceLegacyMathML||!jt()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(yt).map(t=>Rt(t)?`
    ${t}
    `:`
    ${t}
    `).join("").replace(It,(t,e)=>n.renderToString(e,{throwOnError:!0,displayMode:!0,output:i}).replace(/\n/g," ").replace(//g,""))}},"renderKatex"),Kt={getRows:xt,sanitizeText:_t,sanitizeTextOrArray:vt,hasBreaks:St,splitBreaks:Tt,lineBreakRegex:yt,removeScript:kt,getUrl:Bt,evaluate:Lt,getMax:Ft,getMin:$t},qt=m(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),Wt=m(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),Ht=m(function(t,e,r,n){const i=Wt(e,r,n);qt(t,i)},"configureSvgSize"),Ut=m(function(t,e,r,n){const i=e.node().getBBox(),a=i.width,o=i.height;b.info(`SVG bounds: ${a}x${o}`,i);let s=0,l=0;b.info(`Graph bounds: ${s}x${l}`,t),s=a+2*r,l=o+2*r,b.info(`Calculated bounds: ${s}x${l}`),Ht(e,l,s,n);const c=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",c)},"setupGraphViewbox"),Gt={},Yt=m((t,e,r)=>{let n="";return t in Gt&&Gt[t]?n=Gt[t](r):b.warn(`No theme found for ${t}`),` & {\n font-family: ${r.fontFamily};\n font-size: ${r.fontSize};\n fill: ${r.textColor}\n }\n @keyframes edge-animation-frame {\n from {\n stroke-dashoffset: 0;\n }\n }\n @keyframes dash {\n to {\n stroke-dashoffset: 0;\n }\n }\n & .edge-animation-slow {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 50s linear infinite;\n stroke-linecap: round;\n }\n & .edge-animation-fast {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 20s linear infinite;\n stroke-linecap: round;\n }\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${r.errorBkgColor};\n }\n & .error-text {\n fill: ${r.errorTextColor};\n stroke: ${r.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 1px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n & .edge-thickness-invisible {\n stroke-width: 0;\n fill: none;\n }\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${r.lineColor};\n stroke: ${r.lineColor};\n }\n & .marker.cross {\n stroke: ${r.lineColor};\n }\n\n & svg {\n font-family: ${r.fontFamily};\n font-size: ${r.fontSize};\n }\n & p {\n margin: 0\n }\n\n ${n}\n\n ${e}\n`},"getStyles"),Xt=m((t,e)=>{void 0!==e&&(Gt[t]=e)},"addStylesForDiagram"),Vt=Yt,Zt={};y(Zt,{clear:()=>re,getAccDescription:()=>oe,getAccTitle:()=>ie,getDiagramTitle:()=>le,setAccDescription:()=>ae,setAccTitle:()=>ne,setDiagramTitle:()=>se});var Qt="",Jt="",te="",ee=m(t=>_t(t,ct()),"sanitizeText"),re=m(()=>{Qt="",te="",Jt=""},"clear"),ne=m(t=>{Qt=ee(t).replace(/^\s+/g,"")},"setAccTitle"),ie=m(()=>Qt,"getAccTitle"),ae=m(t=>{te=ee(t).replace(/\n\s+/g,"\n")},"setAccDescription"),oe=m(()=>te,"getAccDescription"),se=m(t=>{Jt=ee(t)},"setDiagramTitle"),le=m(()=>Jt,"getDiagramTitle"),ce=b,he=C,ue=ct,de=lt,pe=J,fe=m(t=>_t(t,ue()),"sanitizeText"),ge=Ut,me=m(()=>Zt,"getCommonDb"),ye={},xe=m((t,e,r)=>{ye[t]&&ce.warn(`Diagram with id ${t} already registered. Overwriting.`),ye[t]=e,r&&B(t,r),Xt(t,e.styles),e.injectUtils?.(ce,he,ue,fe,ge,me(),()=>{})},"registerDiagram"),be=m(t=>{if(t in ye)return ye[t];throw new Ce(t)},"getDiagram"),Ce=class extends Error{static{m(this,"DiagramNotFoundError")}constructor(t){super(`Diagram ${t} not found.`)}}},41917:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(72136),i="object"==typeof self&&self&&self.Object===Object&&self;const a=n.A||i||Function("return this")()},42837:(t,e,r)=>{"use strict";r.d(e,{A:()=>D});var n=r(11754),i=r(52528),a=r(66984);const o=function(t,e,r){(void 0!==r&&!(0,a.A)(t[e],r)||void 0===r&&!(e in t))&&(0,i.A)(t,e,r)};var s=r(4574),l=r(80154),c=r(1801),h=r(39759),u=r(18598),d=r(52274),p=r(92049),f=r(53533),g=r(99912),m=r(89610),y=r(23149),x=r(88496),b=r(15647),C=r(53098),k=Function.prototype,w=Object.prototype,_=k.toString,v=w.hasOwnProperty,S=_.call(Object);const T=function(t){if(!(0,C.A)(t)||"[object Object]"!=(0,x.A)(t))return!1;var e=(0,b.A)(t);if(null===e)return!0;var r=v.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&_.call(r)==S};var A=r(33858);const M=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var B=r(22031),L=r(55615);const F=function(t){return(0,B.A)(t,(0,L.A)(t))};const $=function(t,e,r,n,i,a,s){var x=M(t,r),b=M(e,r),C=s.get(b);if(C)o(t,r,C);else{var k=a?a(x,b,r+"",t,e,s):void 0,w=void 0===k;if(w){var _=(0,p.A)(b),v=!_&&(0,g.A)(b),S=!_&&!v&&(0,A.A)(b);k=b,_||v||S?(0,p.A)(x)?k=x:(0,f.A)(x)?k=(0,h.A)(x):v?(w=!1,k=(0,l.A)(b,!0)):S?(w=!1,k=(0,c.A)(b,!0)):k=[]:T(b)||(0,d.A)(b)?(k=x,(0,d.A)(x)?k=F(x):(0,y.A)(x)&&!(0,m.A)(x)||(k=(0,u.A)(b))):w=!1}w&&(s.set(b,k),i(k,b,n,a,s),s.delete(b)),o(t,r,k)}};const E=function t(e,r,i,a,l){e!==r&&(0,s.A)(r,function(s,c){if(l||(l=new n.A),(0,y.A)(s))$(e,r,c,i,t,a,l);else{var h=a?a(M(e,c),s,c+"",e,r,l):void 0;void 0===h&&(h=s),o(e,c,h)}},L.A)};const D=(0,r(3767).A)(function(t,e,r){E(t,e,r)})},43988:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=r(41917).A.Uint8Array},45020:(t,e,r)=>{"use strict";r.d(e,{XX:()=>h,q7:()=>u,sO:()=>c});var n=r(51789),i=r(66906),a=r(46792),o=r(41750),s={common:o.Y2,getConfig:o.zj,insertCluster:i.U,insertEdge:n.Jo,insertEdgeLabel:n.jP,insertMarkers:n.g0,insertNode:i.on,interpolateToCurve:a.Ib,labelHelper:i.Zk,log:o.Rm,positionEdgeLabel:n.T_},l={},c=(0,o.K2)(t=>{for(const e of t)l[e.name]=e},"registerLayoutLoaders");(0,o.K2)(()=>{c([{name:"dagre",loader:(0,o.K2)(async()=>await Promise.all([r.e(3624),r.e(2334),r.e(8665)]).then(r.bind(r,38665)),"loader")}])},"registerDefaultLayoutLoaders")();var h=(0,o.K2)(async(t,e)=>{if(!(t.layoutAlgorithm in l))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);const r=l[t.layoutAlgorithm];return(await r.loader()).render(t,e,s,{algorithm:r.algorithm})},"render"),u=(0,o.K2)((t="",{fallback:e="dagre"}={})=>{if(t in l)return t;if(e in l)return o.Rm.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")},46632:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(29471);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var o=t.apply(this,n);return r.cache=a.set(i,o)||a,o};return r.cache=new(i.Cache||n.A),r}i.Cache=n.A;const a=i},46792:(t,e,r)=>{"use strict";r.d(e,{$C:()=>A,$t:()=>q,C4:()=>H,I5:()=>K,Ib:()=>g,KL:()=>Y,Sm:()=>U,Un:()=>O,_K:()=>W,bH:()=>$,dq:()=>P,pe:()=>l,rY:()=>G,ru:()=>D,sM:()=>S,vU:()=>p,yT:()=>B});var n=r(41750),i=r(16750),a=r(70451),o=r(46632),s=r(42837),l="\u200b",c={curveBasis:a.qrM,curveBasisClosed:a.Yu4,curveBasisOpen:a.IA3,curveBumpX:a.Wi0,curveBumpY:a.PGM,curveBundle:a.OEq,curveCardinalClosed:a.olC,curveCardinalOpen:a.IrU,curveCardinal:a.y8u,curveCatmullRomClosed:a.Q7f,curveCatmullRomOpen:a.cVp,curveCatmullRom:a.oDi,curveLinear:a.lUB,curveLinearClosed:a.Lx9,curveMonotoneX:a.nVG,curveMonotoneY:a.uxU,curveNatural:a.Xf2,curveStep:a.GZz,curveStepAfter:a.UPb,curveStepBefore:a.dyv},h=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,u=(0,n.K2)(function(t,e){const r=d(t,/(?:init\b)|(?:initialize\b)/);let i={};if(Array.isArray(r)){const t=r.map(t=>t.args);(0,n.$i)(t),i=(0,n.hH)(i,[...t])}else i=r.args;if(!i)return;let a=(0,n.Ch)(t,e);const o="config";return void 0!==i[o]&&("flowchart-v2"===a&&(a="flowchart"),i[a]=i[o],delete i[o]),i},"detectInit"),d=(0,n.K2)(function(t,e=null){try{const r=new RegExp(`[%]{2}(?![{]${h.source})(?=[}][%]{2}).*\n`,"ig");let i;t=t.trim().replace(r,"").replace(/'/gm,'"'),n.Rm.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const a=[];for(;null!==(i=n.DB.exec(t));)if(i.index===n.DB.lastIndex&&n.DB.lastIndex++,i&&!e||e&&i[1]?.match(e)||e&&i[2]?.match(e)){const t=i[1]?i[1]:i[2],e=i[3]?i[3].trim():i[4]?JSON.parse(i[4].trim()):null;a.push({type:t,args:e})}return 0===a.length?{type:t,args:null}:1===a.length?a[0]:a}catch(r){return n.Rm.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),p=(0,n.K2)(function(t){return t.replace(n.DB,"")},"removeDirectives"),f=(0,n.K2)(function(t,e){for(const[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");function g(t,e){if(!t)return e;const r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return c[r]??e}function m(t,e){const r=t.trim();if(r)return"loose"!==e.securityLevel?(0,i.J)(r):r}(0,n.K2)(g,"interpolateToCurve"),(0,n.K2)(m,"formatUrl");var y=(0,n.K2)((t,...e)=>{const r=t.split("."),i=r.length-1,a=r[i];let o=window;for(let s=0;s{r+=x(t,e),e=t});return w(t,r/2)}function C(t){return 1===t.length?t[0]:b(t)}(0,n.K2)(x,"distance"),(0,n.K2)(b,"traverseEdge"),(0,n.K2)(C,"calcLabelPosition");var k=(0,n.K2)((t,e=2)=>{const r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),w=(0,n.K2)((t,e)=>{let r,n=e;for(const i of t){if(r){const t=x(i,r);if(0===t)return r;if(t=1)return{x:i.x,y:i.y};if(e>0&&e<1)return{x:k((1-e)*r.x+e*i.x,5),y:k((1-e)*r.y+e*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),_=(0,n.K2)((t,e,r)=>{n.Rm.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());const i=w(e,25),a=t?10:5,o=Math.atan2(e[0].y-i.y,e[0].x-i.x),s={x:0,y:0};return s.x=Math.sin(o)*a+(e[0].x+i.x)/2,s.y=-Math.cos(o)*a+(e[0].y+i.y)/2,s},"calcCardinalityPosition");function v(t,e,r){const i=structuredClone(r);n.Rm.info("our points",i),"start_left"!==e&&"start_right"!==e&&i.reverse();const a=w(i,25+t),o=10+.5*t,s=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return"start_left"===e?(l.x=Math.sin(s+Math.PI)*o+(i[0].x+a.x)/2,l.y=-Math.cos(s+Math.PI)*o+(i[0].y+a.y)/2):"end_right"===e?(l.x=Math.sin(s-Math.PI)*o+(i[0].x+a.x)/2-5,l.y=-Math.cos(s-Math.PI)*o+(i[0].y+a.y)/2-5):"end_left"===e?(l.x=Math.sin(s)*o+(i[0].x+a.x)/2-5,l.y=-Math.cos(s)*o+(i[0].y+a.y)/2-5):(l.x=Math.sin(s)*o+(i[0].x+a.x)/2,l.y=-Math.cos(s)*o+(i[0].y+a.y)/2),l}function S(t){let e="",r="";for(const n of t)void 0!==n&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}(0,n.K2)(v,"calcTerminalLabelPosition"),(0,n.K2)(S,"getStylesFromArray");var T=0,A=(0,n.K2)(()=>(T++,"id-"+Math.random().toString(36).substr(2,12)+"-"+T),"generateId");function M(t){let e="";const r="0123456789abcdef";for(let n=0;nM(t.length),"random"),L=(0,n.K2)(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),F=(0,n.K2)(function(t,e){const r=e.text.replace(n.Y2.lineBreakRegex," "),[,i]=K(e.fontSize),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.style("text-anchor",e.anchor),a.style("font-family",e.fontFamily),a.style("font-size",i),a.style("font-weight",e.fontWeight),a.attr("fill",e.fill),void 0!==e.class&&a.attr("class",e.class);const o=a.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(r),a},"drawSimpleText"),$=(0,o.A)((t,e,r)=>{if(!t)return t;if(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
    "},r),n.Y2.lineBreakRegex.test(t))return t;const i=t.split(" ").filter(Boolean),a=[];let o="";return i.forEach((t,n)=>{const s=O(`${t} `,r),l=O(o,r);if(s>e){const{hyphenatedStrings:n,remainingWord:i}=E(t,e,"-",r);a.push(o,...n),o=i}else l+s>=e?(a.push(o),o=t):o=[o,t].filter(Boolean).join(" ");n+1===i.length&&a.push(o)}),a.filter(t=>""!==t).join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),E=(0,o.A)((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);const i=[...t],a=[];let o="";return i.forEach((t,s)=>{const l=`${o}${t}`;if(O(l,n)>=e){const t=s+1,e=i.length===t,n=`${l}${r}`;a.push(e?l:n),o=""}else o=l}),{hyphenatedStrings:a,remainingWord:o}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);function D(t,e){return j(t,e).height}function O(t,e){return j(t,e).width}(0,n.K2)(D,"calculateTextHeight"),(0,n.K2)(O,"calculateTextWidth");var N,j=(0,o.A)((t,e)=>{const{fontSize:r=12,fontFamily:i="Arial",fontWeight:o=400}=e;if(!t)return{width:0,height:0};const[,s]=K(r),c=["sans-serif",i],h=t.split(n.Y2.lineBreakRegex),u=[],d=(0,a.Ltv)("body");if(!d.remove)return{width:0,height:0,lineHeight:0};const p=d.append("svg");for(const n of c){let t=0;const e={width:0,height:0,lineHeight:0};for(const r of h){const i=L();i.text=r||l;const a=F(p,i).style("font-size",s).style("font-weight",o).style("font-family",n),c=(a._groups||a)[0][0].getBBox();if(0===c.width&&0===c.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,c.width)),t=Math.round(c.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}u.push(e)}p.remove();return u[isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),I=class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}static{(0,n.K2)(this,"InitIDGenerator")}},R=(0,n.K2)(function(t){return N=N||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),N.innerHTML=t,unescape(N.textContent)},"entityDecode");function P(t){return"str"in t}(0,n.K2)(P,"isDetailedError");var z=(0,n.K2)((t,e,r,n)=>{if(!n)return;const i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),K=(0,n.K2)(t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");function q(t,e){return(0,s.A)({},t,e)}(0,n.K2)(q,"cleanAndMerge");var W={assignWithDepth:n.hH,wrapLabel:$,calculateTextHeight:D,calculateTextWidth:O,calculateTextDimensions:j,cleanAndMerge:q,detectInit:u,detectDirective:d,isSubstringInArray:f,interpolateToCurve:g,calcLabelPosition:C,calcCardinalityPosition:_,calcTerminalLabelPosition:v,formatUrl:m,getStylesFromArray:S,generateId:A,random:B,runFunc:y,entityDecode:R,insertTitle:z,parseFontSize:K,InitIDGenerator:I},H=(0,n.K2)(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/#\w+;/g,function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"}),e},"encodeEntities"),U=(0,n.K2)(function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},"decodeEntities"),G=(0,n.K2)((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");function Y(t){return t??null}(0,n.K2)(Y,"handleUndefinedAttr")},47471:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BreadcrumbsBase=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=r(23908),l=r(36513),c=r(54865),h=r(21312),u=n(r(34559)),d=n(r(2509));function p({children:t,href:e,isLast:r}){const n="breadcrumbs__link";return r?(0,i.jsx)(a.Typography,{variant:"body3",component:"span",className:n,itemProp:"name",children:t}):e?(0,i.jsx)(o.default,{className:n,href:e,itemProp:"item",children:(0,i.jsx)(a.Typography,{variant:"body3",component:"span",itemProp:"name",children:t})}):(0,i.jsx)(a.Typography,{variant:"body3",component:"span",className:n,children:t})}function f({children:t,active:e,index:r,addMicrodata:n}){return(0,i.jsxs)("li",{...n&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.default)("breadcrumbs__item",{"breadcrumbs__item--active":e}),children:[t,(0,i.jsx)("meta",{itemProp:"position",content:String(r+1)})]})}e.BreadcrumbsBase=({homePage:t,homePageLink:e,breadcrumbs:r})=>{if(!r)return null;const n=["events"];return(0,i.jsx)("nav",{className:(0,u.default)(l.ThemeClassNames.docs.docBreadcrumbs,d.default.breadcrumbsContainer),"aria-label":(0,h.translate)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,i.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[!!t&&(0,i.jsx)(o.default,{to:e,className:(0,u.default)("breadcrumbs__item"),children:(0,i.jsx)(a.Typography,{variant:"body3",component:"span",children:t})}),r.map((t,e)=>{const a=e===r.length-1,s=n.includes(t.label);return(0,i.jsx)(f,{active:a,index:e,addMicrodata:!!t.href,children:s?(0,i.jsx)(o.default,{to:`/${t.label}`,children:(0,i.jsx)(p,{href:t.href,isLast:a,children:t.label})}):(0,i.jsx)(p,{href:t.href,isLast:a,children:t.label})},e)})]})})},e.default=function(){const t=(0,s.useSidebarBreadcrumbs)(),r=(0,c.useHomePageRoute)(),n=(0,s.useActivePlugin)();if(!t)return null;const a=n?.pluginData.path;return(0,i.jsx)(e.BreadcrumbsBase,{homePage:r&&(0,h.translate)({id:"theme.docs.breadcrumbs.homePageLabel",message:"Home"}),breadcrumbs:t,homePageLink:a})}},49540:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>or});var n=r(96540),i=r(67489),a=r(12181),o=r(6342),s=r(95293),l=r(29026),c=r(45020),h=(r(51789),r(30070),r(66906),r(28823),r(55683),r(68506)),u=r(46792),d=r(8872),p=r(74505),f=r(41750),g=r(60513),m=r(70451),y="comm",x="rule",b="decl",C=Math.abs,k=String.fromCharCode;Object.assign;function w(t){return t.trim()}function _(t,e,r){return t.replace(e,r)}function v(t,e,r){return t.indexOf(e,r)}function S(t,e){return 0|t.charCodeAt(e)}function T(t,e,r){return t.slice(e,r)}function A(t){return t.length}function M(t,e){return e.push(t),t}function B(t,e){for(var r="",n=0;n0?S(N,--D):0,$--,10===O&&($=1,F--),O}function R(){return O=D2||q(O)>3?"":" "}function Y(t,e){for(;--e&&R()&&!(O<48||O>102||O>57&&O<65||O>70&&O<97););return K(t,z()+(e<6&&32==P()&&32==R()))}function X(t){for(;R();)switch(O){case t:return D;case 34:case 39:34!==t&&39!==t&&X(O);break;case 40:41===t&&X(t);break;case 92:R()}return D}function V(t,e){for(;R()&&t+O!==57&&(t+O!==84||47!==P()););return"/*"+K(e,D-1)+"*"+k(47===t?t:R())}function Z(t){for(;!q(P());)R();return K(t,D)}function Q(t){return H(J("",null,null,null,[""],t=W(t),0,[0],t))}function J(t,e,r,n,i,a,o,s,l){for(var c=0,h=0,u=o,d=0,p=0,f=0,g=1,m=1,y=1,x=0,b="",w=i,B=a,L=n,F=b;m;)switch(f=x,x=R()){case 40:if(108!=f&&58==S(F,u-1)){-1!=v(F+=_(U(x),"&","&\f"),"&\f",C(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:F+=U(x);break;case 9:case 10:case 13:case 32:F+=G(f);break;case 92:F+=Y(z()-1,7);continue;case 47:switch(P()){case 42:case 47:M(et(V(R(),z()),e,r,l),l),5!=q(f||1)&&5!=q(P()||1)||!A(F)||" "===T(F,-1,void 0)||(F+=" ");break;default:F+="/"}break;case 123*g:s[c++]=A(F)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(F=_(F,/\f/g,"")),p>0&&(A(F)-u||0===g&&47===f)&&M(p>32?rt(F+";",n,r,u-1,l):rt(_(F," ","")+";",n,r,u-2,l),l);break;case 59:F+=";";default:if(M(L=tt(F,e,r,c,h,i,s,b,w=[],B=[],u,a),a),123===x)if(0===h)J(F,e,L,L,w,a,u,s,B);else{switch(d){case 99:if(110===S(F,3))break;case 108:if(97===S(F,2))break;default:h=0;case 100:case 109:case 115:}h?J(t,L,L,n&&M(tt(t,L,L,0,0,i,s,b,i,w=[],u,B),B),i,B,u,s,n?w:B):J(F,L,L,L,[""],B,0,s,B)}}c=h=p=0,g=y=1,b=F="",u=o;break;case 58:u=1+A(F),p=f;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==I())continue;switch(F+=k(x),x*g){case 38:y=h>0?1:(F+="\f",-1);break;case 44:s[c++]=(A(F)-1)*y,y=1;break;case 64:45===P()&&(F+=U(R())),d=P(),h=u=A(b=F+=Z(z())),x++;break;case 45:45===f&&2==A(F)&&(g=0)}}return a}function tt(t,e,r,n,i,a,o,s,l,c,h,u){for(var d=i-1,p=0===i?a:[""],f=function(t){return t.length}(p),g=0,m=0,y=0;g0?p[b]+" "+k:_(k,/&\f/g,p[b])))&&(l[y++]=v);return j(t,e,r,0===i?x:s,l,c,h,u)}function et(t,e,r,n){return j(t,e,r,y,k(O),T(t,2,-2),0,n)}function rt(t,e,r,n,i){return j(t,e,r,b,T(t,0,n),T(t,n+1,-1),n,i)}var nt=r(99418),it=r(66401),at={id:"c4",detector:(0,f.K2)(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(1039).then(r.bind(r,21039));return{id:"c4",diagram:t}},"loader")},ot="flowchart",st={id:ot,detector:(0,f.K2)((t,e)=>"dagre-wrapper"!==e?.flowchart?.defaultRenderer&&"elk"!==e?.flowchart?.defaultRenderer&&/^\s*graph/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(2822).then(r.bind(r,72822));return{id:ot,diagram:t}},"loader")},lt="flowchart-v2",ct={id:lt,detector:(0,f.K2)((t,e)=>"dagre-d3"!==e?.flowchart?.defaultRenderer&&("elk"===e?.flowchart?.defaultRenderer&&(e.layout="elk"),!(!/^\s*graph/.test(t)||"dagre-wrapper"!==e?.flowchart?.defaultRenderer)||/^\s*flowchart/.test(t)),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(2822).then(r.bind(r,72822));return{id:lt,diagram:t}},"loader")},ht={id:"er",detector:(0,f.K2)(t=>/^\s*erDiagram/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(7835).then(r.bind(r,7835));return{id:"er",diagram:t}},"loader")},ut="gitGraph",dt={id:ut,detector:(0,f.K2)(t=>/^\s*gitGraph/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(5388)]).then(r.bind(r,15388));return{id:ut,diagram:t}},"loader")},pt="gantt",ft={id:pt,detector:(0,f.K2)(t=>/^\s*gantt/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(7900).then(r.bind(r,87900));return{id:pt,diagram:t}},"loader")},gt="info",mt={id:gt,detector:(0,f.K2)(t=>/^\s*info/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(6795)]).then(r.bind(r,16795));return{id:gt,diagram:t}},"loader")},yt={id:"pie",detector:(0,f.K2)(t=>/^\s*pie/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(4866)]).then(r.bind(r,64866));return{id:"pie",diagram:t}},"loader")},xt="quadrantChart",bt={id:xt,detector:(0,f.K2)(t=>/^\s*quadrantChart/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(5864).then(r.bind(r,85864));return{id:xt,diagram:t}},"loader")},Ct="xychart",kt={id:Ct,detector:(0,f.K2)(t=>/^\s*xychart-beta/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(6143).then(r.bind(r,6143));return{id:Ct,diagram:t}},"loader")},wt="requirement",_t={id:wt,detector:(0,f.K2)(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(9107).then(r.bind(r,69107));return{id:wt,diagram:t}},"loader")},vt="sequence",St={id:vt,detector:(0,f.K2)(t=>/^\s*sequenceDiagram/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(9349).then(r.bind(r,89349));return{id:vt,diagram:t}},"loader")},Tt="class",At={id:Tt,detector:(0,f.K2)((t,e)=>"dagre-wrapper"!==e?.class?.defaultRenderer&&/^\s*classDiagram/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(8379),r.e(310)]).then(r.bind(r,20310));return{id:Tt,diagram:t}},"loader")},Mt="classDiagram",Bt={id:Mt,detector:(0,f.K2)((t,e)=>!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==e?.class?.defaultRenderer)||/^\s*classDiagram-v2/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(8379),r.e(2076)]).then(r.bind(r,22076));return{id:Mt,diagram:t}},"loader")},Lt="state",Ft={id:Lt,detector:(0,f.K2)((t,e)=>"dagre-wrapper"!==e?.state?.defaultRenderer&&/^\s*stateDiagram/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(2334),r.e(8583),r.e(5759)]).then(r.bind(r,85759));return{id:Lt,diagram:t}},"loader")},$t="stateDiagram",Et={id:$t,detector:(0,f.K2)((t,e)=>!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==e?.state?.defaultRenderer),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(8583),r.e(2159)]).then(r.bind(r,42159));return{id:$t,diagram:t}},"loader")},Dt="journey",Ot={id:Dt,detector:(0,f.K2)(t=>/^\s*journey/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(4458).then(r.bind(r,94458));return{id:Dt,diagram:t}},"loader")},Nt={draw:(0,f.K2)((t,e,r)=>{f.Rm.debug("rendering svg for syntax error\n");const n=(0,p.D)(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),(0,f.a$)(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw")},jt=Nt,It={db:{},renderer:Nt,parser:{parse:(0,f.K2)(()=>{},"parse")}},Rt="flowchart-elk",Pt={id:Rt,detector:(0,f.K2)((t,e={})=>!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===e?.flowchart?.defaultRenderer)&&(e.layout="elk",!0),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(2822).then(r.bind(r,72822));return{id:Rt,diagram:t}},"loader")},zt="timeline",Kt={id:zt,detector:(0,f.K2)(t=>/^\s*timeline/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(3736).then(r.bind(r,53736));return{id:zt,diagram:t}},"loader")},qt="mindmap",Wt={id:qt,detector:(0,f.K2)(t=>/^\s*mindmap/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(165),r.e(6433)]).then(r.bind(r,36433));return{id:qt,diagram:t}},"loader")},Ht="kanban",Ut={id:Ht,detector:(0,f.K2)(t=>/^\s*kanban/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(7340).then(r.bind(r,7340));return{id:Ht,diagram:t}},"loader")},Gt="sankey",Yt={id:Gt,detector:(0,f.K2)(t=>/^\s*sankey-beta/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await r.e(9157).then(r.bind(r,9157));return{id:Gt,diagram:t}},"loader")},Xt="packet",Vt={id:Xt,detector:(0,f.K2)(t=>/^\s*packet(-beta)?/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(375)]).then(r.bind(r,60375));return{id:Xt,diagram:t}},"loader")},Zt="radar",Qt={id:Zt,detector:(0,f.K2)(t=>/^\s*radar-beta/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(6796)]).then(r.bind(r,76796));return{id:Zt,diagram:t}},"loader")},Jt="block",te={id:Jt,detector:(0,f.K2)(t=>/^\s*block-beta/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(4914)]).then(r.bind(r,54914));return{id:Jt,diagram:t}},"loader")},ee="architecture",re={id:ee,detector:(0,f.K2)(t=>/^\s*architecture/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(165),r.e(725)]).then(r.bind(r,90725));return{id:ee,diagram:t}},"loader")},ne="treemap",ie={id:ne,detector:(0,f.K2)(t=>/^\s*treemap/.test(t),"detector"),loader:(0,f.K2)(async()=>{const{diagram:t}=await Promise.all([r.e(3624),r.e(8731),r.e(5775)]).then(r.bind(r,45775));return{id:ne,diagram:t}},"loader")},ae=!1,oe=(0,f.K2)(()=>{ae||(ae=!0,(0,f.Js)("error",It,t=>"error"===t.toLowerCase().trim()),(0,f.Js)("---",{db:{clear:(0,f.K2)(()=>{},"clear")},styles:{},renderer:{draw:(0,f.K2)(()=>{},"draw")},parser:{parse:(0,f.K2)(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:(0,f.K2)(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),(0,f.Xd)(Pt,Wt,re),(0,f.Xd)(at,Ut,Bt,At,ht,ft,mt,yt,_t,St,ct,st,Kt,dt,Et,Ft,Ot,bt,Yt,Vt,kt,te,Qt,ie))},"addDiagrams"),se=(0,f.K2)(async()=>{f.Rm.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(f.mW).map(async([t,{detector:e,loader:r}])=>{if(r)try{(0,f.Gs)(t)}catch{try{const{diagram:t,id:n}=await r();(0,f.Js)(n,t,e)}catch(n){throw f.Rm.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete f.mW[t],n}}}))).filter(t=>"rejected"===t.status);if(t.length>0){f.Rm.error(`Failed to load ${t.length} external diagrams`);for(const e of t)f.Rm.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}},"loadRegisteredDiagrams");function le(t,e){t.attr("role","graphics-document document"),""!==e&&t.attr("aria-roledescription",e)}function ce(t,e,r,n){if(void 0!==t.insert){if(r){const e=`chart-desc-${n}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(r)}if(e){const r=`chart-title-${n}`;t.attr("aria-labelledby",r),t.insert("title",":first-child").attr("id",r).text(e)}}}(0,f.K2)(le,"setA11yDiagramInfo"),(0,f.K2)(ce,"addSVGa11yTitleDescription");var he=class t{constructor(t,e,r,n,i){this.type=t,this.text=e,this.db=r,this.parser=n,this.renderer=i}static{(0,f.K2)(this,"Diagram")}static async fromText(e,r={}){const n=(0,f.zj)(),i=(0,f.Ch)(e,n);e=(0,u.C4)(e)+"\n";try{(0,f.Gs)(i)}catch{const t=(0,f.J$)(i);if(!t)throw new f.C0(`Diagram ${i} not found.`);const{id:e,diagram:r}=await t();(0,f.Js)(e,r)}const{db:a,parser:o,renderer:s,init:l}=(0,f.Gs)(i);return o.parser&&(o.parser.yy=a),a.clear?.(),l?.(n),r.title&&a.setDiagramTitle?.(r.title),await o.parse(e),new t(i,e,a,o,s)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}},ue=[],de=(0,f.K2)(()=>{ue.forEach(t=>{t()}),ue=[]},"attachFunctions"),pe=(0,f.K2)(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");function fe(t){const e=t.match(f.EJ);if(!e)return{text:t,metadata:{}};let r=(0,l.H)(e[1],{schema:l.r})??{};r="object"!=typeof r||Array.isArray(r)?{}:r;const n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}(0,f.K2)(fe,"extractFrontMatter");var ge=(0,f.K2)(t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,(t,e,r)=>"<"+e+r.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),me=(0,f.K2)(t=>{const{text:e,metadata:r}=fe(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),ye=(0,f.K2)(t=>{const e=u._K.detectInit(t)??{},r=u._K.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:t})=>"wrap"===t):"wrap"===r?.type&&(e.wrap=!0),{text:(0,u.vU)(t),directive:e}},"processDirectives");function xe(t){const e=ge(t),r=me(e),n=ye(r.text),i=(0,u.$t)(r.config,n.directive);return{code:t=pe(n.text),title:r.title,config:i}}function be(t){const e=(new TextEncoder).encode(t),r=Array.from(e,t=>String.fromCodePoint(t)).join("");return btoa(r)}(0,f.K2)(xe,"preprocessDiagram"),(0,f.K2)(be,"toBase64");var Ce=["foreignobject"],ke=["dominant-baseline"];function we(t){const e=xe(t);return(0,f.cL)(),(0,f.xA)(e.config??{}),e}async function _e(t,e){oe();try{const{code:e,config:r}=we(t);return{diagramType:(await De(e)).type,config:r}}catch(r){if(e?.suppressErrors)return!1;throw r}}(0,f.K2)(we,"processAndSetConfigs"),(0,f.K2)(_e,"parse");var ve=(0,f.K2)((t,e,r=[])=>`\n.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),Se=(0,f.K2)((t,e=new Map)=>{let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){const n=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(t=>{(0,it.A)(t.styles)||n.forEach(e=>{r+=ve(t.id,e,t.styles)}),(0,it.A)(t.textStyles)||(r+=ve(t.id,"tspan",(t?.textStyles||[]).map(t=>t.replace("color","fill"))))})}return r},"createCssStyles"),Te=(0,f.K2)((t,e,r,n)=>{const i=Se(t,r);return B(Q(`${n}{${(0,f.tM)(e,i,t.themeVariables)}}`),L)},"createUserStyles"),Ae=(0,f.K2)((t="",e,r)=>{let n=t;return r||e||(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=(0,u.Sm)(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Me=(0,f.K2)((t="",e)=>``,"putIntoIFrame"),Be=(0,f.K2)((t,e,r,n,i)=>{const a=t.append("div");a.attr("id",r),n&&a.attr("style",n);const o=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return i&&o.attr("xmlns:xlink",i),o.append("g"),t},"appendDivSvgG");function Le(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}(0,f.K2)(Le,"sandboxedIframe");var Fe=(0,f.K2)((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),$e=(0,f.K2)(async function(t,e,r){oe();const n=we(e);e=n.code;const i=(0,f.zj)();f.Rm.debug(i),e.length>(i?.maxTextSize??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const a="#"+t,o="i"+t,s="#"+o,l="d"+t,c="#"+l,h=(0,f.K2)(()=>{const t=p?s:c,e=(0,m.Ltv)(t).node();e&&"remove"in e&&e.remove()},"removeTempElements");let u=(0,m.Ltv)("body");const p="sandbox"===i.securityLevel,g="loose"===i.securityLevel,y=i.fontFamily;if(void 0!==r){if(r&&(r.innerHTML=""),p){const t=Le((0,m.Ltv)(r),o);u=(0,m.Ltv)(t.nodes()[0].contentDocument.body),u.node().style.margin=0}else u=(0,m.Ltv)(r);Be(u,t,l,`font-family: ${y}`,"http://www.w3.org/1999/xlink")}else{if(Fe(document,t,l,o),p){const t=Le((0,m.Ltv)("body"),o);u=(0,m.Ltv)(t.nodes()[0].contentDocument.body),u.node().style.margin=0}else u=(0,m.Ltv)("body");Be(u,t,l)}let x,b;try{x=await he.fromText(e,{title:n.title})}catch(F){if(i.suppressErrorRendering)throw h(),F;x=await he.fromText("error"),b=F}const C=u.select(c).node(),k=x.type,w=C.firstChild,_=w.firstChild,v=x.renderer.getClasses?.(e,x),S=Te(i,k,v,a),T=document.createElement("style");T.innerHTML=S,w.insertBefore(T,_);try{await x.renderer.draw(e,t,d.n.version,x)}catch($){throw i.suppressErrorRendering?h():jt.draw(e,t,d.n.version),$}const A=u.select(`${c} svg`),M=x.db.getAccTitle?.(),B=x.db.getAccDescription?.();Oe(k,A,M,B),u.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let L=u.select(c).node().innerHTML;if(f.Rm.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),L=Ae(L,p,(0,f._3)(i.arrowMarkerAbsolute)),p){const t=u.select(c+" svg").node();L=Me(L,t)}else g||(L=nt.A.sanitize(L,{ADD_TAGS:Ce,ADD_ATTR:ke,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(de(),b)throw b;return h(),{diagramType:k,svg:L,bindFunctions:x.db.bindFunctions}},"render");function Ee(t={}){const e=(0,f.hH)({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),(0,f.wZ)(e),e?.theme&&e.theme in f.H$?e.themeVariables=f.H$[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=f.H$.default.getThemeVariables(e.themeVariables));const r="object"==typeof e?(0,f.UU)(e):(0,f.Q2)();(0,f.He)(r.logLevel),oe()}(0,f.K2)(Ee,"initialize");var De=(0,f.K2)((t,e={})=>{const{code:r}=xe(t);return he.fromText(r,e)},"getDiagramFromText");function Oe(t,e,r,n){le(e,t),ce(e,r,n,e.attr("id"))}(0,f.K2)(Oe,"addA11yInfo");var Ne=Object.freeze({render:$e,parse:_e,getDiagramFromText:De,initialize:Ee,getConfig:f.zj,setConfig:f.Nk,getSiteConfig:f.Q2,updateSiteConfig:f.B6,reset:(0,f.K2)(()=>{(0,f.cL)()},"reset"),globalReset:(0,f.K2)(()=>{(0,f.cL)(f.sb)},"globalReset"),defaultConfig:f.sb});(0,f.He)((0,f.zj)().logLevel),(0,f.cL)((0,f.zj)());var je=(0,f.K2)((t,e,r)=>{f.Rm.warn(t),(0,u.dq)(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Ie=(0,f.K2)(async function(t={querySelector:".mermaid"}){try{await Re(t)}catch(e){if((0,u.dq)(e)&&f.Rm.error(e.str),Ze.parseError&&Ze.parseError(e),!t.suppressErrors)throw f.Rm.error("Use the suppressErrors option to suppress these errors"),e}},"run"),Re=(0,f.K2)(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){const n=Ne.getConfig();let i;if(f.Rm.debug((t?"":"No ")+"Callback function found"),r)i=r;else{if(!e)throw new Error("Nodes and querySelector are both undefined");i=document.querySelectorAll(e)}f.Rm.debug(`Found ${i.length} diagrams`),void 0!==n?.startOnLoad&&(f.Rm.debug("Start On Load: "+n?.startOnLoad),Ne.updateSiteConfig({startOnLoad:n?.startOnLoad}));const a=new u._K.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let o;const s=[];for(const c of Array.from(i)){if(f.Rm.info("Rendering diagram: "+c.id),c.getAttribute("data-processed"))continue;c.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;o=c.innerHTML,o=(0,g.T)(u._K.entityDecode(o)).trim().replace(//gi,"
    ");const r=u._K.detectInit(o);r&&f.Rm.debug("Detected early reinit: ",r);try{const{svg:r,bindFunctions:n}=await Xe(e,o,c);c.innerHTML=r,t&&await t(e),n&&n(c)}catch(l){je(l,s,Ze.parseError)}}if(s.length>0)throw s[0]},"runThrowsErrors"),Pe=(0,f.K2)(function(t){Ne.initialize(t)},"initialize"),ze=(0,f.K2)(async function(t,e,r){f.Rm.warn("mermaid.init is deprecated. Please use run instead."),t&&Pe(t);const n={postRenderCallback:r,querySelector:".mermaid"};"string"==typeof e?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await Ie(n)},"init"),Ke=(0,f.K2)(async(t,{lazyLoad:e=!0}={})=>{oe(),(0,f.Xd)(...t),!1===e&&await se()},"registerExternalDiagrams"),qe=(0,f.K2)(function(){if(Ze.startOnLoad){const{startOnLoad:t}=Ne.getConfig();t&&Ze.run().catch(t=>f.Rm.error("Mermaid failed to initialize",t))}},"contentLoaded");"undefined"!=typeof document&&window.addEventListener("load",qe,!1);var We=(0,f.K2)(function(t){Ze.parseError=t},"setParseErrorHandler"),He=[],Ue=!1,Ge=(0,f.K2)(async()=>{if(!Ue){for(Ue=!0;He.length>0;){const e=He.shift();if(e)try{await e()}catch(t){f.Rm.error("Error executing queue",t)}}Ue=!1}},"executeQueue"),Ye=(0,f.K2)(async(t,e)=>new Promise((r,n)=>{const i=(0,f.K2)(()=>new Promise((i,a)=>{Ne.parse(t,e).then(t=>{i(t),r(t)},t=>{f.Rm.error("Error parsing",t),Ze.parseError?.(t),a(t),n(t)})}),"performCall");He.push(i),Ge().catch(n)}),"parse"),Xe=(0,f.K2)((t,e,r)=>new Promise((n,i)=>{const a=(0,f.K2)(()=>new Promise((a,o)=>{Ne.render(t,e,r).then(t=>{a(t),n(t)},t=>{f.Rm.error("Error parsing",t),Ze.parseError?.(t),o(t),i(t)})}),"performCall");He.push(a),Ge().catch(i)}),"render"),Ve=(0,f.K2)(()=>Object.keys(f.mW).map(t=>({id:t})),"getRegisteredDiagramsMetadata"),Ze={startOnLoad:!0,mermaidAPI:Ne,parse:Ye,render:Xe,init:ze,run:Ie,registerExternalDiagrams:Ke,registerLayoutLoaders:c.sO,initialize:Pe,parseError:void 0,contentLoaded:qe,setParseErrorHandler:We,detectType:f.Ch,registerIconPacks:h.pC,getRegisteredDiagramsMetadata:Ve},Qe=Ze;const Je="docusaurus-mermaid-container";function tr(){const{colorMode:t}=(0,s.G)(),e=(0,o.p)().mermaid,r=e.theme[t],{options:i}=e;return(0,n.useMemo)(()=>({startOnLoad:!1,...i,theme:r}),[r,i])}function er({text:t,config:e}){const[r,i]=(0,n.useState)(null),a=(0,n.useState)(`mermaid-svg-${Math.round(1e7*Math.random())}`)[0],o=tr(),s=e??o;return(0,n.useEffect)(()=>{(async function({id:t,text:e,config:r}){Qe.mermaidAPI.initialize(r);try{return await Qe.render(t,e)}catch(n){throw document.querySelector(`#d${t}`)?.remove(),n}})({id:a,text:t,config:s}).then(i).catch(t=>{i(()=>{throw t})})},[a,t,s]),r}const rr={container:"container_lyt7"};var nr=r(74848);function ir({renderResult:t}){const e=(0,n.useRef)(null);return(0,n.useEffect)(()=>{const r=e.current;t.bindFunctions?.(r)},[t]),(0,nr.jsx)("div",{ref:e,className:`${Je} ${rr.container}`,dangerouslySetInnerHTML:{__html:t.svg}})}function ar({value:t}){const e=er({text:t});return null===e?null:(0,nr.jsx)(ir,{renderResult:e})}function or(t){return(0,nr.jsx)(i.default,{fallback:t=>(0,nr.jsx)(a.MN,{...t}),children:(0,nr.jsx)(ar,{...t})})}},50565:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={root:"root_UH70",tags:"tags_LT8x",tag:"tag_NdBD"}},51715:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(97795)),o=n(r(34559)),s=n(r(21893));e.default=function(t){return(0,i.jsx)(i.Fragment,{children:(0,i.jsx)(a.default,{...t,className:(0,o.default)(t.className,s.default.codeBlockContainer)})})}},51789:(t,e,r)=>{"use strict";r.d(e,{IU:()=>y,Jo:()=>M,T_:()=>k,g0:()=>F,jP:()=>b});var n=r(30070),i=r(66906),a=r(28823),o=r(55683),s=r(68506),l=r(46792),c=r(41750),h=r(70451),u=r(29893),d=(0,c.K2)((t,e,r,n,i,a)=>{e.arrowTypeStart&&f(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&f(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),p={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},f=(0,c.K2)((t,e,r,n,i,a,o)=>{const s=p[r];if(!s)return void c.Rm.warn(`Unknown arrow type: ${r}`);const l=`${i}_${a}-${s.type}${"start"===e?"Start":"End"}`;if(o&&""!==o.trim()){const r=`${l}_${o.replace(/[^\dA-Za-z]/g,"_")}`;if(!document.getElementById(r)){const t=document.getElementById(l);if(t){const e=t.cloneNode(!0);e.id=r;e.querySelectorAll("path, circle, line").forEach(t=>{t.setAttribute("stroke",o),s.fill&&t.setAttribute("fill",o)}),t.parentNode?.appendChild(e)}}t.attr(`marker-${e}`,`url(${n}#${r})`)}else t.attr(`marker-${e}`,`url(${n}#${l})`)},"addEdgeMarker"),g=new Map,m=new Map,y=(0,c.K2)(()=>{g.clear(),m.clear()},"clear"),x=(0,c.K2)(t=>t?t.reduce((t,e)=>t+";"+e,""):"","getLabelStyles"),b=(0,c.K2)(async(t,e)=>{let r=(0,c._3)((0,c.D7)().flowchart.htmlLabels);const n=await(0,s.GZ)(t,e.label,{style:x(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});c.Rm.info("abc82",e,e.labelType);const a=t.insert("g").attr("class","edgeLabel"),o=a.insert("g").attr("class","label");o.node().appendChild(n);let l,u=n.getBBox();if(r){const t=n.children[0],e=(0,h.Ltv)(n);u=t.getBoundingClientRect(),e.attr("width",u.width),e.attr("height",u.height)}if(o.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),g.set(e.id,a),e.width=u.width,e.height=u.height,e.startLabelLeft){const r=await(0,i.DA)(e.startLabelLeft,x(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");l=a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),m.get(e.id)||m.set(e.id,{}),m.get(e.id).startLeft=n,C(l,e.startLabelLeft)}if(e.startLabelRight){const r=await(0,i.DA)(e.startLabelRight,x(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");l=n.node().appendChild(r),a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),m.get(e.id)||m.set(e.id,{}),m.get(e.id).startRight=n,C(l,e.startLabelRight)}if(e.endLabelLeft){const r=await(0,i.DA)(e.endLabelLeft,x(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");l=a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),n.node().appendChild(r),m.get(e.id)||m.set(e.id,{}),m.get(e.id).endLeft=n,C(l,e.endLabelLeft)}if(e.endLabelRight){const r=await(0,i.DA)(e.endLabelRight,x(e.labelStyle)),n=t.insert("g").attr("class","edgeTerminals"),a=n.insert("g").attr("class","inner");l=a.node().appendChild(r);const o=r.getBBox();a.attr("transform","translate("+-o.width/2+", "+-o.height/2+")"),n.node().appendChild(r),m.get(e.id)||m.set(e.id,{}),m.get(e.id).endRight=n,C(l,e.endLabelRight)}return n},"insertEdgeLabel");function C(t,e){(0,c.D7)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}(0,c.K2)(C,"setTerminalWidth");var k=(0,c.K2)((t,e)=>{c.Rm.debug("Moving label abc88 ",t.id,t.label,g.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath;const n=(0,c.D7)(),{subGraphTitleTotalMargin:i}=(0,a.O)(n);if(t.label){const n=g.get(t.id);let a=t.x,o=t.y;if(r){const n=l._K.calcLabelPosition(r);c.Rm.debug("Moving label "+t.label+" from (",a,",",o,") to (",n.x,",",n.y,") abc88"),e.updatedPath&&(a=n.x,o=n.y)}n.attr("transform",`translate(${a}, ${o+i/2})`)}if(t.startLabelLeft){const e=m.get(t.id).startLeft;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.startLabelRight){const e=m.get(t.id).startRight;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelLeft){const e=m.get(t.id).endLeft;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelRight){const e=m.get(t.id).endRight;let n=t.x,i=t.y;if(r){const e=l._K.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}},"positionEdgeLabel"),w=(0,c.K2)((t,e)=>{const r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),o=t.width/2,s=t.height/2;return i>=o||a>=s},"outsideNode"),_=(0,c.K2)((t,e,r)=>{c.Rm.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(r)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,a=Math.abs(n-r.x),o=t.width/2;let s=r.xMath.abs(n-e.x)*l){let t=r.y{c.Rm.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(t=>{if(c.Rm.info("abc88 checking point",t,e),w(e,t)||i)c.Rm.warn("abc88 outside",t,n),n=t,i||r.push(t);else{const a=_(e,n,t);c.Rm.debug("abc88 inside",t,n,a),c.Rm.debug("abc88 intersection",a,e);let o=!1;r.forEach(t=>{o=o||t.x===a.x&&t.y===a.y}),r.some(t=>t.x===a.x&&t.y===a.y)?c.Rm.warn("abc88 no intersect",a,r):r.push(a),i=!0}}),c.Rm.debug("returning points",r),r},"cutPathAtIntersect");function S(t){const e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===o.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-o.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}(0,c.K2)(S,"extractCornerPoints");var T=(0,c.K2)(function(t,e,r){const n=e.x-t.x,i=e.y-t.y,a=r/Math.sqrt(n*n+i*i);return{x:e.x-a*n,y:e.y-a*i}},"findAdjacentPoint"),A=(0,c.K2)(function(t){const{cornerPointPositions:e}=S(t),r=[];for(let n=0;n10&&Math.abs(i.y-e.y)>=10){c.Rm.debug("Corner point fixing",Math.abs(i.x-e.x),Math.abs(i.y-e.y));const t=5;d=a.x===o.x?{x:l<0?o.x-t+u:o.x+t-u,y:h<0?o.y-u:o.y+u}:{x:l<0?o.x-u:o.x+u,y:h<0?o.y-t+u:o.y+t-u}}else c.Rm.debug("Corner point skipping fixing",Math.abs(i.x-e.x),Math.abs(i.y-e.y));r.push(d,s)}else r.push(t[n]);return r},"fixCorners"),M=(0,c.K2)(function(t,e,r,i,a,s,l){const{handDrawnSeed:p}=(0,c.D7)();let f=e.points,g=!1;const m=a;var y=s;const x=[];for(const n in e.cssCompiledStyles)(0,o.KX)(n)||x.push(e.cssCompiledStyles[n]);y.intersect&&m.intersect&&(f=f.slice(1,e.points.length-1),f.unshift(m.intersect(f[0])),c.Rm.debug("Last point APA12",e.start,"--\x3e",e.end,f[f.length-1],y,y.intersect(f[f.length-1])),f.push(y.intersect(f[f.length-1]))),e.toCluster&&(c.Rm.info("to cluster abc88",r.get(e.toCluster)),f=v(e.points,r.get(e.toCluster).node),g=!0),e.fromCluster&&(c.Rm.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(f,null,2)),f=v(f.reverse(),r.get(e.fromCluster).node).reverse(),g=!0);let b=f.filter(t=>!Number.isNaN(t.y));b=A(b);let C=h.qrM;switch(C=h.lUB,e.curve){case"linear":C=h.lUB;break;case"basis":default:C=h.qrM;break;case"cardinal":C=h.y8u;break;case"bumpX":C=h.Wi0;break;case"bumpY":C=h.PGM;break;case"catmullRom":C=h.oDi;break;case"monotoneX":C=h.nVG;break;case"monotoneY":C=h.uxU;break;case"natural":C=h.Xf2;break;case"step":C=h.GZz;break;case"stepAfter":C=h.UPb;break;case"stepBefore":C=h.dyv}const{x:k,y:w}=(0,n.R)(e),_=(0,h.n8j)().x(k).y(w).curve(C);let S,T;switch(e.thickness){case"normal":default:S="edge-thickness-normal";break;case"thick":S="edge-thickness-thick";break;case"invisible":S="edge-thickness-invisible"}switch(e.pattern){case"solid":default:S+=" edge-pattern-solid";break;case"dotted":S+=" edge-pattern-dotted";break;case"dashed":S+=" edge-pattern-dashed"}let M=_(b);const B=Array.isArray(e.style)?e.style:e.style?[e.style]:[];let L=B.find(t=>t?.startsWith("stroke:"));if("handDrawn"===e.look){const r=u.A.svg(t);Object.assign([],b);const n=r.path(M,{roughness:.3,seed:p});S+=" transition",T=(0,h.Ltv)(n).select("path").attr("id",e.id).attr("class"," "+S+(e.classes?" "+e.classes:"")).attr("style",B?B.reduce((t,e)=>t+";"+e,""):"");let i=T.attr("d");T.attr("d",i),t.node().appendChild(T.node())}else{const r=x.join(";"),n=B?B.reduce((t,e)=>t+e+";",""):"";let i="";e.animate&&(i=" edge-animation-fast"),e.animation&&(i=" edge-animation-"+e.animation);const a=r?r+";"+n+";":n;T=t.append("path").attr("d",M).attr("id",e.id).attr("class"," "+S+(e.classes?" "+e.classes:"")+(i??"")).attr("style",a),L=a.match(/stroke:([^;]+)/)?.[1]}let F="";((0,c.D7)().flowchart.arrowMarkerAbsolute||(0,c.D7)().state.arrowMarkerAbsolute)&&(F=(0,c.ID)(!0)),c.Rm.info("arrowTypeStart",e.arrowTypeStart),c.Rm.info("arrowTypeEnd",e.arrowTypeEnd),d(T,e,F,l,i,L);let $={};return g&&($.updatedPath=f),$.originalPath=e.points,$},"insertEdge"),B=(0,c.K2)((t,e,r,n)=>{e.forEach(e=>{L[e](t,r,n)})},"insertMarkers"),L={extension:(0,c.K2)((t,e,r)=>{c.Rm.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),composition:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),aggregation:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),dependency:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),lollipop:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),point:(0,c.K2)((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),circle:(0,c.K2)((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),cross:(0,c.K2)((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),barb:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),only_one:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),zero_or_one:(0,c.K2)((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");const i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),one_or_more:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),zero_or_more:(0,c.K2)((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");const i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),requirement_arrow:(0,c.K2)((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d","M0,0\n L20,10\n M20,10\n L0,20")},"requirement_arrow"),requirement_contains:(0,c.K2)((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains")},F=B},51878:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>m});r(96540);var n=r(34164),i=r(44586),a=r(28774),o=r(21312),s=r(23908),l=r(17559),c=r(53886),h=r(23025),u=r(74848);const d={unreleased:function({siteTitle:t,versionMetadata:e}){return(0,u.jsx)(o.default,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:e.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:t,versionMetadata:e}){return(0,u.jsx)(o.default,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:e.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function p(t){const e=d[t.versionMetadata.banner];return(0,u.jsx)(e,{...t})}function f({versionLabel:t,to:e,onClick:r}){return(0,u.jsx)(o.default,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(a.default,{to:e,onClick:r,children:(0,u.jsx)(o.default,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function g({className:t,versionMetadata:e}){const{siteConfig:{title:r}}=(0,i.default)(),{pluginId:a}=(0,s.useActivePlugin)({failfast:!0}),{savePreferredVersionName:o}=(0,c.g1)(a),{latestDocSuggestion:h,latestVersionSuggestion:d}=(0,s.useDocVersionSuggestions)(a),g=h??(m=d).docs.find(t=>t.id===m.mainDocId);var m;return(0,u.jsxs)("div",{className:(0,n.A)(t,l.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(p,{siteTitle:r,versionMetadata:e})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(f,{versionLabel:d.label,to:g.path,onClick:()=>o(d.name)})})]})}function m({className:t}){const e=(0,h.useDocsVersion)();return e.banner?(0,u.jsx)(g,{className:t,versionMetadata:e}):null}},52274:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(88496),i=r(53098);const a=function(t){return(0,i.A)(t)&&"[object Arguments]"==(0,n.A)(t)};var o=Object.prototype,s=o.hasOwnProperty,l=o.propertyIsEnumerable;const c=a(function(){return arguments}())?a:function(t){return(0,i.A)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},52528:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(84171);const i=function(t,e,r){"__proto__"==e&&n.A?(0,n.A)(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},52569:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=n(r(28774)),s=n(r(85827)),l=r(97481);e.default=function({permalink:t,label:e,count:r}){return(0,i.jsx)(o.default,{href:t,className:(0,a.default)(r?s.default.tagWithCount:s.default.tagRegular),children:(0,i.jsxs)(l.Tag,{disabled:!1,size:"small",children:[e,r&&(0,i.jsx)("span",{children:r})]})})}},52789:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return function(e){return t(e)}}},52851:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(52528),i=r(66984),a=Object.prototype.hasOwnProperty;const o=function(t,e,r){var o=t[e];a.call(t,e)&&(0,i.A)(o,r)&&(void 0!==r||e in t)||(0,n.A)(t,e,r)}},53098:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t){return null!=t&&"object"==typeof t}},53533:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(38446),i=r(53098);const a=function(t){return(0,i.A)(t)&&(0,n.A)(t)}},55615:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});var n=r(83607),i=r(23149),a=r(97271);const o=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,i.A)(t))return o(t);var e=(0,a.A)(t),r=[];for(var n in t)("constructor"!=n||!e&&s.call(t,n))&&r.push(n);return r};var c=r(38446);const h=function(t){return(0,c.A)(t)?(0,n.A)(t,!0):l(t)}},55683:(t,e,r)=>{"use strict";r.d(e,{Fr:()=>c,GX:()=>l,KX:()=>s,WW:()=>a,ue:()=>i});var n=r(41750),i=(0,n.K2)(t=>{const{handDrawnSeed:e}=(0,n.D7)();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),a=(0,n.K2)(t=>{const e=o([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),o=(0,n.K2)(t=>{const e=new Map;return t.forEach(t=>{const[r,n]=t.split(":");e.set(r.trim(),n?.trim())}),e},"styles2Map"),s=(0,n.K2)(t=>"color"===t||"font-size"===t||"font-family"===t||"font-weight"===t||"font-style"===t||"text-decoration"===t||"text-align"===t||"text-transform"===t||"line-height"===t||"letter-spacing"===t||"word-spacing"===t||"text-shadow"===t||"text-overflow"===t||"white-space"===t||"word-wrap"===t||"word-break"===t||"overflow-wrap"===t||"hyphens"===t,"isLabelStyle"),l=(0,n.K2)(t=>{const{stylesArray:e}=a(t),r=[],n=[],i=[],o=[];return e.forEach(t=>{const e=t[0];s(e)?r.push(t.join(":")+" !important"):(n.push(t.join(":")+" !important"),e.includes("stroke")&&i.push(t.join(":")+" !important"),"fill"===e&&o.push(t.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:o}},"styles2String"),c=(0,n.K2)((t,e)=>{const{themeVariables:r,handDrawnSeed:i}=(0,n.D7)(),{nodeBorder:o,mainBkg:s}=r,{stylesMap:l}=a(t);return Object.assign({roughness:.7,fill:l.get("fill")||s,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:l.get("stroke")||o,seed:i,strokeWidth:l.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")},59667:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);i&&!("get"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return i(e,t),e};Object.defineProperty(e,"__esModule",{value:!0}),e.useMDXEnhancementElements=e.MDXEnhancementContext=void 0;const o=a(r(96540));e.MDXEnhancementContext=o.default.createContext({items:[]});e.useMDXEnhancementElements=(t,r,n)=>{const i=(0,o.useContext)(e.MDXEnhancementContext);return i?(0,o.useMemo)(()=>i.items.filter(e=>e.component===t&&e.position===r).map(t=>t.render(n)),[t,r,n]):[]}},60513:(t,e,r)=>{"use strict";function n(t){for(var e=[],r=1;rn})},63122:(t,e,r)=>{"use strict";r.d(e,{Y:()=>i,Z:()=>a});var n=r(72453);const i={};for(let o=0;o<=255;o++)i[o]=n.A.unit.dec2hex(o);const a={ALL:0,RGB:1,HSL:2}},64157:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>o});r(96540);var n=r(45500),i=r(60542),a=r(74848);function o(){const{metadata:t,frontMatter:e,assets:r}=(0,i.useDoc)();return(0,a.jsx)(n.be,{title:t.title,description:t.description,keywords:e.keywords,image:r.image??e.image})}},64841:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(72136),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,o=a&&a.exports===i&&n.A.process;const s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(e){}}()},66401:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(69471),i=r(9779),a=r(52274),o=r(92049),s=r(38446),l=r(99912),c=r(97271),h=r(33858),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.A)(t)&&((0,o.A)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.A)(t)||(0,h.A)(t)||(0,a.A)(t)))return!t.length;var e=(0,i.A)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.A)(t))return!(0,n.A)(t).length;for(var r in t)if(u.call(t,r))return!1;return!0}},66906:(t,e,r)=>{"use strict";r.d(e,{DA:()=>C,IU:()=>B,U:()=>M,U7:()=>ke,U_:()=>_e,Zk:()=>h,aP:()=>xe,gh:()=>we,lC:()=>d,on:()=>Ce});var n=r(28823),i=r(55683),a=r(68506),o=r(46792),s=r(41750),l=r(70451),c=r(29893),h=(0,s.K2)(async(t,e,r)=>{let n;const i=e.useHtmlLabels||(0,s._3)((0,s.D7)()?.htmlLabels);n=r||"node default";const c=t.insert("g").attr("class",n).attr("id",e.domId||e.id),h=c.insert("g").attr("class","label").attr("style",(0,o.KL)(e.labelStyle));let u;u=void 0===e.label?"":"string"==typeof e.label?e.label:e.label[0];const d=await(0,a.GZ)(h,(0,s.jZ)((0,o.Sm)(u),(0,s.D7)()),{useHtmlLabels:i,width:e.width||(0,s.D7)().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img});let p=d.getBBox();const f=(e?.padding??0)/2;if(i){const t=d.children[0],e=(0,l.Ltv)(d),r=t.getElementsByTagName("img");if(r){const t=""===u.replace(/]*>/g,"").trim();await Promise.all([...r].map(e=>new Promise(r=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,s.D7)().fontSize?(0,s.D7)().fontSize:window.getComputedStyle(document.body).fontSize,r=5,[n=s.UI.fontSize]=(0,o.I5)(t),i=n*r+"px";e.style.minWidth=i,e.style.maxWidth=i}else e.style.width="100%";r(e)}(0,s.K2)(n,"setupImage"),setTimeout(()=>{e.complete&&n()}),e.addEventListener("error",n),e.addEventListener("load",n)})))}p=t.getBoundingClientRect(),e.attr("width",p.width),e.attr("height",p.height)}return i?h.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):h.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&h.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),h.insert("rect",":first-child"),{shapeSvg:c,bbox:p,halfPadding:f,label:h}},"labelHelper"),u=(0,s.K2)(async(t,e,r)=>{const n=r.useHtmlLabels||(0,s._3)((0,s.D7)()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),c=await(0,a.GZ)(i,(0,s.jZ)((0,o.Sm)(e),(0,s.D7)()),{useHtmlLabels:n,width:r.width||(0,s.D7)()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img});let h=c.getBBox();const u=r.padding/2;if((0,s._3)((0,s.D7)()?.flowchart?.htmlLabels)){const t=c.children[0],e=(0,l.Ltv)(c);h=t.getBoundingClientRect(),e.attr("width",h.width),e.attr("height",h.height)}return n?i.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):i.attr("transform","translate(0, "+-h.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:h,halfPadding:u,label:i}},"insertLabel"),d=(0,s.K2)((t,e)=>{const r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),p=(0,s.K2)((t,e)=>("handDrawn"===t.look?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");function f(t){const e=t.map((t,e)=>`${0===e?"M":"L"}${t.x},${t.y}`);return e.push("Z"),e.join(" ")}function g(t,e,r,n,i,a){const o=[],s=r-t,l=n-e,c=s/a,h=2*Math.PI/c,u=e+l/2;for(let d=0;d<=50;d++){const e=t+d/50*s,r=u+i*Math.sin(h*(e-t));o.push({x:e,y:r})}return o}function m(t,e,r,n,i,a){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;c{var r,n,i=t.x,a=t.y,o=e.x-i,s=e.y-a,l=t.width/2,c=t.height/2;return Math.abs(s)*l>Math.abs(o)*c?(s<0&&(c=-c),r=0===s?0:c*o/s,n=c):(o<0&&(l=-l),r=l,n=0===o?0:l*s/o),{x:i+r,y:a+n}},"intersectRect");function x(t,e){e&&t.attr("style",e)}async function b(t){const e=(0,l.Ltv)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div");let n=t.label;t.label&&(0,s.Wi)(t.label)&&(n=await(0,s.VJ)(t.label.replace(s.Y2.lineBreakRegex,"\n"),(0,s.D7)()));const i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),x(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}(0,s.K2)(x,"applyStyle"),(0,s.K2)(b,"addHtmlLabel");var C=(0,s.K2)(async(t,e,r,n)=>{let i=t||"";if("object"==typeof i&&(i=i[0]),(0,s._3)((0,s.D7)().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),s.Rm.info("vertexText"+i);const t={isNode:n,label:(0,o.Sm)(i).replace(/fa[blrs]?:fa-[\w-]+/g,t=>``),labelStyle:e?e.replace("fill:","color:"):e};return await b(t)}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let n=[];n="string"==typeof i?i.split(/\\n|\n|/gi):Array.isArray(i)?i:[];for(const e of n){const n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),r?n.setAttribute("class","title-row"):n.setAttribute("class","row"),n.textContent=e.trim(),t.appendChild(n)}return t}},"createLabel"),k=(0,s.K2)((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD"),w=(0,s.K2)(async(t,e)=>{s.Rm.info("Creating subgraph rect for ",e.id,e);const r=(0,s.D7)(),{themeVariables:o,handDrawnSeed:h}=r,{clusterBkg:u,clusterBorder:d}=o,{labelStyles:p,nodeStyles:f,borderStyles:g,backgroundStyles:m}=(0,i.GX)(e),x=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),b=(0,s._3)(r.flowchart.htmlLabels),C=x.insert("g").attr("class","cluster-label "),w=await(0,a.GZ)(C,e.label,{style:e.labelStyle,useHtmlLabels:b,isNode:!0});let _=w.getBBox();if((0,s._3)(r.flowchart.htmlLabels)){const t=w.children[0],e=(0,l.Ltv)(w);_=t.getBoundingClientRect(),e.attr("width",_.width),e.attr("height",_.height)}const v=e.width<=_.width+e.padding?_.width+e.padding:e.width;e.width<=_.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;const S=e.height,T=e.x-v/2,A=e.y-S/2;let M;if(s.Rm.trace("Data ",e,JSON.stringify(e)),"handDrawn"===e.look){const t=c.A.svg(x),r=(0,i.Fr)(e,{roughness:.7,fill:u,stroke:d,fillWeight:3,seed:h}),n=t.path(k(T,A,v,S,0),r);M=x.insert(()=>(s.Rm.debug("Rough node insert CXC",n),n),":first-child"),M.select("path:nth-child(2)").attr("style",g.join(";")),M.select("path").attr("style",m.join(";").replace("fill","stroke"))}else M=x.insert("rect",":first-child"),M.attr("style",f).attr("rx",e.rx).attr("ry",e.ry).attr("x",T).attr("y",A).attr("width",v).attr("height",S);const{subGraphTitleTopMargin:B}=(0,n.O)(r);if(C.attr("transform",`translate(${e.x-_.width/2}, ${e.y-e.height/2+B})`),p){const t=C.select("span");t&&t.attr("style",p)}const L=M.node().getBBox();return e.offsetX=0,e.width=L.width,e.height=L.height,e.offsetY=_.height-e.padding/2,e.intersect=function(t){return y(e,t)},{cluster:x,labelBBox:_}},"rect"),_=(0,s.K2)((t,e)=>{const r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");const o=n.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return y(e,t)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),v=(0,s.K2)(async(t,e)=>{const r=(0,s.D7)(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:o,compositeTitleBackground:h,nodeBorder:u}=n,d=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),p=d.insert("g",":first-child"),f=d.insert("g").attr("class","cluster-label");let g=d.append("rect");const m=f.node().appendChild(await C(e.label,e.labelStyle,void 0,!0));let x=m.getBBox();if((0,s._3)(r.flowchart.htmlLabels)){const t=m.children[0],e=(0,l.Ltv)(m);x=t.getBoundingClientRect(),e.attr("width",x.width),e.attr("height",x.height)}const b=0*e.padding,w=b/2,_=(e.width<=x.width+e.padding?x.width+e.padding:e.width)+b;e.width<=x.width+e.padding?e.diff=(_-e.width)/2-e.padding:e.diff=-e.padding;const v=e.height+b,S=e.height+b-x.height-6,T=e.x-_/2,A=e.y-v/2;e.width=_;const M=e.y-e.height/2-w+x.height+2;let B;if("handDrawn"===e.look){const t=e.cssClasses.includes("statediagram-cluster-alt"),r=c.A.svg(d),n=e.rx||e.ry?r.path(k(T,A,_,v,10),{roughness:.7,fill:h,fillStyle:"solid",stroke:u,seed:i}):r.rectangle(T,A,_,v,{seed:i});B=d.insert(()=>n,":first-child");const s=r.rectangle(T,M,_,S,{fill:t?a:o,fillStyle:t?"hachure":"solid",stroke:u,seed:i});B=d.insert(()=>n,":first-child"),g=d.insert(()=>s)}else{B=p.insert("rect",":first-child");const t="outer";B.attr("class",t).attr("x",T).attr("y",A).attr("width",_).attr("height",v).attr("data-look",e.look),g.attr("class","inner").attr("x",T).attr("y",M).attr("width",_).attr("height",S)}f.attr("transform",`translate(${e.x-x.width/2}, ${A+1-((0,s._3)(r.flowchart.htmlLabels)?0:3)})`);const L=B.node().getBBox();return e.height=L.height,e.offsetX=0,e.offsetY=x.height-e.padding/2,e.labelBBox=x,e.intersect=function(t){return y(e,t)},{cluster:d,labelBBox:x}},"roundedWithTitle"),S=(0,s.K2)(async(t,e)=>{s.Rm.info("Creating subgraph rect for ",e.id,e);const r=(0,s.D7)(),{themeVariables:o,handDrawnSeed:h}=r,{clusterBkg:u,clusterBorder:d}=o,{labelStyles:p,nodeStyles:f,borderStyles:g,backgroundStyles:m}=(0,i.GX)(e),x=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),b=(0,s._3)(r.flowchart.htmlLabels),C=x.insert("g").attr("class","cluster-label "),w=await(0,a.GZ)(C,e.label,{style:e.labelStyle,useHtmlLabels:b,isNode:!0,width:e.width});let _=w.getBBox();if((0,s._3)(r.flowchart.htmlLabels)){const t=w.children[0],e=(0,l.Ltv)(w);_=t.getBoundingClientRect(),e.attr("width",_.width),e.attr("height",_.height)}const v=e.width<=_.width+e.padding?_.width+e.padding:e.width;e.width<=_.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;const S=e.height,T=e.x-v/2,A=e.y-S/2;let M;if(s.Rm.trace("Data ",e,JSON.stringify(e)),"handDrawn"===e.look){const t=c.A.svg(x),r=(0,i.Fr)(e,{roughness:.7,fill:u,stroke:d,fillWeight:4,seed:h}),n=t.path(k(T,A,v,S,e.rx),r);M=x.insert(()=>(s.Rm.debug("Rough node insert CXC",n),n),":first-child"),M.select("path:nth-child(2)").attr("style",g.join(";")),M.select("path").attr("style",m.join(";").replace("fill","stroke"))}else M=x.insert("rect",":first-child"),M.attr("style",f).attr("rx",e.rx).attr("ry",e.ry).attr("x",T).attr("y",A).attr("width",v).attr("height",S);const{subGraphTitleTopMargin:B}=(0,n.O)(r);if(C.attr("transform",`translate(${e.x-_.width/2}, ${e.y-e.height/2+B})`),p){const t=C.select("span");t&&t.attr("style",p)}const L=M.node().getBBox();return e.offsetX=0,e.width=L.width,e.height=L.height,e.offsetY=_.height-e.padding/2,e.intersect=function(t){return y(e,t)},{cluster:x,labelBBox:_}},"kanbanSection"),T={rect:w,squareRect:w,roundedWithTitle:v,noteGroup:_,divider:(0,s.K2)((t,e)=>{const r=(0,s.D7)(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,o=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=o.insert("g",":first-child"),h=0*e.padding,u=e.width+h;e.diff=-e.padding;const d=e.height+h,p=e.x-u/2,f=e.y-d/2;let g;if(e.width=u,"handDrawn"===e.look){const t=c.A.svg(o).rectangle(p,f,u,d,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});g=o.insert(()=>t,":first-child")}else{g=l.insert("rect",":first-child");const t="divider";g.attr("class",t).attr("x",p).attr("y",f).attr("width",u).attr("height",d).attr("data-look",e.look)}const m=g.node().getBBox();return e.height=m.height,e.offsetX=0,e.offsetY=0,e.intersect=function(t){return y(e,t)},{cluster:o,labelBBox:{}}},"divider"),kanbanSection:S},A=new Map,M=(0,s.K2)(async(t,e)=>{const r=e.shape||"rect",n=await T[r](t,e);return A.set(e.id,n),n},"insertCluster"),B=(0,s.K2)(()=>{A=new Map},"clear");function L(t,e){return t.intersect(e)}(0,s.K2)(L,"intersectNode");var F=L;function $(t,e,r,n){var i=t.x,a=t.y,o=i-n.x,s=a-n.y,l=Math.sqrt(e*e*s*s+r*r*o*o),c=Math.abs(e*r*o/l);n.x0}(0,s.K2)(N,"intersectLine"),(0,s.K2)(j,"sameSign");var I=N;function R(t,e,r){let n=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach(function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)}):(o=Math.min(o,e.x),s=Math.min(s,e.y));let l=n-t.width/2-o,c=i-t.height/2-s;for(let h=0;h1&&a.sort(function(t,e){let n=t.x-r.x,i=t.y-r.y,a=Math.sqrt(n*n+i*i),o=e.x-r.x,s=e.y-r.y,l=Math.sqrt(o*o+s*s);return ag,":first-child");return m.attr("class","anchor").attr("style",(0,o.KL)(h)),d(e,m),e.intersect=function(t){return s.Rm.info("Circle intersect",e,1,t),P.circle(e,1,t)},l}function K(t,e,r,n,i,a,o){const s=(t+r)/2,l=(e+n)/2,c=Math.atan2(n-e,r-t),h=(r-t)/2/i,u=(n-e)/2/a,d=Math.sqrt(h**2+u**2);if(d>1)throw new Error("The given radii are too small to create an arc between the points.");const p=Math.sqrt(1-d**2),f=s+p*a*Math.sin(c)*(o?-1:1),g=l-p*i*Math.cos(c)*(o?-1:1),m=Math.atan2((e-g)/a,(t-f)/i);let y=Math.atan2((n-g)/a,(r-f)/i)-m;o&&y<0&&(y+=2*Math.PI),!o&&y>0&&(y-=2*Math.PI);const x=[];for(let b=0;b<20;b++){const t=m+b/19*y,e=f+i*Math.cos(t),r=g+a*Math.sin(t);x.push({x:e,y:r})}return x}async function q(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=o.width+e.padding+20,l=o.height+e.padding,u=l/2,g=u/(2.5+l/50),{cssStyles:m}=e,y=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...K(-s/2,-l/2,-s/2,l/2,g,u,!1),{x:s/2,y:l/2},...K(s/2,l/2,s/2,-l/2,g,u,!0)],x=c.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=f(y),k=x.path(C,b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),m&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),w.attr("transform",`translate(${g/2}, 0)`),d(e,w),e.intersect=function(t){return P.polygon(e,y,t)},a}function W(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(t){return t.x+","+t.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}async function H(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=o.height+e.padding,l=o.width+e.padding+12,u=-s,g=[{x:12,y:u},{x:l,y:u},{x:l,y:0},{x:0,y:0},{x:0,y:u+12},{x:12,y:u}];let m;const{cssStyles:y}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=f(g),o=t.path(n,r);m=a.insert(()=>o,":first-child").attr("transform",`translate(${-l/2}, ${s/2})`),y&&m.attr("style",y)}else m=W(a,l,s,g);return n&&m.attr("style",n),d(e,m),e.intersect=function(t){return P.polygon(e,g,t)},a}function U(t,e){const{nodeStyles:r}=(0,i.GX)(e);e.label="";const n=t.insert("g").attr("class",p(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,o=Math.max(28,e.width??0),s=[{x:0,y:o/2},{x:o/2,y:0},{x:0,y:-o/2},{x:-o/2,y:0}],l=c.A.svg(n),h=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(h.roughness=0,h.fillStyle="solid");const u=f(s),d=l.path(u,h),g=n.insert(()=>d,":first-child");return a&&"handDrawn"!==e.look&&g.selectAll("path").attr("style",a),r&&"handDrawn"!==e.look&&g.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(t){return P.polygon(e,s,t)},n}async function G(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:l,halfPadding:u}=await h(t,e,p(e)),f=l.width/2+u;let g;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=t.circle(0,0,2*f,r);g=a.insert(()=>n,":first-child"),g.attr("class","basic label-container").attr("style",(0,o.KL)(m))}else g=a.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",f).attr("cx",0).attr("cy",0);return d(e,g),e.intersect=function(t){return s.Rm.info("Circle intersect",e,f,t),P.circle(e,f,t)},a}function Y(t){const e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=2*t;return`M ${-n/2*e},${n/2*r} L ${n/2*e},${-n/2*r}\n M ${n/2*e},${n/2*r} L ${-n/2*e},${-n/2*r}`}function X(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r,e.label="";const a=t.insert("g").attr("class",p(e)).attr("id",e.domId??e.id),o=Math.max(30,e?.width??0),{cssStyles:l}=e,h=c.A.svg(a),u=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(u.roughness=0,u.fillStyle="solid");const f=h.circle(0,0,2*o,u),g=Y(o),m=h.path(g,u),y=a.insert(()=>f,":first-child");return y.insert(()=>m),l&&"handDrawn"!==e.look&&y.selectAll("path").attr("style",l),n&&"handDrawn"!==e.look&&y.selectAll("path").attr("style",n),d(e,y),e.intersect=function(t){s.Rm.info("crossedCircle intersect",e,{radius:o,point:t});return P.circle(e,o,t)},a}function V(t,e,r,n=100,i=0,a=180){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;cv,":first-child").attr("stroke-opacity",0),S.insert(()=>w,":first-child"),S.attr("class","text"),m&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${g}, 0)`),s.attr("transform",`translate(${-l/2+g-(o.x-(o.left??0))},${-u/2+(e.padding??0)/2-(o.y-(o.top??0))})`),d(e,S),e.intersect=function(t){return P.polygon(e,x,t)},a}function Q(t,e,r,n=100,i=0,a=180){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;cv,":first-child").attr("stroke-opacity",0),S.insert(()=>w,":first-child"),S.attr("class","text"),m&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${-g}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(o.x-(o.left??0))},${-u/2+(e.padding??0)/2-(o.y-(o.top??0))})`),d(e,S),e.intersect=function(t){return P.polygon(e,x,t)},a}function tt(t,e,r,n=100,i=0,a=180){const o=[],s=i*Math.PI/180,l=(a*Math.PI/180-s)/(n-1);for(let c=0;cA,":first-child").attr("stroke-opacity",0),M.insert(()=>_,":first-child"),M.insert(()=>S,":first-child"),M.attr("class","text"),m&&"handDrawn"!==e.look&&M.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&M.selectAll("path").attr("style",n),M.attr("transform",`translate(${g-g/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(o.x-(o.left??0))},${-u/2+(e.padding??0)/2-(o.y-(o.top??0))})`),d(e,M),e.intersect=function(t){return P.polygon(e,b,t)},a}async function rt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(80,1.25*(o.width+2*(e.padding??0)),e?.width??0),l=Math.max(20,o.height+2*(e.padding??0),e?.height??0),u=l/2,{cssStyles:g}=e,y=c.A.svg(a),x=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(x.roughness=0,x.fillStyle="solid");const b=s-u,C=l/4,k=[{x:b,y:0},{x:C,y:0},{x:0,y:l/2},{x:C,y:l},{x:b,y:l},...m(-b,-l/2,u,50,270,90)],w=f(k),_=y.path(w,x),v=a.insert(()=>_,":first-child");return v.attr("class","basic label-container"),g&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",g),n&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",n),v.attr("transform",`translate(${-s/2}, ${-l/2})`),d(e,v),e.intersect=function(t){return P.polygon(e,k,t)},a}(0,s.K2)(z,"anchor"),(0,s.K2)(K,"generateArcPoints"),(0,s.K2)(q,"bowTieRect"),(0,s.K2)(W,"insertPolygonShape"),(0,s.K2)(H,"card"),(0,s.K2)(U,"choice"),(0,s.K2)(G,"circle"),(0,s.K2)(Y,"createLine"),(0,s.K2)(X,"crossedCircle"),(0,s.K2)(V,"generateCirclePoints"),(0,s.K2)(Z,"curlyBraceLeft"),(0,s.K2)(Q,"generateCirclePoints"),(0,s.K2)(J,"curlyBraceRight"),(0,s.K2)(tt,"generateCirclePoints"),(0,s.K2)(et,"curlyBraces"),(0,s.K2)(rt,"curvedTrapezoid");var nt=(0,s.K2)((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n].join(" "),"createCylinderPathD"),it=(0,s.K2)((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n].join(" "),"createOuterCylinderPathD"),at=(0,s.K2)((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");async function ot(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l}=await h(t,e,p(e)),u=Math.max(s.width+e.padding,e.width??0),f=u/2,g=f/(2.5+u/50),m=Math.max(s.height+g+e.padding,e.height??0);let y;const{cssStyles:x}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=it(0,0,u,m,f,g),n=at(0,g,u,m,f,g),o=t.path(r,(0,i.Fr)(e,{})),s=t.path(n,(0,i.Fr)(e,{fill:"none"}));y=a.insert(()=>s,":first-child"),y=a.insert(()=>o,":first-child"),y.attr("class","basic label-container"),x&&y.attr("style",x)}else{const t=nt(0,0,u,m,f,g);y=a.insert("path",":first-child").attr("d",t).attr("class","basic label-container").attr("style",(0,o.KL)(x)).attr("style",n)}return y.attr("label-offset-y",g),y.attr("transform",`translate(${-u/2}, ${-(m/2+g)})`),d(e,y),l.attr("transform",`translate(${-s.width/2-(s.x-(s.left??0))}, ${-s.height/2+(e.padding??0)/1.5-(s.y-(s.top??0))})`),e.intersect=function(t){const r=P.rect(e,t),n=r.x-(e.x??0);if(0!=f&&(Math.abs(n)<(e.width??0)/2||Math.abs(n)==(e.width??0)/2&&Math.abs(r.y-(e.y??0))>(e.height??0)/2-g)){let i=g*g*(1-n*n/(f*f));i>0&&(i=Math.sqrt(i)),i=g-i,t.y-(e.y??0)>0&&(i=-i),r.y+=i}return r},a}async function st(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=o.width+e.padding,u=o.height+e.padding,f=.2*u,g=-l/2,m=-u/2-f/2,{cssStyles:y}=e,x=c.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:g,y:m+f},{x:-g,y:m+f},{x:-g,y:-m},{x:g,y:-m},{x:g,y:m},{x:-g,y:m},{x:-g,y:m+f}],k=x.polygon(C.map(t=>[t.x,t.y]),b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),s.attr("transform",`translate(${g+(e.padding??0)/2-(o.x-(o.left??0))}, ${m+f+(e.padding??0)/2-(o.y-(o.top??0))})`),d(e,w),e.intersect=function(t){return P.rect(e,t)},a}async function lt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:l,halfPadding:u}=await h(t,e,p(e)),f=l.width/2+u+5,g=l.width/2+u;let m;const{cssStyles:y}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{roughness:.2,strokeWidth:2.5}),n=(0,i.Fr)(e,{roughness:.2,strokeWidth:1.5}),s=t.circle(0,0,2*f,r),l=t.circle(0,0,2*g,n);m=a.insert("g",":first-child"),m.attr("class",(0,o.KL)(e.cssClasses)).attr("style",(0,o.KL)(y)),m.node()?.appendChild(s),m.node()?.appendChild(l)}else{m=a.insert("g",":first-child");const t=m.insert("circle",":first-child"),e=m.insert("circle");m.attr("class","basic label-container").attr("style",n),t.attr("class","outer-circle").attr("style",n).attr("r",f).attr("cx",0).attr("cy",0),e.attr("class","inner-circle").attr("style",n).attr("r",g).attr("cx",0).attr("cy",0)}return d(e,m),e.intersect=function(t){return s.Rm.info("DoubleCircle intersect",e,f,t),P.circle(e,f,t)},a}function ct(t,e,{config:{themeVariables:r}}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.label="",e.labelStyle=n;const o=t.insert("g").attr("class",p(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,h=c.A.svg(o),{nodeBorder:u}=r,f=(0,i.Fr)(e,{fillStyle:"solid"});"handDrawn"!==e.look&&(f.roughness=0);const g=h.circle(0,0,14,f),m=o.insert(()=>g,":first-child");return m.selectAll("path").attr("style",`fill: ${u} !important;`),l&&l.length>0&&"handDrawn"!==e.look&&m.selectAll("path").attr("style",l),a&&"handDrawn"!==e.look&&m.selectAll("path").attr("style",a),d(e,m),e.intersect=function(t){s.Rm.info("filledCircle intersect",e,{radius:7,point:t});return P.circle(e,7,t)},o}async function ht(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:l}=await h(t,e,p(e)),u=o.width+(e.padding??0),g=u+o.height,m=u+o.height,y=[{x:0,y:-g},{x:m,y:-g},{x:m/2,y:0}],{cssStyles:x}=e,b=c.A.svg(a),C=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=f(y),w=b.path(k,C),_=a.insert(()=>w,":first-child").attr("transform",`translate(${-g/2}, ${g/2})`);return x&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",x),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),e.width=u,e.height=g,d(e,_),l.attr("transform",`translate(${-o.width/2-(o.x-(o.left??0))}, ${-g/2+(e.padding??0)/2+(o.y-(o.top??0))})`),e.intersect=function(t){return s.Rm.info("Triangle intersect",e,y,t),P.polygon(e,y,t)},a}function ut(t,e,{dir:r,config:{state:n,themeVariables:a}}){const{nodeStyles:o}=(0,i.GX)(e);e.label="";const s=t.insert("g").attr("class",p(e)).attr("id",e.domId??e.id),{cssStyles:l}=e;let h=Math.max(70,e?.width??0),u=Math.max(10,e?.height??0);"LR"===r&&(h=Math.max(10,e?.width??0),u=Math.max(70,e?.height??0));const f=-1*h/2,g=-1*u/2,m=c.A.svg(s),y=(0,i.Fr)(e,{stroke:a.lineColor,fill:a.lineColor});"handDrawn"!==e.look&&(y.roughness=0,y.fillStyle="solid");const x=m.rectangle(f,g,h,u,y),b=s.insert(()=>x,":first-child");l&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",l),o&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",o),d(e,b);const C=n?.padding??0;return e.width&&e.height&&(e.width+=C/2||0,e.height+=C/2||0),e.intersect=function(t){return P.rect(e,t)},s}async function dt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),l=Math.max(80,o.width+2*(e.padding??0),e?.width??0),u=Math.max(50,o.height+2*(e.padding??0),e?.height??0),g=u/2,{cssStyles:y}=e,x=c.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:-l/2,y:-u/2},{x:l/2-g,y:-u/2},...m(-l/2+g,0,g,50,90,270),{x:l/2-g,y:u/2},{x:-l/2,y:u/2}],k=f(C),w=x.path(k,b),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",y),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),d(e,_),e.intersect=function(t){s.Rm.info("Pill intersect",e,{radius:g,point:t});return P.polygon(e,C,t)},a}(0,s.K2)(ot,"cylinder"),(0,s.K2)(st,"dividedRectangle"),(0,s.K2)(lt,"doublecircle"),(0,s.K2)(ct,"filledCircle"),(0,s.K2)(ht,"flippedTriangle"),(0,s.K2)(ut,"forkJoin"),(0,s.K2)(dt,"halfRoundedRectangle");var pt=(0,s.K2)((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");async function ft(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=o.height+e.padding,l=s/4,u=o.width+2*l+e.padding,f=[{x:l,y:0},{x:u-l,y:0},{x:u,y:-s/2},{x:u-l,y:-s},{x:l,y:-s},{x:0,y:-s/2}];let g;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=pt(0,0,u,s,l),o=t.path(n,r);g=a.insert(()=>o,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),m&&g.attr("style",m)}else g=W(a,u,s,f);return n&&g.attr("style",n),e.width=u,e.height=s,d(e,g),e.intersect=function(t){return P.polygon(e,f,t)},a}async function gt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.label="",e.labelStyle=r;const{shapeSvg:a}=await h(t,e,p(e)),o=Math.max(30,e?.width??0),l=Math.max(30,e?.height??0),{cssStyles:u}=e,g=c.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");const y=[{x:0,y:0},{x:o,y:0},{x:0,y:l},{x:o,y:l}],x=f(y),b=g.path(x,m),C=a.insert(()=>b,":first-child");return C.attr("class","basic label-container"),u&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",u),n&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",n),C.attr("transform",`translate(${-o/2}, ${-l/2})`),d(e,C),e.intersect=function(t){s.Rm.info("Pill intersect",e,{points:y});return P.polygon(e,y,t)},a}async function mt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const l=e.assetHeight??48,u=e.assetWidth??48,p=Math.max(l,u),f=n?.wrappingWidth;e.width=Math.max(p,f??0);const{shapeSvg:g,bbox:m,label:y}=await h(t,e,"icon-shape default"),x="t"===e.pos,b=p,C=p,{nodeBorder:k}=r,{stylesMap:w}=(0,i.WW)(e),_=-C/2,v=-b/2,S=e.label?8:0,T=c.A.svg(g),A=(0,i.Fr)(e,{stroke:"none",fill:"none"});"handDrawn"!==e.look&&(A.roughness=0,A.fillStyle="solid");const M=T.rectangle(_,v,C,b,A),B=Math.max(C,m.width),L=b+m.height+S,F=T.rectangle(-B/2,-L/2,B,L,{...A,fill:"transparent",stroke:"none"}),$=g.insert(()=>M,":first-child"),E=g.insert(()=>F);if(e.icon){const t=g.append("g");t.html(`${await(0,a.WY)(e.icon,{height:p,width:p,fallbackPrefix:""})}`);const r=t.node().getBBox(),n=r.width,i=r.height,o=r.x,s=r.y;t.attr("transform",`translate(${-n/2-o},${x?m.height/2+S/2-i/2-s:-m.height/2-S/2-i/2-s})`),t.attr("style",`color: ${w.get("stroke")??k};`)}return y.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${x?-L/2:L/2-m.height})`),$.attr("transform",`translate(0,${x?m.height/2+S/2:-m.height/2-S/2})`),d(e,E),e.intersect=function(t){if(s.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=x?[{x:r-m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2+m.height+S},{x:r+C/2,y:n-i/2+m.height+S},{x:r+C/2,y:n+i/2},{x:r-C/2,y:n+i/2},{x:r-C/2,y:n-i/2+m.height+S},{x:r-m.width/2,y:n-i/2+m.height+S}]:[{x:r-C/2,y:n-i/2},{x:r+C/2,y:n-i/2},{x:r+C/2,y:n-i/2+b},{x:r+m.width/2,y:n-i/2+b},{x:r+m.width/2/2,y:n+i/2},{x:r-m.width/2,y:n+i/2},{x:r-m.width/2,y:n-i/2+b},{x:r-C/2,y:n-i/2+b}];return P.polygon(e,a,t)},g}async function yt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const l=e.assetHeight??48,u=e.assetWidth??48,p=Math.max(l,u),f=n?.wrappingWidth;e.width=Math.max(p,f??0);const{shapeSvg:g,bbox:m,label:y}=await h(t,e,"icon-shape default"),x=e.label?8:0,b="t"===e.pos,{nodeBorder:C,mainBkg:k}=r,{stylesMap:w}=(0,i.WW)(e),_=c.A.svg(g),v=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(v.roughness=0,v.fillStyle="solid");const S=w.get("fill");v.stroke=S??k;const T=g.append("g");e.icon&&T.html(`${await(0,a.WY)(e.icon,{height:p,width:p,fallbackPrefix:""})}`);const A=T.node().getBBox(),M=A.width,B=A.height,L=A.x,F=A.y,$=Math.max(M,B)*Math.SQRT2+40,E=_.circle(0,0,$,v),D=Math.max($,m.width),O=$+m.height+x,N=_.rectangle(-D/2,-O/2,D,O,{...v,fill:"transparent",stroke:"none"}),j=g.insert(()=>E,":first-child"),I=g.insert(()=>N);return T.attr("transform",`translate(${-M/2-L},${b?m.height/2+x/2-B/2-F:-m.height/2-x/2-B/2-F})`),T.attr("style",`color: ${w.get("stroke")??C};`),y.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${b?-O/2:O/2-m.height})`),j.attr("transform",`translate(0,${b?m.height/2+x/2:-m.height/2-x/2})`),d(e,I),e.intersect=function(t){s.Rm.info("iconSquare intersect",e,t);return P.rect(e,t)},g}async function xt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const l=e.assetHeight??48,u=e.assetWidth??48,p=Math.max(l,u),f=n?.wrappingWidth;e.width=Math.max(p,f??0);const{shapeSvg:g,bbox:m,halfPadding:y,label:x}=await h(t,e,"icon-shape default"),b="t"===e.pos,C=p+2*y,w=p+2*y,{nodeBorder:_,mainBkg:v}=r,{stylesMap:S}=(0,i.WW)(e),T=-w/2,A=-C/2,M=e.label?8:0,B=c.A.svg(g),L=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(L.roughness=0,L.fillStyle="solid");const F=S.get("fill");L.stroke=F??v;const $=B.path(k(T,A,w,C,5),L),E=Math.max(w,m.width),D=C+m.height+M,O=B.rectangle(-E/2,-D/2,E,D,{...L,fill:"transparent",stroke:"none"}),N=g.insert(()=>$,":first-child").attr("class","icon-shape2"),j=g.insert(()=>O);if(e.icon){const t=g.append("g");t.html(`${await(0,a.WY)(e.icon,{height:p,width:p,fallbackPrefix:""})}`);const r=t.node().getBBox(),n=r.width,i=r.height,o=r.x,s=r.y;t.attr("transform",`translate(${-n/2-o},${b?m.height/2+M/2-i/2-s:-m.height/2-M/2-i/2-s})`),t.attr("style",`color: ${S.get("stroke")??_};`)}return x.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${b?-D/2:D/2-m.height})`),N.attr("transform",`translate(0,${b?m.height/2+M/2:-m.height/2-M/2})`),d(e,j),e.intersect=function(t){if(s.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=b?[{x:r-m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2+m.height+M},{x:r+w/2,y:n-i/2+m.height+M},{x:r+w/2,y:n+i/2},{x:r-w/2,y:n+i/2},{x:r-w/2,y:n-i/2+m.height+M},{x:r-m.width/2,y:n-i/2+m.height+M}]:[{x:r-w/2,y:n-i/2},{x:r+w/2,y:n-i/2},{x:r+w/2,y:n-i/2+C},{x:r+m.width/2,y:n-i/2+C},{x:r+m.width/2/2,y:n+i/2},{x:r-m.width/2,y:n+i/2},{x:r-m.width/2,y:n-i/2+C},{x:r-w/2,y:n-i/2+C}];return P.polygon(e,a,t)},g}async function bt(t,e,{config:{themeVariables:r,flowchart:n}}){const{labelStyles:o}=(0,i.GX)(e);e.labelStyle=o;const l=e.assetHeight??48,u=e.assetWidth??48,p=Math.max(l,u),f=n?.wrappingWidth;e.width=Math.max(p,f??0);const{shapeSvg:g,bbox:m,halfPadding:y,label:x}=await h(t,e,"icon-shape default"),b="t"===e.pos,C=p+2*y,w=p+2*y,{nodeBorder:_,mainBkg:v}=r,{stylesMap:S}=(0,i.WW)(e),T=-w/2,A=-C/2,M=e.label?8:0,B=c.A.svg(g),L=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(L.roughness=0,L.fillStyle="solid");const F=S.get("fill");L.stroke=F??v;const $=B.path(k(T,A,w,C,.1),L),E=Math.max(w,m.width),D=C+m.height+M,O=B.rectangle(-E/2,-D/2,E,D,{...L,fill:"transparent",stroke:"none"}),N=g.insert(()=>$,":first-child"),j=g.insert(()=>O);if(e.icon){const t=g.append("g");t.html(`${await(0,a.WY)(e.icon,{height:p,width:p,fallbackPrefix:""})}`);const r=t.node().getBBox(),n=r.width,i=r.height,o=r.x,s=r.y;t.attr("transform",`translate(${-n/2-o},${b?m.height/2+M/2-i/2-s:-m.height/2-M/2-i/2-s})`),t.attr("style",`color: ${S.get("stroke")??_};`)}return x.attr("transform",`translate(${-m.width/2-(m.x-(m.left??0))},${b?-D/2:D/2-m.height})`),N.attr("transform",`translate(0,${b?m.height/2+M/2:-m.height/2-M/2})`),d(e,j),e.intersect=function(t){if(s.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=b?[{x:r-m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2},{x:r+m.width/2,y:n-i/2+m.height+M},{x:r+w/2,y:n-i/2+m.height+M},{x:r+w/2,y:n+i/2},{x:r-w/2,y:n+i/2},{x:r-w/2,y:n-i/2+m.height+M},{x:r-m.width/2,y:n-i/2+m.height+M}]:[{x:r-w/2,y:n-i/2},{x:r+w/2,y:n-i/2},{x:r+w/2,y:n-i/2+C},{x:r+m.width/2,y:n-i/2+C},{x:r+m.width/2/2,y:n+i/2},{x:r-m.width/2,y:n+i/2},{x:r-m.width/2,y:n-i/2+C},{x:r-w/2,y:n-i/2+C}];return P.polygon(e,a,t)},g}async function Ct(t,e,{config:{flowchart:r}}){const n=new Image;n.src=e?.img??"",await n.decode();const a=Number(n.naturalWidth.toString().replace("px","")),o=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=a/o;const{labelStyles:l}=(0,i.GX)(e);e.labelStyle=l;const u=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;const p=Math.max(e.label?u??0:0,e?.assetWidth??a),f="on"===e.constraint&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:p,g="on"===e.constraint?f/e.imageAspectRatio:e?.assetHeight??o;e.width=Math.max(f,u??0);const{shapeSvg:m,bbox:y,label:x}=await h(t,e,"image-shape default"),b="t"===e.pos,C=-f/2,k=-g/2,w=e.label?8:0,_=c.A.svg(m),v=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(v.roughness=0,v.fillStyle="solid");const S=_.rectangle(C,k,f,g,v),T=Math.max(f,y.width),A=g+y.height+w,M=_.rectangle(-T/2,-A/2,T,A,{...v,fill:"none",stroke:"none"}),B=m.insert(()=>S,":first-child"),L=m.insert(()=>M);if(e.img){const t=m.append("image");t.attr("href",e.img),t.attr("width",f),t.attr("height",g),t.attr("preserveAspectRatio","none"),t.attr("transform",`translate(${-f/2},${b?A/2-g:-A/2})`)}return x.attr("transform",`translate(${-y.width/2-(y.x-(y.left??0))},${b?-g/2-y.height/2-w/2:g/2-y.height/2+w/2})`),B.attr("transform",`translate(0,${b?y.height/2+w/2:-y.height/2-w/2})`),d(e,L),e.intersect=function(t){if(s.Rm.info("iconSquare intersect",e,t),!e.label)return P.rect(e,t);const r=e.x??0,n=e.y??0,i=e.height??0;let a=[];a=b?[{x:r-y.width/2,y:n-i/2},{x:r+y.width/2,y:n-i/2},{x:r+y.width/2,y:n-i/2+y.height+w},{x:r+f/2,y:n-i/2+y.height+w},{x:r+f/2,y:n+i/2},{x:r-f/2,y:n+i/2},{x:r-f/2,y:n-i/2+y.height+w},{x:r-y.width/2,y:n-i/2+y.height+w}]:[{x:r-f/2,y:n-i/2},{x:r+f/2,y:n-i/2},{x:r+f/2,y:n-i/2+g},{x:r+y.width/2,y:n-i/2+g},{x:r+y.width/2/2,y:n+i/2},{x:r-y.width/2,y:n+i/2},{x:r-y.width/2,y:n-i/2+g},{x:r-f/2,y:n-i/2+g}];return P.polygon(e,a,t)},m}async function kt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(o.width+2*(e.padding??0),e?.width??0),l=Math.max(o.height+2*(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}];let g;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=f(u),o=t.path(n,r);g=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&g.attr("style",m)}else g=W(a,s,l,u);return n&&g.attr("style",n),e.width=s,e.height=l,d(e,g),e.intersect=function(t){return P.polygon(e,u,t)},a}async function wt(t,e,r){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;const{shapeSvg:s,bbox:l}=await h(t,e,p(e)),u=Math.max(l.width+2*r.labelPaddingX,e?.width||0),f=Math.max(l.height+2*r.labelPaddingY,e?.height||0),g=-u/2,m=-f/2;let y,{rx:x,ry:b}=e;const{cssStyles:C}=e;if(r?.rx&&r.ry&&(x=r.rx,b=r.ry),"handDrawn"===e.look){const t=c.A.svg(s),r=(0,i.Fr)(e,{}),n=x||b?t.path(k(g,m,u,f,x||0),r):t.rectangle(g,m,u,f,r);y=s.insert(()=>n,":first-child"),y.attr("class","basic label-container").attr("style",(0,o.KL)(C))}else y=s.insert("rect",":first-child"),y.attr("class","basic label-container").attr("style",a).attr("rx",(0,o.KL)(x)).attr("ry",(0,o.KL)(b)).attr("x",g).attr("y",m).attr("width",u).attr("height",f);return d(e,y),e.intersect=function(t){return P.rect(e,t)},s}async function _t(t,e){const{shapeSvg:r,bbox:n,label:i}=await h(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-n.width/2-(n.x-(n.left??0))}, ${-n.height/2-(n.y-(n.top??0))})`),d(e,a),e.intersect=function(t){return P.rect(e,t)},r}async function vt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(o.width+(e.padding??0),e?.width??0),l=Math.max(o.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-3*l/6,y:-l}];let g;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=f(u),o=t.path(n,r);g=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&g.attr("style",m)}else g=W(a,s,l,u);return n&&g.attr("style",n),e.width=s,e.height=l,d(e,g),e.intersect=function(t){return P.polygon(e,u,t)},a}async function St(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(o.width+(e.padding??0),e?.width??0),l=Math.max(o.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}];let g;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=f(u),o=t.path(n,r);g=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&g.attr("style",m)}else g=W(a,s,l,u);return n&&g.attr("style",n),e.width=s,e.height=l,d(e,g),e.intersect=function(t){return P.polygon(e,u,t)},a}function Tt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.label="",e.labelStyle=r;const a=t.insert("g").attr("class",p(e)).attr("id",e.domId??e.id),{cssStyles:o}=e,l=Math.max(35,e?.width??0),h=Math.max(35,e?.height??0),u=[{x:l,y:0},{x:0,y:h+3.5},{x:l-14,y:h+3.5},{x:0,y:2*h},{x:l,y:h-3.5},{x:14,y:h-3.5}],g=c.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");const y=f(u),x=g.path(y,m),b=a.insert(()=>x,":first-child");return o&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",o),n&&"handDrawn"!==e.look&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(-${l/2},${-h})`),d(e,b),e.intersect=function(t){s.Rm.info("lightningBolt intersect",e,t);return P.polygon(e,u,t)},a}(0,s.K2)(ft,"hexagon"),(0,s.K2)(gt,"hourglass"),(0,s.K2)(mt,"icon"),(0,s.K2)(yt,"iconCircle"),(0,s.K2)(xt,"iconRounded"),(0,s.K2)(bt,"iconSquare"),(0,s.K2)(Ct,"imageSquare"),(0,s.K2)(kt,"inv_trapezoid"),(0,s.K2)(wt,"drawRect"),(0,s.K2)(_t,"labelRect"),(0,s.K2)(vt,"lean_left"),(0,s.K2)(St,"lean_right"),(0,s.K2)(Tt,"lightningBolt");var At=(0,s.K2)((t,e,r,n,i,a,o)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n,`M${t},${e+a+o}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),Mt=(0,s.K2)((t,e,r,n,i,a,o)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,"l0,"+-n,`M${t},${e+a+o}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),Bt=(0,s.K2)((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");async function Lt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l}=await h(t,e,p(e)),u=Math.max(s.width+(e.padding??0),e.width??0),f=u/2,g=f/(2.5+u/50),m=Math.max(s.height+g+(e.padding??0),e.height??0),y=.1*m;let x;const{cssStyles:b}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=Mt(0,0,u,m,f,g,y),n=Bt(0,g,u,m,f,g),o=(0,i.Fr)(e,{}),s=t.path(r,o),l=t.path(n,o);a.insert(()=>l,":first-child").attr("class","line"),x=a.insert(()=>s,":first-child"),x.attr("class","basic label-container"),b&&x.attr("style",b)}else{const t=At(0,0,u,m,f,g,y);x=a.insert("path",":first-child").attr("d",t).attr("class","basic label-container").attr("style",(0,o.KL)(b)).attr("style",n)}return x.attr("label-offset-y",g),x.attr("transform",`translate(${-u/2}, ${-(m/2+g)})`),d(e,x),l.attr("transform",`translate(${-s.width/2-(s.x-(s.left??0))}, ${-s.height/2+g-(s.y-(s.top??0))})`),e.intersect=function(t){const r=P.rect(e,t),n=r.x-(e.x??0);if(0!=f&&(Math.abs(n)<(e.width??0)/2||Math.abs(n)==(e.width??0)/2&&Math.abs(r.y-(e.y??0))>(e.height??0)/2-g)){let i=g*g*(1-n*n/(f*f));i>0&&(i=Math.sqrt(i)),i=g-i,t.y-(e.y??0)>0&&(i=-i),r.y+=i}return r},a}async function Ft(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),f=u/4,m=u+f,{cssStyles:y}=e,x=c.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:-l/2-l/2*.1,y:-m/2},{x:-l/2-l/2*.1,y:m/2},...g(-l/2-l/2*.1,m/2,l/2+l/2*.1,m/2,f,.8),{x:l/2+l/2*.1,y:-m/2},{x:-l/2-l/2*.1,y:-m/2},{x:-l/2,y:-m/2},{x:-l/2,y:m/2*1.1},{x:-l/2,y:-m/2}],k=x.polygon(C.map(t=>[t.x,t.y]),b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),w.attr("transform",`translate(0,${-f/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(o.x-(o.left??0))},${-u/2+(e.padding??0)-f/2-(o.y-(o.top??0))})`),d(e,w),e.intersect=function(t){return P.polygon(e,C,t)},a}async function $t(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),g=-l/2,m=-u/2,{cssStyles:y}=e,x=c.A.svg(a),b=(0,i.Fr)(e,{}),C=[{x:g-5,y:m+5},{x:g-5,y:m+u+5},{x:g+l-5,y:m+u+5},{x:g+l-5,y:m+u},{x:g+l,y:m+u},{x:g+l,y:m+u-5},{x:g+l+5,y:m+u-5},{x:g+l+5,y:m-5},{x:g+5,y:m-5},{x:g+5,y:m},{x:g,y:m},{x:g,y:m+5}],k=[{x:g,y:m+5},{x:g+l-5,y:m+5},{x:g+l-5,y:m+u},{x:g+l,y:m+u},{x:g+l,y:m},{x:g,y:m}];"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const w=f(C),_=x.path(w,b),v=f(k),S=x.path(v,{...b,fill:"none"}),T=a.insert(()=>S,":first-child");return T.insert(()=>_,":first-child"),T.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-o.width/2-5-(o.x-(o.left??0))}, ${-o.height/2+5-(o.y-(o.top??0))})`),d(e,T),e.intersect=function(t){return P.polygon(e,C,t)},a}async function Et(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),m=u/4,y=u+m,x=-l/2,b=-y/2,{cssStyles:C}=e,k=g(x-5,b+y+5,x+l-5,b+y+5,m,.8),w=k?.[k.length-1],_=[{x:x-5,y:b+5},{x:x-5,y:b+y+5},...k,{x:x+l-5,y:w.y-5},{x:x+l,y:w.y-5},{x:x+l,y:w.y-10},{x:x+l+5,y:w.y-10},{x:x+l+5,y:b-5},{x:x+5,y:b-5},{x:x+5,y:b},{x:x,y:b},{x:x,y:b+5}],v=[{x:x,y:b+5},{x:x+l-5,y:b+5},{x:x+l-5,y:w.y-5},{x:x+l,y:w.y-5},{x:x+l,y:b},{x:x,y:b}],S=c.A.svg(a),T=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(T.roughness=0,T.fillStyle="solid");const A=f(_),M=S.path(A,T),B=f(v),L=S.path(B,T),F=a.insert(()=>M,":first-child");return F.insert(()=>L),F.attr("class","basic label-container"),C&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",C),n&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",n),F.attr("transform",`translate(0,${-m/2})`),s.attr("transform",`translate(${-o.width/2-5-(o.x-(o.left??0))}, ${-o.height/2+5-m/2-(o.y-(o.top??0))})`),d(e,F),e.intersect=function(t){return P.polygon(e,_,t)},a}async function Dt(t,e,{config:{themeVariables:r}}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;e.useHtmlLabels||!1!==(0,s.zj)().flowchart?.htmlLabels||(e.centerLabel=!0);const{shapeSvg:o,bbox:l,label:u}=await h(t,e,p(e)),f=Math.max(l.width+2*(e.padding??0),e?.width??0),g=Math.max(l.height+2*(e.padding??0),e?.height??0),m=-f/2,y=-g/2,{cssStyles:x}=e,b=c.A.svg(o),C=(0,i.Fr)(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=b.rectangle(m,y,f,g,C),w=o.insert(()=>k,":first-child");return w.attr("class","basic label-container"),x&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",x),a&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",a),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-l.height/2-(l.y-(l.top??0))})`),d(e,w),e.intersect=function(t){return P.rect(e,t)},o}(0,s.K2)(Lt,"linedCylinder"),(0,s.K2)(Ft,"linedWaveEdgedRect"),(0,s.K2)($t,"multiRect"),(0,s.K2)(Et,"multiWaveEdgedRectangle"),(0,s.K2)(Dt,"note");var Ot=(0,s.K2)((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");async function Nt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),l=o.width+e.padding+(o.height+e.padding),u=[{x:l/2,y:0},{x:l,y:-l/2},{x:l/2,y:-l},{x:0,y:-l/2}];let f;const{cssStyles:g}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=Ot(0,0,l),o=t.path(n,r);f=a.insert(()=>o,":first-child").attr("transform",`translate(${-l/2}, ${l/2})`),g&&f.attr("style",g)}else f=W(a,l,l,u);return n&&f.attr("style",n),d(e,f),e.intersect=function(t){return s.Rm.debug("APA12 Intersect called SPLIT\npoint:",t,"\nnode:\n",e,"\nres:",P.polygon(e,u,t)),P.polygon(e,u,t)},a}async function jt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=-Math.max(o.width+(e.padding??0),e?.width??0)/2,u=-Math.max(o.height+(e.padding??0),e?.height??0)/2,g=u/2,m=[{x:l+g,y:u},{x:l,y:0},{x:l+g,y:-u},{x:-l,y:-u},{x:-l,y:u}],{cssStyles:y}=e,x=c.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=f(m),k=x.path(C,b),w=a.insert(()=>k,":first-child");return w.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",y),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),w.attr("transform",`translate(${-g/2},0)`),s.attr("transform",`translate(${-g/2-o.width/2-(o.x-(o.left??0))}, ${-o.height/2-(o.y-(o.top??0))})`),d(e,w),e.intersect=function(t){return P.polygon(e,m,t)},a}async function It(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);let a;e.labelStyle=r,a=e.cssClasses?"node "+e.cssClasses:"node default";const o=t.insert("g").attr("class",a).attr("id",e.domId||e.id),h=o.insert("g"),u=o.insert("g").attr("class","label").attr("style",n),p=e.description,f=e.label,g=u.node().appendChild(await C(f,e.labelStyle,!0,!0));let m={width:0,height:0};if((0,s._3)((0,s.D7)()?.flowchart?.htmlLabels)){const t=g.children[0],e=(0,l.Ltv)(g);m=t.getBoundingClientRect(),e.attr("width",m.width),e.attr("height",m.height)}s.Rm.info("Text 2",p);const y=p||[],x=g.getBBox(),b=u.node().appendChild(await C(y.join?y.join("
    "):y,e.labelStyle,!0,!0)),w=b.children[0],_=(0,l.Ltv)(b);m=w.getBoundingClientRect(),_.attr("width",m.width),_.attr("height",m.height);const v=(e.padding||0)/2;(0,l.Ltv)(b).attr("transform","translate( "+(m.width>x.width?0:(x.width-m.width)/2)+", "+(x.height+v+5)+")"),(0,l.Ltv)(g).attr("transform","translate( "+(m.width(s.Rm.debug("Rough node insert CXC",n),a),":first-child"),B=o.insert(()=>(s.Rm.debug("Rough node insert CXC",n),n),":first-child")}else B=h.insert("rect",":first-child"),L=h.insert("line"),B.attr("class","outer title-state").attr("style",n).attr("x",-m.width/2-v).attr("y",-m.height/2-v).attr("width",m.width+(e.padding||0)).attr("height",m.height+(e.padding||0)),L.attr("class","divider").attr("x1",-m.width/2-v).attr("x2",m.width/2+v).attr("y1",-m.height/2-v+x.height+v).attr("y2",-m.height/2-v+x.height+v);return d(e,B),e.intersect=function(t){return P.rect(e,t)},o}async function Rt(t,e){return wt(t,e,{rx:5,ry:5,classes:"",labelPaddingX:1*(e?.padding||0),labelPaddingY:1*(e?.padding||0)})}async function Pt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l}=await h(t,e,p(e)),u=e?.padding??0,f=Math.max(s.width+2*(e.padding??0),e?.width??0),g=Math.max(s.height+2*(e.padding??0),e?.height??0),m=-s.width/2-u,y=-s.height/2-u,{cssStyles:x}=e,b=c.A.svg(a),C=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const k=[{x:m,y:y},{x:m+f+8,y:y},{x:m+f+8,y:y+g},{x:m-8,y:y+g},{x:m-8,y:y},{x:m,y:y},{x:m,y:y+g}],w=b.polygon(k.map(t=>[t.x,t.y]),C),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container").attr("style",(0,o.KL)(x)),n&&"handDrawn"!==e.look&&_.selectAll("path").attr("style",n),x&&"handDrawn"!==e.look&&_.selectAll("path").attr("style",n),l.attr("transform",`translate(${-f/2+4+(e.padding??0)-(s.x-(s.left??0))},${-g/2+(e.padding??0)-(s.y-(s.top??0))})`),d(e,_),e.intersect=function(t){return P.rect(e,t)},a}async function zt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),g=-l/2,m=-u/2,{cssStyles:y}=e,x=c.A.svg(a),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=[{x:g,y:m},{x:g,y:m+u},{x:g+l,y:m+u},{x:g+l,y:m-u/2}],k=f(C),w=x.path(k,b),_=a.insert(()=>w,":first-child");return _.attr("class","basic label-container"),y&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",y),n&&"handDrawn"!==e.look&&_.selectChildren("path").attr("style",n),_.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(o.x-(o.left??0))}, ${-u/4+(e.padding??0)-(o.y-(o.top??0))})`),d(e,_),e.intersect=function(t){return P.polygon(e,C,t)},a}async function Kt(t,e){return wt(t,e,{rx:0,ry:0,classes:"",labelPaddingX:2*(e?.padding||0),labelPaddingY:1*(e?.padding||0)})}async function qt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s}=await h(t,e,p(e)),l=s.height+e.padding,u=s.width+l/4+e.padding;let f;const{cssStyles:g}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=k(-u/2,-l/2,u,l,l/2),s=t.path(n,r);f=a.insert(()=>s,":first-child"),f.attr("class","basic label-container").attr("style",(0,o.KL)(g))}else f=a.insert("rect",":first-child"),f.attr("class","basic label-container").attr("style",n).attr("rx",l/2).attr("ry",l/2).attr("x",-u/2).attr("y",-l/2).attr("width",u).attr("height",l);return d(e,f),e.intersect=function(t){return P.rect(e,t)},a}async function Wt(t,e){return wt(t,e,{rx:5,ry:5,classes:"flowchart-node"})}function Ht(t,e,{config:{themeVariables:r}}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n;const{cssStyles:o}=e,{lineColor:s,stateBorder:l,nodeBorder:h}=r,u=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),p=c.A.svg(u),f=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(f.roughness=0,f.fillStyle="solid");const g=p.circle(0,0,14,{...f,stroke:s,strokeWidth:2}),m=l??h,y=p.circle(0,0,5,{...f,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),x=u.insert(()=>g,":first-child");return x.insert(()=>y),o&&x.selectAll("path").attr("style",o),a&&x.selectAll("path").attr("style",a),d(e,x),e.intersect=function(t){return P.circle(e,7,t)},u}function Ut(t,e,{config:{themeVariables:r}}){const{lineColor:n}=r,a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let o;if("handDrawn"===e.look){const t=c.A.svg(a).circle(0,0,14,(0,i.ue)(n));o=a.insert(()=>t),o.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else o=a.insert("circle",":first-child"),o.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return d(e,o),e.intersect=function(t){return P.circle(e,7,t)},a}async function Gt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s}=await h(t,e,p(e)),l=(e?.padding||0)/2,u=s.width+e.padding,f=s.height+e.padding,g=-s.width/2-l,m=-s.height/2-l,y=[{x:0,y:0},{x:u,y:0},{x:u,y:-f},{x:0,y:-f},{x:0,y:0},{x:-8,y:0},{x:u+8,y:0},{x:u+8,y:-f},{x:-8,y:-f},{x:-8,y:0}];if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=t.rectangle(g-8,m,u+16,f,r),s=t.line(g,m,g,m+f,r),l=t.line(g+u,m,g+u,m+f,r);a.insert(()=>s,":first-child"),a.insert(()=>l,":first-child");const h=a.insert(()=>n,":first-child"),{cssStyles:p}=e;h.attr("class","basic label-container").attr("style",(0,o.KL)(p)),d(e,h)}else{const t=W(a,u,f,y);n&&t.attr("style",n),d(e,t)}return e.intersect=function(t){return P.polygon(e,y,t)},a}async function Yt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(o.width+2*(e.padding??0),e?.width??0),l=Math.max(o.height+2*(e.padding??0),e?.height??0),u=-s/2,g=-l/2,m=.2*l,y=.2*l,{cssStyles:x}=e,b=c.A.svg(a),C=(0,i.Fr)(e,{}),k=[{x:u-m/2,y:g},{x:u+s+m/2,y:g},{x:u+s+m/2,y:g+l},{x:u-m/2,y:g+l}],w=[{x:u+s-m/2,y:g+l},{x:u+s+m/2,y:g+l},{x:u+s+m/2,y:g+l-y}];"handDrawn"!==e.look&&(C.roughness=0,C.fillStyle="solid");const _=f(k),v=b.path(_,C),S=f(w),T=b.path(S,{...C,fillStyle:"solid"}),A=a.insert(()=>T,":first-child");return A.insert(()=>v,":first-child"),A.attr("class","basic label-container"),x&&"handDrawn"!==e.look&&A.selectAll("path").attr("style",x),n&&"handDrawn"!==e.look&&A.selectAll("path").attr("style",n),d(e,A),e.intersect=function(t){return P.polygon(e,k,t)},a}async function Xt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),m=u/4,y=.2*l,x=.2*u,b=u+m,{cssStyles:C}=e,k=c.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=[{x:-l/2-l/2*.1,y:b/2},...g(-l/2-l/2*.1,b/2,l/2+l/2*.1,b/2,m,.8),{x:l/2+l/2*.1,y:-b/2},{x:-l/2-l/2*.1,y:-b/2}],v=-l/2+l/2*.1,S=-b/2-.4*x,T=[{x:v+l-y,y:1.4*(S+u)},{x:v+l,y:S+u-x},{x:v+l,y:.9*(S+u)},...g(v+l,1.3*(S+u),v+l-y,1.5*(S+u),.03*-u,.5)],A=f(_),M=k.path(A,w),B=f(T),L=k.path(B,{...w,fillStyle:"solid"}),F=a.insert(()=>L,":first-child");return F.insert(()=>M,":first-child"),F.attr("class","basic label-container"),C&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",C),n&&"handDrawn"!==e.look&&F.selectAll("path").attr("style",n),F.attr("transform",`translate(0,${-m/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(o.x-(o.left??0))},${-u/2+(e.padding??0)-m/2-(o.y-(o.top??0))})`),d(e,F),e.intersect=function(t){return P.polygon(e,_,t)},a}async function Vt(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(o.width+e.padding,e?.width||0),l=Math.max(o.height+e.padding,e?.height||0),c=-s/2,u=-l/2,f=a.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",c).attr("y",u).attr("width",s).attr("height",l),d(e,f),e.intersect=function(t){return P.rect(e,t)},a}(0,s.K2)(Nt,"question"),(0,s.K2)(jt,"rect_left_inv_arrow"),(0,s.K2)(It,"rectWithTitle"),(0,s.K2)(Rt,"roundedRect"),(0,s.K2)(Pt,"shadedProcess"),(0,s.K2)(zt,"slopedRect"),(0,s.K2)(Kt,"squareRect"),(0,s.K2)(qt,"stadium"),(0,s.K2)(Wt,"state"),(0,s.K2)(Ht,"stateEnd"),(0,s.K2)(Ut,"stateStart"),(0,s.K2)(Gt,"subroutine"),(0,s.K2)(Yt,"taggedRect"),(0,s.K2)(Xt,"taggedWaveEdgedRectangle"),(0,s.K2)(Vt,"text");var Zt=(0,s.K2)((t,e,r,n,i,a)=>`M${t},${e}\n a${i},${a} 0,0,1 0,${-n}\n l${r},0\n a${i},${a} 0,0,1 0,${n}\n M${r},${-n}\n a${i},${a} 0,0,0 0,${n}\n l${-r},0`,"createCylinderPathD"),Qt=(0,s.K2)((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),Jt=(0,s.K2)((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");async function te(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:s,label:l,halfPadding:u}=await h(t,e,p(e)),f="neo"===e.look?2*u:u,g=s.height+f,m=g/2,y=m/(2.5+g/50),x=s.width+y+f,{cssStyles:b}=e;let C;if("handDrawn"===e.look){const t=c.A.svg(a),r=Qt(0,0,x,g,y,m),n=Jt(0,0,x,g,y,m),o=t.path(r,(0,i.Fr)(e,{})),s=t.path(n,(0,i.Fr)(e,{fill:"none"}));C=a.insert(()=>s,":first-child"),C=a.insert(()=>o,":first-child"),C.attr("class","basic label-container"),b&&C.attr("style",b)}else{const t=Zt(0,0,x,g,y,m);C=a.insert("path",":first-child").attr("d",t).attr("class","basic label-container").attr("style",(0,o.KL)(b)).attr("style",n),C.attr("class","basic label-container"),b&&C.selectAll("path").attr("style",b),n&&C.selectAll("path").attr("style",n)}return C.attr("label-offset-x",y),C.attr("transform",`translate(${-x/2}, ${g/2} )`),l.attr("transform",`translate(${-s.width/2-y-(s.x-(s.left??0))}, ${-s.height/2-(s.y-(s.top??0))})`),d(e,C),e.intersect=function(t){const r=P.rect(e,t),n=r.y-(e.y??0);if(0!=m&&(Math.abs(n)<(e.height??0)/2||Math.abs(n)==(e.height??0)/2&&Math.abs(r.x-(e.x??0))>(e.width??0)/2-y)){let i=y*y*(1-n*n/(m*m));0!=i&&(i=Math.sqrt(Math.abs(i))),i=y-i,t.x-(e.x??0)>0&&(i=-i),r.x+=i}return r},a}async function ee(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=o.width+e.padding,l=o.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}];let g;const{cssStyles:m}=e;if("handDrawn"===e.look){const t=c.A.svg(a),r=(0,i.Fr)(e,{}),n=f(u),o=t.path(n,r);g=a.insert(()=>o,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),m&&g.attr("style",m)}else g=W(a,s,l,u);return n&&g.attr("style",n),e.width=s,e.height=l,d(e,g),e.intersect=function(t){return P.polygon(e,u,t)},a}async function re(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(60,o.width+2*(e.padding??0),e?.width??0),l=Math.max(20,o.height+2*(e.padding??0),e?.height??0),{cssStyles:u}=e,g=c.A.svg(a),m=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(m.roughness=0,m.fillStyle="solid");const y=[{x:-s/2*.8,y:-l/2},{x:s/2*.8,y:-l/2},{x:s/2,y:-l/2*.6},{x:s/2,y:l/2},{x:-s/2,y:l/2},{x:-s/2,y:-l/2*.6}],x=f(y),b=g.path(x,m),C=a.insert(()=>b,":first-child");return C.attr("class","basic label-container"),u&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",u),n&&"handDrawn"!==e.look&&C.selectChildren("path").attr("style",n),d(e,C),e.intersect=function(t){return P.polygon(e,y,t)},a}async function ne(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:l}=await h(t,e,p(e)),u=(0,s._3)((0,s.D7)().flowchart?.htmlLabels),g=o.width+(e.padding??0),m=g+o.height,y=g+o.height,x=[{x:0,y:0},{x:y,y:0},{x:y/2,y:-m}],{cssStyles:b}=e,C=c.A.svg(a),k=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(k.roughness=0,k.fillStyle="solid");const w=f(x),_=C.path(w,k),v=a.insert(()=>_,":first-child").attr("transform",`translate(${-m/2}, ${m/2})`);return b&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",b),n&&"handDrawn"!==e.look&&v.selectChildren("path").attr("style",n),e.width=g,e.height=m,d(e,v),l.attr("transform",`translate(${-o.width/2-(o.x-(o.left??0))}, ${m/2-(o.height+(e.padding??0)/(u?2:1)-(o.y-(o.top??0)))})`),e.intersect=function(t){return s.Rm.info("Triangle intersect",e,x,t),P.polygon(e,x,t)},a}async function ie(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),m=u/8,y=u+m,{cssStyles:x}=e,b=70-l,C=b>0?b/2:0,k=c.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=[{x:-l/2-C,y:y/2},...g(-l/2-C,y/2,l/2+C,y/2,m,.8),{x:l/2+C,y:-y/2},{x:-l/2-C,y:-y/2}],v=f(_),S=k.path(v,w),T=a.insert(()=>S,":first-child");return T.attr("class","basic label-container"),x&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",x),n&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",n),T.attr("transform",`translate(0,${-m/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(o.x-(o.left??0))},${-u/2+(e.padding??0)-m-(o.y-(o.top??0))})`),d(e,T),e.intersect=function(t){return P.polygon(e,_,t)},a}async function ae(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o}=await h(t,e,p(e)),s=Math.max(o.width+2*(e.padding??0),e?.width??0),l=Math.max(o.height+2*(e.padding??0),e?.height??0),u=s/l;let m=s,y=l;m>y*u?y=m/u:m=y*u,m=Math.max(m,100),y=Math.max(y,50);const x=Math.min(.2*y,y/4),b=y+2*x,{cssStyles:C}=e,k=c.A.svg(a),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=[{x:-m/2,y:b/2},...g(-m/2,b/2,m/2,b/2,x,1),{x:m/2,y:-b/2},...g(m/2,-b/2,-m/2,-b/2,x,-1)],v=f(_),S=k.path(v,w),T=a.insert(()=>S,":first-child");return T.attr("class","basic label-container"),C&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",C),n&&"handDrawn"!==e.look&&T.selectAll("path").attr("style",n),d(e,T),e.intersect=function(t){return P.polygon(e,_,t)},a}async function oe(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const{shapeSvg:a,bbox:o,label:s}=await h(t,e,p(e)),l=Math.max(o.width+2*(e.padding??0),e?.width??0),u=Math.max(o.height+2*(e.padding??0),e?.height??0),f=-l/2,g=-u/2,{cssStyles:m}=e,y=c.A.svg(a),x=(0,i.Fr)(e,{}),b=[{x:f-5,y:g-5},{x:f-5,y:g+u},{x:f+l,y:g+u},{x:f+l,y:g-5}],C=`M${f-5},${g-5} L${f+l},${g-5} L${f+l},${g+u} L${f-5},${g+u} L${f-5},${g-5}\n M${f-5},${g} L${f+l},${g}\n M${f},${g-5} L${f},${g+u}`;"handDrawn"!==e.look&&(x.roughness=0,x.fillStyle="solid");const k=y.path(C,x),w=a.insert(()=>k,":first-child");return w.attr("transform","translate(2.5, 2.5)"),w.attr("class","basic label-container"),m&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",m),n&&"handDrawn"!==e.look&&w.selectAll("path").attr("style",n),s.attr("transform",`translate(${-o.width/2+2.5-(o.x-(o.left??0))}, ${-o.height/2+2.5-(o.y-(o.top??0))})`),d(e,w),e.intersect=function(t){return P.polygon(e,b,t)},a}async function se(t,e){const r=e;if(r.alias&&(e.label=r.alias),"handDrawn"===e.look){const{themeVariables:r}=(0,s.zj)(),{background:n}=r,i={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${n}`]};await se(t,i)}const n=(0,s.zj)();e.useHtmlLabels=n.htmlLabels;let a=n.er?.diagramPadding??10,h=n.er?.entityPadding??6;const{cssStyles:u}=e,{labelStyles:f,nodeStyles:g}=(0,i.GX)(e);if(0===r.attributes.length&&e.label){const r={rx:0,ry:0,labelPaddingX:a,labelPaddingY:1.5*a,classes:""};(0,o.Un)(e.label,n)+2*r.labelPaddingX0){const t=x.width+2*a-(w+_+v+S);w+=t/M,_+=t/M,v>0&&(v+=t/M),S>0&&(S+=t/M)}const L=w+_+v+S,F=c.A.svg(y),$=(0,i.Fr)(e,{});"handDrawn"!==e.look&&($.roughness=0,$.fillStyle="solid");let E=0;k.length>0&&(E=k.reduce((t,e)=>t+(e?.rowHeight??0),0));const D=Math.max(B.width+2*a,e?.width||0,L),O=Math.max((E??0)+x.height,e?.height||0),N=-D/2,j=-O/2;y.selectAll("g:not(:first-child)").each((t,e,r)=>{const n=(0,l.Ltv)(r[e]),i=n.attr("transform");let o=0,s=0;if(i){const t=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(i);t&&(o=parseFloat(t[1]),s=parseFloat(t[2]),n.attr("class").includes("attribute-name")?o+=w:n.attr("class").includes("attribute-keys")?o+=w+_:n.attr("class").includes("attribute-comment")&&(o+=w+_+v))}n.attr("transform",`translate(${N+a/2+o}, ${s+j+x.height+h/2})`)}),y.select(".name").attr("transform","translate("+-x.width/2+", "+(j+h/2)+")");const I=F.rectangle(N,j,D,O,$),R=y.insert(()=>I,":first-child").attr("style",u.join("")),{themeVariables:z}=(0,s.zj)(),{rowEven:K,rowOdd:q,nodeBorder:W}=z;C.push(0);for(const[i,o]of k.entries()){const t=(i+1)%2==0&&0!==o.yOffset,e=F.rectangle(N,x.height+j+o?.yOffset,D,o?.rowHeight,{...$,fill:t?K:q,stroke:W});y.insert(()=>e,"g.label").attr("style",u.join("")).attr("class","row-rect-"+(t?"even":"odd"))}let H=F.line(N,x.height+j,D+N,x.height+j,$);y.insert(()=>H).attr("class","divider"),H=F.line(w+N,x.height+j,w+N,O+j,$),y.insert(()=>H).attr("class","divider"),T&&(H=F.line(w+_+N,x.height+j,w+_+N,O+j,$),y.insert(()=>H).attr("class","divider")),A&&(H=F.line(w+_+v+N,x.height+j,w+_+v+N,O+j,$),y.insert(()=>H).attr("class","divider"));for(const i of C)H=F.line(N,x.height+j+i,D+N,x.height+j+i,$),y.insert(()=>H).attr("class","divider");if(d(e,R),g&&"handDrawn"!==e.look){const t=g.split(";"),e=t?.filter(t=>t.includes("stroke"))?.map(t=>`${t}`).join("; ");y.selectAll("path").attr("style",e??""),y.selectAll(".row-rect-even path").attr("style",g)}return e.intersect=function(t){return P.rect(e,t)},y}async function le(t,e,r,n=0,i=0,c=[],h=""){const u=t.insert("g").attr("class",`label ${c.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",h);e!==(0,s.QO)(e)&&(e=(e=(0,s.QO)(e)).replaceAll("<","<").replaceAll(">",">"));const d=u.node().appendChild(await(0,a.GZ)(u,e,{width:(0,o.Un)(e,r)+100,style:h,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let t=d.children[0];for(t.textContent=t.textContent.replaceAll("<","<").replaceAll(">",">");t.childNodes[0];)t=t.childNodes[0],t.textContent=t.textContent.replaceAll("<","<").replaceAll(">",">")}let p=d.getBBox();if((0,s._3)(r.htmlLabels)){const t=d.children[0];t.style.textAlign="start";const e=(0,l.Ltv)(d);p=t.getBoundingClientRect(),e.attr("width",p.width),e.attr("height",p.height)}return p}async function ce(t,e,r,n,i=r.class.padding??12){const a=n?0:3,o=t.insert("g").attr("class",p(e)).attr("id",e.domId||e.id);let s=null,l=null,c=null,h=null,u=0,d=0,f=0;if(s=o.insert("g").attr("class","annotation-group text"),e.annotations.length>0){const t=e.annotations[0];await he(s,{text:`\xab${t}\xbb`},0);u=s.node().getBBox().height}l=o.insert("g").attr("class","label-group text"),await he(l,e,0,["font-weight: bolder"]);const g=l.node().getBBox();d=g.height,c=o.insert("g").attr("class","members-group text");let m=0;for(const p of e.members){m+=await he(c,p,m,[p.parseClassifier()])+a}f=c.node().getBBox().height,f<=0&&(f=i/2),h=o.insert("g").attr("class","methods-group text");let y=0;for(const p of e.methods){y+=await he(h,p,y,[p.parseClassifier()])+a}let x=o.node().getBBox();if(null!==s){const t=s.node().getBBox();s.attr("transform",`translate(${-t.width/2})`)}return l.attr("transform",`translate(${-g.width/2}, ${u})`),x=o.node().getBBox(),c.attr("transform",`translate(0, ${u+d+2*i})`),x=o.node().getBBox(),h.attr("transform",`translate(0, ${u+d+(f?f+4*i:2*i)})`),x=o.node().getBBox(),{shapeSvg:o,bbox:x}}async function he(t,e,r,n=[]){const i=t.insert("g").attr("class","label").attr("style",n.join("; ")),c=(0,s.zj)();let h="useHtmlLabels"in e?e.useHtmlLabels:(0,s._3)(c.htmlLabels)??!0,u="";u="text"in e?e.text:e.label,!h&&u.startsWith("\\")&&(u=u.substring(1)),(0,s.Wi)(u)&&(h=!0);const d=await(0,a.GZ)(i,(0,s.oB)((0,o.Sm)(u)),{width:(0,o.Un)(u,c)+50,classes:"markdown-node-label",useHtmlLabels:h},c);let p,f=1;if(h){const t=d.children[0],e=(0,l.Ltv)(d);f=t.innerHTML.split("
    ").length,t.innerHTML.includes("")&&(f+=t.innerHTML.split("").length-1);const r=t.getElementsByTagName("img");if(r){const t=""===u.replace(/]*>/g,"").trim();await Promise.all([...r].map(e=>new Promise(r=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=c.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,r=5,n=parseInt(t,10)*r+"px";e.style.minWidth=n,e.style.maxWidth=n}else e.style.width="100%";r(e)}(0,s.K2)(n,"setupImage"),setTimeout(()=>{e.complete&&n()}),e.addEventListener("error",n),e.addEventListener("load",n)})))}p=t.getBoundingClientRect(),e.attr("width",p.width),e.attr("height",p.height)}else{n.includes("font-weight: bolder")&&(0,l.Ltv)(d).selectAll("tspan").attr("font-weight",""),f=d.children.length;const t=d.children[0];if(""===d.textContent||d.textContent.includes(">")){t.textContent=u[0]+u.substring(1).replaceAll(">",">").replaceAll("<","<").trim();" "===u[1]&&(t.textContent=t.textContent[0]+" "+t.textContent.substring(1))}"undefined"===t.textContent&&(t.textContent=""),p=d.getBBox()}return i.attr("transform","translate(0,"+(-p.height/(2*f)+r)+")"),p.height}async function ue(t,e){const r=(0,s.D7)(),n=r.class.padding??12,a=n,o=e.useHtmlLabels??(0,s._3)(r.htmlLabels)??!0,h=e;h.annotations=h.annotations??[],h.members=h.members??[],h.methods=h.methods??[];const{shapeSvg:u,bbox:p}=await ce(t,e,r,o,a),{labelStyles:f,nodeStyles:g}=(0,i.GX)(e);e.labelStyle=f,e.cssStyles=h.styles||"";const m=h.styles?.join(";")||g||"";e.cssStyles||(e.cssStyles=m.replaceAll("!important","").split(";"));const y=0===h.members.length&&0===h.methods.length&&!r.class?.hideEmptyMembersBox,x=c.A.svg(u),b=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(b.roughness=0,b.fillStyle="solid");const C=p.width;let k=p.height;0===h.members.length&&0===h.methods.length?k+=a:h.members.length>0&&0===h.methods.length&&(k+=2*a);const w=-C/2,_=-k/2,v=x.rectangle(w-n,_-n-(y?n:0===h.members.length&&0===h.methods.length?-n/2:0),C+2*n,k+2*n+(y?2*n:0===h.members.length&&0===h.methods.length?-n:0),b),S=u.insert(()=>v,":first-child");S.attr("class","basic label-container");const T=S.node().getBBox();u.selectAll(".text").each((t,e,r)=>{const i=(0,l.Ltv)(r[e]),a=i.attr("transform");let s=0;if(a){const t=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(a);t&&(s=parseFloat(t[2]))}let c=s+_+n-(y?n:0===h.members.length&&0===h.methods.length?-n/2:0);o||(c-=4);let d=w;(i.attr("class").includes("label-group")||i.attr("class").includes("annotation-group"))&&(d=-i.node()?.getBBox().width/2||0,u.selectAll("text").each(function(t,e,r){"middle"===window.getComputedStyle(r[e]).textAnchor&&(d=0)})),i.attr("transform",`translate(${d}, ${c})`)});const A=u.select(".annotation-group").node().getBBox().height-(y?n/2:0)||0,M=u.select(".label-group").node().getBBox().height-(y?n/2:0)||0,B=u.select(".members-group").node().getBBox().height-(y?n/2:0)||0;if(h.members.length>0||h.methods.length>0||y){const t=x.line(T.x,A+M+_+n,T.x+T.width,A+M+_+n,b);u.insert(()=>t).attr("class","divider").attr("style",m)}if(y||h.members.length>0||h.methods.length>0){const t=x.line(T.x,A+M+B+_+2*a+n,T.x+T.width,A+M+B+_+n+2*a,b);u.insert(()=>t).attr("class","divider").attr("style",m)}if("handDrawn"!==h.look&&u.selectAll("path").attr("style",m),S.select(":nth-child(2)").attr("style",m),u.selectAll(".divider").select("path").attr("style",m),e.labelStyle?u.selectAll("span").attr("style",e.labelStyle):u.selectAll("span").attr("style",m),!o){const t=RegExp(/color\s*:\s*([^;]*)/),e=t.exec(m);if(e){const t=e[0].replace("color","fill");u.selectAll("tspan").attr("style",t)}else if(f){const e=t.exec(f);if(e){const t=e[0].replace("color","fill");u.selectAll("tspan").attr("style",t)}}}return d(e,S),e.intersect=function(t){return P.rect(e,t)},u}async function de(t,e){const{labelStyles:r,nodeStyles:n}=(0,i.GX)(e);e.labelStyle=r;const a=e,o=e,s="verifyMethod"in e,h=p(e),u=t.insert("g").attr("class",h).attr("id",e.domId??e.id);let f;f=s?await pe(u,`<<${a.type}>>`,0,e.labelStyle):await pe(u,"<<Element>>",0,e.labelStyle);let g=f;const m=await pe(u,a.name,g,e.labelStyle+"; font-weight: bold;");if(g+=m+20,s){g+=await pe(u,""+(a.requirementId?`id: ${a.requirementId}`:""),g,e.labelStyle);g+=await pe(u,""+(a.text?`Text: ${a.text}`:""),g,e.labelStyle);g+=await pe(u,""+(a.risk?`Risk: ${a.risk}`:""),g,e.labelStyle),await pe(u,""+(a.verifyMethod?`Verification: ${a.verifyMethod}`:""),g,e.labelStyle)}else{g+=await pe(u,""+(o.type?`Type: ${o.type}`:""),g,e.labelStyle),await pe(u,""+(o.docRef?`Doc Ref: ${o.docRef}`:""),g,e.labelStyle)}const y=(u.node()?.getBBox().width??200)+20,x=(u.node()?.getBBox().height??200)+20,b=-y/2,C=-x/2,k=c.A.svg(u),w=(0,i.Fr)(e,{});"handDrawn"!==e.look&&(w.roughness=0,w.fillStyle="solid");const _=k.rectangle(b,C,y,x,w),v=u.insert(()=>_,":first-child");if(v.attr("class","basic label-container").attr("style",n),u.selectAll(".label").each((t,e,r)=>{const n=(0,l.Ltv)(r[e]),i=n.attr("transform");let a=0,o=0;if(i){const t=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(i);t&&(a=parseFloat(t[1]),o=parseFloat(t[2]))}const s=o-x/2;let c=b+10;0!==e&&1!==e||(c=a),n.attr("transform",`translate(${c}, ${s+20})`)}),g>f+m+20){const t=k.line(b,C+f+m+20,b+y,C+f+m+20,w);u.insert(()=>t).attr("style",n)}return d(e,v),e.intersect=function(t){return P.rect(e,t)},u}async function pe(t,e,r,n=""){if(""===e)return 0;const i=t.insert("g").attr("class","label").attr("style",n),c=(0,s.D7)(),h=c.htmlLabels??!0,u=await(0,a.GZ)(i,(0,s.oB)((0,o.Sm)(e)),{width:(0,o.Un)(e,c)+50,classes:"markdown-node-label",useHtmlLabels:h,style:n},c);let d;if(h){const t=u.children[0],e=(0,l.Ltv)(u);d=t.getBoundingClientRect(),e.attr("width",d.width),e.attr("height",d.height)}else{const t=u.children[0];for(const e of t.children)e.textContent=e.textContent.replaceAll(">",">").replaceAll("<","<"),n&&e.setAttribute("style",n);d=u.getBBox(),d.height+=6}return i.attr("transform",`translate(${-d.width/2},${-d.height/2+r})`),d.height}(0,s.K2)(te,"tiltedCylinder"),(0,s.K2)(ee,"trapezoid"),(0,s.K2)(re,"trapezoidalPentagon"),(0,s.K2)(ne,"triangle"),(0,s.K2)(ie,"waveEdgedRectangle"),(0,s.K2)(ae,"waveRectangle"),(0,s.K2)(oe,"windowPane"),(0,s.K2)(se,"erBox"),(0,s.K2)(le,"addText"),(0,s.K2)(ce,"textHelper"),(0,s.K2)(he,"addText"),(0,s.K2)(ue,"classBox"),(0,s.K2)(de,"requirementBox"),(0,s.K2)(pe,"addText");var fe=(0,s.K2)(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");async function ge(t,e,{config:r}){const{labelStyles:n,nodeStyles:a}=(0,i.GX)(e);e.labelStyle=n||"";const o=e.width;e.width=(e.width??200)-10;const{shapeSvg:s,bbox:l,label:f}=await h(t,e,p(e)),g=e.padding||10;let m,y="";"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(y=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),m=s.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",y).attr("target","_blank"));const x={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1};let b,C;({label:b,bbox:C}=m?await u(m,"ticket"in e&&e.ticket||"",x):await u(s,"ticket"in e&&e.ticket||"",x));const{label:w,bbox:_}=await u(s,"assigned"in e&&e.assigned||"",x);e.width=o;const v=e?.width||0,S=Math.max(C.height,_.height)/2,T=Math.max(l.height+20,e?.height||0)+S,A=-v/2,M=-T/2;let B;f.attr("transform","translate("+(g-v/2)+", "+(-S-l.height/2)+")"),b.attr("transform","translate("+(g-v/2)+", "+(-S+l.height/2)+")"),w.attr("transform","translate("+(g+v/2-_.width-20)+", "+(-S+l.height/2)+")");const{rx:L,ry:F}=e,{cssStyles:$}=e;if("handDrawn"===e.look){const t=c.A.svg(s),r=(0,i.Fr)(e,{}),n=L||F?t.path(k(A,M,v,T,L||0),r):t.rectangle(A,M,v,T,r);B=s.insert(()=>n,":first-child"),B.attr("class","basic label-container").attr("style",$||null)}else{B=s.insert("rect",":first-child"),B.attr("class","basic label-container __APA__").attr("style",a).attr("rx",L??5).attr("ry",F??5).attr("x",A).attr("y",M).attr("width",v).attr("height",T);const t="priority"in e&&e.priority;if(t){const e=s.append("line"),r=A+2,n=M+Math.floor((L??0)/2),i=M+T-Math.floor((L??0)/2);e.attr("x1",r).attr("y1",n).attr("x2",r).attr("y2",i).attr("stroke-width","4").attr("stroke",fe(t))}}return d(e,B),e.height=T,e.intersect=function(t){return P.rect(e,t)},s}(0,s.K2)(ge,"kanbanItem");var me=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:Kt},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Rt},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:qt},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:Gt},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:ot},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:G},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:Nt},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:ft},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:St},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:vt},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:ee},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:kt},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:lt},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:Vt},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:H},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:Pt},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:Ut},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:Ht},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:ut},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:gt},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:Z},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:J},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:et},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:Tt},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:ie},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:dt},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:te},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:Lt},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:rt},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:st},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:ne},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:oe},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:ct},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:re},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:ht},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:zt},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:Et},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:$t},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:q},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:X},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:Xt},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:Yt},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:ae},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:jt},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:Ft}],ye=(0,s.K2)(()=>{const t={state:Wt,choice:U,note:Dt,rectWithTitle:It,labelRect:_t,iconSquare:bt,iconCircle:yt,icon:mt,iconRounded:xt,imageSquare:Ct,anchor:z,kanbanItem:ge,classBox:ue,erBox:se,requirementBox:de},e=[...Object.entries(t),...me.flatMap(t=>[t.shortName,..."aliases"in t?t.aliases:[],..."internalAliases"in t?t.internalAliases:[]].map(e=>[e,t.handler]))];return Object.fromEntries(e)},"generateShapeMap")();function xe(t){return t in ye}(0,s.K2)(xe,"isValidShape");var be=new Map;async function Ce(t,e,r){let n,i;"rect"===e.shape&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");const a=e.shape?ye[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let o;"sandbox"===r.config.securityLevel?o="_top":e.linkTarget&&(o=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",o??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),be.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}(0,s.K2)(Ce,"insertNode");var ke=(0,s.K2)((t,e)=>{be.set(e.id,t)},"setNodeElem"),we=(0,s.K2)(()=>{be.clear()},"clear"),_e=(0,s.K2)(t=>{const e=be.get(t.id);s.Rm.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const r=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+r-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),r},"positionNode")},66984:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=function(t,e){return t===e||t!=t&&e!=e}},67525:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(39142),i=r(84171),a=r(29008);const o=i.A?function(t,e){return(0,i.A)(t,"toString",{configurable:!0,enumerable:!1,value:(0,n.A)(e),writable:!0})}:a.A;var s=Date.now;const l=function(t){var e=0,r=0;return function(){var n=s(),i=16-(n-r);if(r=n,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(o)},67825:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>d});r(96540);var n=r(17559),i=r(60542),a=r(34164),o=r(19114);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=r(74848);const c="table-of-contents__link toc-highlight",h="table-of-contents__link--active";function u({className:t,...e}){return(0,l.jsx)("div",{className:(0,a.A)(s.tableOfContents,"thin-scrollbar",t),children:(0,l.jsx)(o.default,{...e,linkClassName:c,linkActiveClassName:h})})}function d(){const{toc:t,frontMatter:e}=(0,i.useDoc)();return(0,l.jsx)(u,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:n.G.docs.docTocDesktop})}},68335:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(18744),i=r(41917);const a=(0,n.A)(i.A,"Map")},68506:(t,e,r)=>{"use strict";r.d(e,{W6:()=>Jt,GZ:()=>ne,WY:()=>Pt,pC:()=>jt,hE:()=>re,Gc:()=>Dt});var n=r(46792),i=r(41750);const a=(t,e)=>!!t&&!(!(e&&""===t.prefix||t.prefix)||!t.name),o=Object.freeze({left:0,top:0,width:16,height:16}),s=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),l=Object.freeze({...o,...s}),c=Object.freeze({...l,body:"",hidden:!1});function h(t,e){const r=function(t,e){const r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);const n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}(t,e);for(const n in c)n in s?n in t&&!(n in r)&&(r[n]=s[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}function u(t,e,r){const n=t.icons,i=t.aliases||Object.create(null);let a={};function o(t){a=h(n[t]||i[t],a)}return o(e),r.forEach(o),h(t,a)}function d(t,e){if(t.icons[e])return u(t,e,[]);const r=function(t,e){const r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);return(e||Object.keys(r).concat(Object.keys(n))).forEach(function t(e){if(r[e])return i[e]=[];if(!(e in i)){i[e]=null;const r=n[e]&&n[e].parent,a=r&&t(r);a&&(i[e]=[r].concat(a))}return i[e]}),i}(t,[e])[e];return r?u(t,e,r):null}const p=Object.freeze({width:null,height:null}),f=Object.freeze({...p,...s}),g=/(-?[0-9.]*[0-9]+[0-9.]*)/g,m=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function y(t,e,r){if(1===e)return t;if(r=r||100,"number"==typeof t)return Math.ceil(t*e*r)/r;if("string"!=typeof t)return t;const n=t.split(g);if(null===n||!n.length)return t;const i=[];let a=n.shift(),o=m.test(a);for(;;){if(o){const t=parseFloat(a);isNaN(t)?i.push(a):i.push(Math.ceil(t*e*r)/r)}else i.push(a);if(a=n.shift(),void 0===a)return i.join("");o=!o}}const x=/\sid="(\S+)"/g,b="IconifyId"+Date.now().toString(16)+(16777216*Math.random()|0).toString(16);let C=0;var k=r(70451);function w(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var _={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function v(t){_=t}var S={exec:()=>null};function T(t,e=""){let r="string"==typeof t?t:t.source,n={replace:(t,e)=>{let i="string"==typeof e?e:e.source;return i=i.replace(A.caret,"$1"),r=r.replace(t,i),n},getRegex:()=>new RegExp(r,e)};return n}var A={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^
    /i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[\t ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i")},M=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,B=/(?:[*+-]|\d{1,9}[.)])/,L=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,F=T(L).replace(/bull/g,B).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),$=T(L).replace(/bull/g,B).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),E=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,D=/(?!\s*\])(?:\\.|[^\[\]\\])+/,O=T(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",D).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),N=T(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,B).getRegex(),j="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",I=/|$))/,R=T("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",I).replace("tag",j).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),P=T(E).replace("hr",M).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",j).getRegex(),z={blockquote:T(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",P).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:O,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:M,html:R,lheading:F,list:N,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:P,table:S,text:/^[^\n]+/},K=T("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",M).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",j).getRegex(),q={...z,lheading:$,table:K,paragraph:T(E).replace("hr",M).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",K).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",j).getRegex()},W={...z,html:T("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",I).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:S,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:T(E).replace("hr",M).replace("heading"," *#{1,6} *[^\n]").replace("lheading",F).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},H=/^( {2,}|\\)\n(?!\s*$)/,U=/[\p{P}\p{S}]/u,G=/[\s\p{P}\p{S}]/u,Y=/[^\s\p{P}\p{S}]/u,X=T(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,G).getRegex(),V=/(?!~)[\p{P}\p{S}]/u,Z=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Q=T(Z,"u").replace(/punct/g,U).getRegex(),J=T(Z,"u").replace(/punct/g,V).getRegex(),tt="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",et=T(tt,"gu").replace(/notPunctSpace/g,Y).replace(/punctSpace/g,G).replace(/punct/g,U).getRegex(),rt=T(tt,"gu").replace(/notPunctSpace/g,/(?:[^\s\p{P}\p{S}]|~)/u).replace(/punctSpace/g,/(?!~)[\s\p{P}\p{S}]/u).replace(/punct/g,V).getRegex(),nt=T("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Y).replace(/punctSpace/g,G).replace(/punct/g,U).getRegex(),it=T(/\\(punct)/,"gu").replace(/punct/g,U).getRegex(),at=T(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ot=T(I).replace("(?:--\x3e|$)","--\x3e").getRegex(),st=T("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",ot).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),lt=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,ct=T(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",lt).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),ht=T(/^!?\[(label)\]\[(ref)\]/).replace("label",lt).replace("ref",D).getRegex(),ut=T(/^!?\[(ref)\](?:\[\])?/).replace("ref",D).getRegex(),dt={_backpedal:S,anyPunctuation:it,autolink:at,blockSkip:/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<(?! )[^<>]*?>/g,br:H,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:S,emStrongLDelim:Q,emStrongRDelimAst:et,emStrongRDelimUnd:nt,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,link:ct,nolink:ut,punctuation:X,reflink:ht,reflinkSearch:T("reflink|nolink(?!\\()","g").replace("reflink",ht).replace("nolink",ut).getRegex(),tag:st,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},bt=t=>xt[t];function Ct(t,e){if(e){if(A.escapeTest.test(t))return t.replace(A.escapeReplace,bt)}else if(A.escapeTestNoEncode.test(t))return t.replace(A.escapeReplaceNoEncode,bt);return t}function kt(t){try{t=encodeURI(t).replace(A.percentDecode,"%")}catch{return null}return t}function wt(t,e){let r=t.replace(A.findPipe,(t,e,r)=>{let n=!1,i=e;for(;--i>=0&&"\\"===r[i];)n=!n;return n?"|":" |"}).split(A.splitPipe),n=0;if(r[0].trim()||r.shift(),r.length>0&&!r.at(-1)?.trim()&&r.pop(),e)if(r.length>e)r.splice(e);else for(;r.length0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let t=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?t:_t(t,"\n")}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let t=e[0],r=function(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(null===n)return e;let i=n[1];return e.split("\n").map(t=>{let e=t.match(r.other.beginningSpace);if(null===e)return t;let[n]=e;return n.length>=i.length?t.slice(i.length):t}).join("\n")}(t,e[3]||"",this.rules);return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:r}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let t=e[2].trim();if(this.rules.other.endingHash.test(t)){let e=_t(t,"#");(this.options.pedantic||!e||this.rules.other.endingSpaceChar.test(e))&&(t=e.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:_t(e[0],"\n")}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let t=_t(e[0],"\n").split("\n"),r="",n="",i=[];for(;t.length>0;){let e,a=!1,o=[];for(e=0;e1,i={type:"list",raw:"",ordered:n,start:n?+r.slice(0,-1):"",loose:!1,items:[]};r=n?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=n?r:"[*+-]");let a=this.rules.other.listItemRegex(r),o=!1;for(;t;){let r=!1,n="",s="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;n=e[0],t=t.substring(n.length);let l=e[2].split("\n",1)[0].replace(this.rules.other.listReplaceTabs,t=>" ".repeat(3*t.length)),c=t.split("\n",1)[0],h=!l.trim(),u=0;if(this.options.pedantic?(u=2,s=l.trimStart()):h?u=e[1].length+1:(u=e[2].search(this.rules.other.nonSpaceChar),u=u>4?1:u,s=l.slice(u),u+=e[1].length),h&&this.rules.other.blankLine.test(c)&&(n+=c+"\n",t=t.substring(c.length+1),r=!0),!r){let e=this.rules.other.nextBulletRegex(u),r=this.rules.other.hrRegex(u),i=this.rules.other.fencesBeginRegex(u),a=this.rules.other.headingBeginRegex(u),o=this.rules.other.htmlBeginRegex(u);for(;t;){let d,p=t.split("\n",1)[0];if(c=p,this.options.pedantic?(c=c.replace(this.rules.other.listReplaceNesting," "),d=c):d=c.replace(this.rules.other.tabCharGlobal," "),i.test(c)||a.test(c)||o.test(c)||e.test(c)||r.test(c))break;if(d.search(this.rules.other.nonSpaceChar)>=u||!c.trim())s+="\n"+d.slice(u);else{if(h||l.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||i.test(l)||a.test(l)||r.test(l))break;s+="\n"+c}!h&&!c.trim()&&(h=!0),n+=p+"\n",t=t.substring(p.length+1),l=d.slice(u)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(n)&&(o=!0));let d,p=null;this.options.gfm&&(p=this.rules.other.listIsTask.exec(s),p&&(d="[ ] "!==p[0],s=s.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:n,task:!!p,checked:d,loose:!1,text:s,tokens:[]}),i.raw+=n}let s=i.items.at(-1);if(!s)return;s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd(),i.raw=i.raw.trimEnd();for(let t=0;t"space"===t.type),r=e.length>0&&e.some(t=>this.rules.other.anyLine.test(t.raw));i.loose=r}if(i.loose)for(let t=0;t({text:t,tokens:this.lexer.inline(t),header:!1,align:a.align[e]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:"="===e[2].charAt(0)?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let t="\n"===e[1].charAt(e[1].length-1)?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let t=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(t)){if(!this.rules.other.endAngleBracket.test(t))return;let e=_t(t.slice(0,-1),"\\");if((t.length-e.length)%2==0)return}else{let t=function(t,e){if(-1===t.indexOf(e[1]))return-1;let r=0;for(let n=0;n0?-2:-1}(e[2],"()");if(-2===t)return;if(t>-1){let r=(0===e[0].indexOf("!")?5:4)+e[1].length+t;e[2]=e[2].substring(0,t),e[0]=e[0].substring(0,r).trim(),e[3]=""}}let r=e[2],n="";if(this.options.pedantic){let t=this.rules.other.pedanticHrefTitle.exec(r);t&&(r=t[1],n=t[3])}else n=e[3]?e[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(r=this.options.pedantic&&!this.rules.other.endAngleBracket.test(t)?r.slice(1):r.slice(1,-1)),vt(e,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let t=e[(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," ").toLowerCase()];if(!t){let t=r[0].charAt(0);return{type:"text",raw:t,text:t}}return vt(r,t,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let n=this.rules.inline.emStrongLDelim.exec(t);if(!(!n||n[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!n[1]&&!n[2]||!r||this.rules.inline.punctuation.exec(r))){let r,i,a=[...n[0]].length-1,o=a,s=0,l="*"===n[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,e=e.slice(-1*t.length+a);null!=(n=l.exec(e));){if(r=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!r)continue;if(i=[...r].length,n[3]||n[4]){o+=i;continue}if((n[5]||n[6])&&a%3&&!((a+i)%3)){s+=i;continue}if(o-=i,o>0)continue;i=Math.min(i,i+o+s);let e=[...n[0]][0].length,l=t.slice(0,a+n.index+e+i);if(Math.min(a,i)%2){let t=l.slice(1,-1);return{type:"em",raw:l,text:t,tokens:this.lexer.inlineTokens(t)}}let c=l.slice(2,-2);return{type:"strong",raw:l,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let t=e[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(t),n=this.rules.other.startingSpaceChar.test(t)&&this.rules.other.endingSpaceChar.test(t);return r&&n&&(t=t.substring(1,t.length-1)),{type:"codespan",raw:e[0],text:t}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let t,r;return"@"===e[2]?(t=e[1],r="mailto:"+t):(t=e[1],r=t),{type:"link",raw:e[0],text:t,href:r,tokens:[{type:"text",raw:t,text:t}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let t,r;if("@"===e[2])t=e[0],r="mailto:"+t;else{let n;do{n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??""}while(n!==e[0]);t=e[0],r="www."===e[1]?"http://"+e[0]:e[0]}return{type:"link",raw:e[0],text:t,href:r,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let t=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:t}}}},Tt=class t{tokens;options;state;tokenizer;inlineQueue;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||_,this.options.tokenizer=this.options.tokenizer||new St,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let e={other:A,block:mt.normal,inline:yt.normal};this.options.pedantic?(e.block=mt.pedantic,e.inline=yt.pedantic):this.options.gfm&&(e.block=mt.gfm,this.options.breaks?e.inline=yt.breaks:e.inline=yt.gfm),this.tokenizer.rules=e}static get rules(){return{block:mt,inline:yt}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(t){t=t.replace(A.carriageReturn,"\n"),this.blockTokens(t,this.tokens);for(let e=0;e!!(n=r.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))continue;if(n=this.tokenizer.space(t)){t=t.substring(n.raw.length);let r=e.at(-1);1===n.raw.length&&void 0!==r?r.raw+="\n":e.push(n);continue}if(n=this.tokenizer.code(t)){t=t.substring(n.raw.length);let r=e.at(-1);"paragraph"===r?.type||"text"===r?.type?(r.raw+="\n"+n.raw,r.text+="\n"+n.text,this.inlineQueue.at(-1).src=r.text):e.push(n);continue}if(n=this.tokenizer.fences(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.heading(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.hr(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.blockquote(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.list(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.html(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.def(t)){t=t.substring(n.raw.length);let r=e.at(-1);"paragraph"===r?.type||"text"===r?.type?(r.raw+="\n"+n.raw,r.text+="\n"+n.raw,this.inlineQueue.at(-1).src=r.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title});continue}if(n=this.tokenizer.table(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.lheading(t)){t=t.substring(n.raw.length),e.push(n);continue}let i=t;if(this.options.extensions?.startBlock){let e,r=1/0,n=t.slice(1);this.options.extensions.startBlock.forEach(t=>{e=t.call({lexer:this},n),"number"==typeof e&&e>=0&&(r=Math.min(r,e))}),r<1/0&&r>=0&&(i=t.substring(0,r+1))}if(this.state.top&&(n=this.tokenizer.paragraph(i))){let a=e.at(-1);r&&"paragraph"===a?.type?(a.raw+="\n"+n.raw,a.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):e.push(n),r=i.length!==t.length,t=t.substring(n.raw.length);continue}if(n=this.tokenizer.text(t)){t=t.substring(n.raw.length);let r=e.at(-1);"text"===r?.type?(r.raw+="\n"+n.raw,r.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):e.push(n);continue}if(t){let e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}return this.state.top=!0,e}inline(t,e=[]){return this.inlineQueue.push({src:t,tokens:e}),e}inlineTokens(t,e=[]){let r=t,n=null;if(this.tokens.links){let t=Object.keys(this.tokens.links);if(t.length>0)for(;null!=(n=this.tokenizer.rules.inline.reflinkSearch.exec(r));)t.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(r=r.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(n=this.tokenizer.rules.inline.anyPunctuation.exec(r));)r=r.slice(0,n.index)+"++"+r.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;null!=(n=this.tokenizer.rules.inline.blockSkip.exec(r));)r=r.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,a="";for(;t;){let n;if(i||(a=""),i=!1,this.options.extensions?.inline?.some(r=>!!(n=r.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))continue;if(n=this.tokenizer.escape(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.tag(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.link(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(n.raw.length);let r=e.at(-1);"text"===n.type&&"text"===r?.type?(r.raw+=n.raw,r.text+=n.text):e.push(n);continue}if(n=this.tokenizer.emStrong(t,r,a)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.codespan(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.br(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.del(t)){t=t.substring(n.raw.length),e.push(n);continue}if(n=this.tokenizer.autolink(t)){t=t.substring(n.raw.length),e.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(t))){t=t.substring(n.raw.length),e.push(n);continue}let o=t;if(this.options.extensions?.startInline){let e,r=1/0,n=t.slice(1);this.options.extensions.startInline.forEach(t=>{e=t.call({lexer:this},n),"number"==typeof e&&e>=0&&(r=Math.min(r,e))}),r<1/0&&r>=0&&(o=t.substring(0,r+1))}if(n=this.tokenizer.inlineText(o)){t=t.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(a=n.raw.slice(-1)),i=!0;let r=e.at(-1);"text"===r?.type?(r.raw+=n.raw,r.text+=n.text):e.push(n);continue}if(t){let e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}return e}},At=class{options;parser;constructor(t){this.options=t||_}space(t){return""}code({text:t,lang:e,escaped:r}){let n=(e||"").match(A.notSpaceStart)?.[0],i=t.replace(A.endingNewline,"")+"\n";return n?'
    '+(r?i:Ct(i,!0))+"
    \n":"
    "+(r?i:Ct(i,!0))+"
    \n"}blockquote({tokens:t}){return`
    \n${this.parser.parse(t)}
    \n`}html({text:t}){return t}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)}\n`}hr(t){return"
    \n"}list(t){let e=t.ordered,r=t.start,n="";for(let a=0;a\n"+n+"\n"}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?"paragraph"===t.tokens[0]?.type?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&"text"===t.tokens[0].tokens[0].type&&(t.tokens[0].tokens[0].text=r+" "+Ct(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`
  • ${e}
  • \n`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    \n`}table(t){let e="",r="";for(let i=0;i${n}`),"\n\n"+e+"\n"+n+"
    \n"}tablerow({text:t}){return`\n${t}\n`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`\n`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${Ct(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:r}){let n=this.parser.parseInline(r),i=kt(t);if(null===i)return n;let a='
    ",a}image({href:t,title:e,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));let i=kt(t);if(null===i)return Ct(r);let a=`${r}{let i=t[n].flat(1/0);r=r.concat(this.walkTokens(i,e))}):t.tokens&&(r=r.concat(this.walkTokens(t.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(t=>{let r={...t};if(r.async=this.defaults.async||r.async||!1,t.extensions&&(t.extensions.forEach(t=>{if(!t.name)throw new Error("extension name required");if("renderer"in t){let r=e.renderers[t.name];e.renderers[t.name]=r?function(...e){let n=t.renderer.apply(this,e);return!1===n&&(n=r.apply(this,e)),n}:t.renderer}if("tokenizer"in t){if(!t.level||"block"!==t.level&&"inline"!==t.level)throw new Error("extension level must be 'block' or 'inline'");let r=e[t.level];r?r.unshift(t.tokenizer):e[t.level]=[t.tokenizer],t.start&&("block"===t.level?e.startBlock?e.startBlock.push(t.start):e.startBlock=[t.start]:"inline"===t.level&&(e.startInline?e.startInline.push(t.start):e.startInline=[t.start]))}"childTokens"in t&&t.childTokens&&(e.childTokens[t.name]=t.childTokens)}),r.extensions=e),t.renderer){let e=this.defaults.renderer||new At(this.defaults);for(let r in t.renderer){if(!(r in e))throw new Error(`renderer '${r}' does not exist`);if(["options","parser"].includes(r))continue;let n=r,i=t.renderer[n],a=e[n];e[n]=(...t)=>{let r=i.apply(e,t);return!1===r&&(r=a.apply(e,t)),r||""}}r.renderer=e}if(t.tokenizer){let e=this.defaults.tokenizer||new St(this.defaults);for(let r in t.tokenizer){if(!(r in e))throw new Error(`tokenizer '${r}' does not exist`);if(["options","rules","lexer"].includes(r))continue;let n=r,i=t.tokenizer[n],a=e[n];e[n]=(...t)=>{let r=i.apply(e,t);return!1===r&&(r=a.apply(e,t)),r}}r.tokenizer=e}if(t.hooks){let e=this.defaults.hooks||new Lt;for(let r in t.hooks){if(!(r in e))throw new Error(`hook '${r}' does not exist`);if(["options","block"].includes(r))continue;let n=r,i=t.hooks[n],a=e[n];Lt.passThroughHooks.has(r)?e[n]=t=>{if(this.defaults.async)return Promise.resolve(i.call(e,t)).then(t=>a.call(e,t));let r=i.call(e,t);return a.call(e,r)}:e[n]=(...t)=>{let r=i.apply(e,t);return!1===r&&(r=a.apply(e,t)),r}}r.hooks=e}if(t.walkTokens){let e=this.defaults.walkTokens,n=t.walkTokens;r.walkTokens=function(t){let r=[];return r.push(n.call(this,t)),e&&(r=r.concat(e.call(this,t))),r}}this.defaults={...this.defaults,...r}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return Tt.lex(t,e??this.defaults)}parser(t,e){return Bt.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let n={...r},i={...this.defaults,...n},a=this.onError(!!i.silent,!!i.async);if(!0===this.defaults.async&&!1===n.async)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||null===e)return a(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof e)return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=t);let o=i.hooks?i.hooks.provideLexer():t?Tt.lex:Tt.lexInline,s=i.hooks?i.hooks.provideParser():t?Bt.parse:Bt.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(e):e).then(t=>o(t,i)).then(t=>i.hooks?i.hooks.processAllTokens(t):t).then(t=>i.walkTokens?Promise.all(this.walkTokens(t,i.walkTokens)).then(()=>t):t).then(t=>s(t,i)).then(t=>i.hooks?i.hooks.postprocess(t):t).catch(a);try{i.hooks&&(e=i.hooks.preprocess(e));let t=o(e,i);i.hooks&&(t=i.hooks.processAllTokens(t)),i.walkTokens&&this.walkTokens(t,i.walkTokens);let r=s(t,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(l){return a(l)}}}onError(t,e){return r=>{if(r.message+="\nPlease report this to https://github.com/markedjs/marked.",t){let t="

    An error occurred:

    "+Ct(r.message+"",!0)+"
    ";return e?Promise.resolve(t):t}if(e)return Promise.reject(r);throw r}}};function $t(t,e){return Ft.parse(t,e)}$t.options=$t.setOptions=function(t){return Ft.setOptions(t),$t.defaults=Ft.defaults,v($t.defaults),$t},$t.getDefaults=w,$t.defaults=_,$t.use=function(...t){return Ft.use(...t),$t.defaults=Ft.defaults,v($t.defaults),$t},$t.walkTokens=function(t,e){return Ft.walkTokens(t,e)},$t.parseInline=Ft.parseInline,$t.Parser=Bt,$t.parser=Bt.parse,$t.Renderer=At,$t.TextRenderer=Mt,$t.Lexer=Tt,$t.lexer=Tt.lex,$t.Tokenizer=St,$t.Hooks=Lt,$t.parse=$t;$t.options,$t.setOptions,$t.use,$t.walkTokens,$t.parseInline,Bt.parse,Tt.lex;var Et=r(60513),Dt={body:'?',height:80,width:80},Ot=new Map,Nt=new Map,jt=(0,i.K2)(t=>{for(const e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(i.Rm.debug("Registering icon pack:",e.name),"loader"in e)Nt.set(e.name,e.loader);else{if(!("icons"in e))throw i.Rm.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.');Ot.set(e.name,e.icons)}}},"registerIconPacks"),It=(0,i.K2)(async(t,e)=>{const r=((t,e,r,n="")=>{const i=t.split(":");if("@"===t.slice(0,1)){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){const t=i.pop(),r=i.pop(),o={provider:i.length>0?i[0]:n,prefix:r,name:t};return e&&!a(o)?null:o}const o=i[0],s=o.split("-");if(s.length>1){const t={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!a(t)?null:t}if(r&&""===n){const t={provider:n,prefix:"",name:o};return e&&!a(t,r)?null:t}return null})(t,!0,void 0!==e);if(!r)throw new Error(`Invalid icon name: ${t}`);const n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let o=Ot.get(n);if(!o){const t=Nt.get(n);if(!t)throw new Error(`Icon set not found: ${r.prefix}`);try{o={...await t(),prefix:n},Ot.set(n,o)}catch(l){throw i.Rm.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}const s=d(o,r.name);if(!s)throw new Error(`Icon not found: ${t}`);return s},"getRegisteredIconData"),Rt=(0,i.K2)(async t=>{try{return await It(t),!0}catch{return!1}},"isIconAvailable"),Pt=(0,i.K2)(async(t,e,r)=>{let n;try{n=await It(t,e?.fallbackPrefix)}catch(o){i.Rm.error(o),n=Dt}const a=function(t,e){const r={...l,...t},n={...f,...e},i={left:r.left,top:r.top,width:r.width,height:r.height};let a=r.body;[r,n].forEach(t=>{const e=[],r=t.hFlip,n=t.vFlip;let o,s=t.rotate;switch(r?n?s+=2:(e.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),e.push("scale(-1 1)"),i.top=i.left=0):n&&(e.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),e.push("scale(1 -1)"),i.top=i.left=0),s<0&&(s-=4*Math.floor(s/4)),s%=4,s){case 1:o=i.height/2+i.top,e.unshift("rotate(90 "+o.toString()+" "+o.toString()+")");break;case 2:e.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:o=i.width/2+i.left,e.unshift("rotate(-90 "+o.toString()+" "+o.toString()+")")}s%2==1&&(i.left!==i.top&&(o=i.left,i.left=i.top,i.top=o),i.width!==i.height&&(o=i.width,i.width=i.height,i.height=o)),e.length&&(a=function(t,e,r){const n=function(t,e="defs"){let r="";const n=t.indexOf("<"+e);for(;n>=0;){const i=t.indexOf(">",n),a=t.indexOf("",a);if(-1===o)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(o+1)}return{defs:r,content:t}}(t);return i=n.defs,a=e+n.content+r,i?""+i+""+a:a;var i,a}(a,'',""))});const o=n.width,s=n.height,c=i.width,h=i.height;let u,d;null===o?(d=null===s?"1em":"auto"===s?h:s,u=y(d,c/h)):(u="auto"===o?c:o,d=null===s?y(u,h/c):"auto"===s?h:s);const p={},g=(t,e)=>{(t=>"unset"===t||"undefined"===t||"none"===t)(e)||(p[t]=e.toString())};g("width",u),g("height",d);const m=[i.left,i.top,c,h];return p.viewBox=m.join(" "),{attributes:p,viewBox:m,body:a}}(n,e);return function(t,e){let r=-1===t.indexOf("xlink:")?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}(function(t,e=b){const r=[];let n;for(;n=x.exec(t);)r.push(n[1]);if(!r.length)return t;const i="suffix"+(16777216*Math.random()|Date.now()).toString(16);return r.forEach(r=>{const n="function"==typeof e?e(r):e+(C++).toString(),a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+a+')([")]|\\.[a-z])',"g"),"$1"+n+i+"$3")}),t=t.replace(new RegExp(i,"g"),"")}(a.body),{...a.attributes,...r})},"getIconSVG");function zt(t,{markdownAutoWrap:e}){const r=t.replace(//g,"\n").replace(/\n{2,}/g,"\n"),n=(0,Et.T)(r);return!1===e?n.replace(/ /g," "):n}function Kt(t,e={}){const r=zt(t,e),n=$t.lexer(r),a=[[]];let o=0;function s(t,e="normal"){if("text"===t.type){t.text.split("\n").forEach((t,r)=>{0!==r&&(o++,a.push([])),t.split(" ").forEach(t=>{(t=t.replace(/'/g,"'"))&&a[o].push({content:t,type:e})})})}else"strong"===t.type||"em"===t.type?t.tokens.forEach(e=>{s(e,t.type)}):"html"===t.type&&a[o].push({content:t.text,type:"normal"})}return(0,i.K2)(s,"processNode"),n.forEach(t=>{"paragraph"===t.type?t.tokens?.forEach(t=>{s(t)}):"html"===t.type&&a[o].push({content:t.text,type:"normal"})}),a}function qt(t,{markdownAutoWrap:e}={}){const r=$t.lexer(t);function n(t){return"text"===t.type?!1===e?t.text.replace(/\n */g,"
    ").replace(/ /g," "):t.text.replace(/\n */g,"
    "):"strong"===t.type?`${t.tokens?.map(n).join("")}`:"em"===t.type?`${t.tokens?.map(n).join("")}`:"paragraph"===t.type?`

    ${t.tokens?.map(n).join("")}

    `:"space"===t.type?"":"html"===t.type?`${t.text}`:"escape"===t.type?t.text:`Unsupported markdown: ${t.type}`}return(0,i.K2)(n,"output"),r.map(n).join("")}function Wt(t){return Intl.Segmenter?[...(new Intl.Segmenter).segment(t)].map(t=>t.segment):[...t]}function Ht(t,e){return Ut(t,[],Wt(e.content),e.type)}function Ut(t,e,r,n){if(0===r.length)return[{content:e.join(""),type:n},{content:"",type:n}];const[i,...a]=r,o=[...e,i];return t([{content:o.join(""),type:n}])?Ut(t,o,a,n):(0===e.length&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function Gt(t,e){if(t.some(({content:t})=>t.includes("\n")))throw new Error("splitLineToFitWidth does not support newlines in the line");return Yt(t,e)}function Yt(t,e,r=[],n=[]){if(0===t.length)return n.length>0&&r.push(n),r.length>0?r:[];let i="";" "===t[0].content&&(i=" ",t.shift());const a=t.shift()??{content:" ",type:"normal"},o=[...n];if(""!==i&&o.push({content:i,type:"normal"}),o.push(a),e(o))return Yt(t,e,r,o);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){const[n,i]=Ht(e,a);r.push([n]),i.content&&t.unshift(i)}return Yt(t,e,r)}function Xt(t,e){e&&t.attr("style",e)}async function Vt(t,e,r,n,a=!1){const o=t.append("foreignObject");o.attr("width",10*r+"px"),o.attr("height",10*r+"px");const s=o.append("xhtml:div");let l=e.label;e.label&&(0,i.Wi)(e.label)&&(l=await(0,i.VJ)(e.label.replace(i.Y2.lineBreakRegex,"\n"),(0,i.D7)()));const c=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),Xt(h,e.labelStyle),h.attr("class",`${c} ${n}`),Xt(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),a&&s.attr("class","labelBkg");let u=s.node().getBoundingClientRect();return u.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),u=s.node().getBoundingClientRect()),o.node()}function Zt(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function Qt(t,e,r){const n=t.append("text"),i=Zt(n,1,e);ee(i,r);const a=i.node().getComputedTextLength();return n.remove(),a}function Jt(t,e,r){const n=t.append("text"),i=Zt(n,1,e);ee(i,[{content:r,type:"normal"}]);const a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function te(t,e,r,n=!1){const a=e.append("g"),o=a.insert("rect").attr("class","background").attr("style","stroke: none"),s=a.append("text").attr("y","-10.1");let l=0;for(const c of r){const e=(0,i.K2)(e=>Qt(a,1.1,e)<=t,"checkWidth"),r=e(c)?[c]:Gt(c,e);for(const t of r){ee(Zt(s,l,1.1),t),l++}}if(n){const t=s.node().getBBox(),e=2;return o.attr("x",t.x-e).attr("y",t.y-e).attr("width",t.width+2*e).attr("height",t.height+2*e),a.node()}return s.node()}function ee(t,e){t.text(""),e.forEach((e,r)=>{const n=t.append("tspan").attr("font-style","em"===e.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===e.type?"bold":"normal");0===r?n.text(e.content):n.text(" "+e.content)})}async function re(t){const e=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(t,r,n)=>(e.push((async()=>{const e=`${r}:${n}`;return await Rt(e)?await Pt(e,void 0,{class:"label-icon"}):``})()),t));const r=await Promise.all(e);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??"")}(0,i.K2)(zt,"preprocessMarkdown"),(0,i.K2)(Kt,"markdownToLines"),(0,i.K2)(qt,"markdownToHTML"),(0,i.K2)(Wt,"splitTextToChars"),(0,i.K2)(Ht,"splitWordToFitWidth"),(0,i.K2)(Ut,"splitWordToFitWidthRecursion"),(0,i.K2)(Gt,"splitLineToFitWidth"),(0,i.K2)(Yt,"splitLineToFitWidthRecursion"),(0,i.K2)(Xt,"applyStyle"),(0,i.K2)(Vt,"addHtmlSpan"),(0,i.K2)(Zt,"createTspan"),(0,i.K2)(Qt,"computeWidthOfText"),(0,i.K2)(Jt,"computeDimensionOfText"),(0,i.K2)(te,"createFormattedText"),(0,i.K2)(ee,"updateTextContentAndStyles"),(0,i.K2)(re,"replaceIconSubstring");var ne=(0,i.K2)(async(t,e="",{style:r="",isTitle:a=!1,classes:o="",useHtmlLabels:s=!0,isNode:l=!0,width:c=200,addSvgBackground:h=!1}={},u)=>{if(i.Rm.debug("XYZ createText",e,r,a,o,s,l,"addSvgBackground: ",h),s){const a=qt(e,u),s=await re((0,n.Sm)(a)),d=e.replace(/\\\\/g,"\\"),p={isNode:l,label:(0,i.Wi)(e)?d:s,labelStyle:r.replace("fill:","color:")};return await Vt(t,p,c,o,h)}{const n=te(c,t,Kt(e.replace(//g,"
    ").replace("
    ","
    "),u),!!e&&h);if(l){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));const t=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");(0,k.Ltv)(n).attr("style",t)}else{const t=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");(0,k.Ltv)(n).select("rect").attr("style",t.replace(/background:/g,"fill:"));const e=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");(0,k.Ltv)(n).select("text").attr("style",e)}return n}},"createText")},69119:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BLANK_URL=e.relativeFirstCharacters=e.whitespaceEscapeCharsRegex=e.urlSchemeRegex=e.ctrlCharactersRegex=e.htmlCtrlEntityRegex=e.htmlEntitiesRegex=e.invalidProtocolRegex=void 0,e.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im,e.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g,e.htmlCtrlEntityRegex=/&(newline|tab);/gi,e.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,e.urlSchemeRegex=/^.+(:|:)/gim,e.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g,e.relativeFirstCharacters=[".","/"],e.BLANK_URL="about:blank"},69471:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(97271);const i=(0,r(40367).A)(Object.keys,Object);var a=Object.prototype.hasOwnProperty;const o=function(t){if(!(0,n.A)(t))return i(t);var e=[];for(var r in Object(t))a.call(t,r)&&"constructor"!=r&&e.push(r);return e}},70331:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=n(r(21312)),s=n(r(52569)),l=n(r(50565)),c=r(97481);e.default=function({tags:t}){return(0,i.jsxs)("div",{className:l.default.root,children:[(0,i.jsx)(c.Typography,{variant:"body2",component:"div",children:(0,i.jsx)(o.default,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,a.default)(l.default.tags,"padding--none","margin-left--sm"),children:t.map(({label:t,permalink:e,description:r})=>(0,i.jsx)("li",{className:l.default.tag,children:(0,i.jsx)(s.default,{label:t,permalink:e,description:r})},e))})]})}},70451:(t,e,r)=>{"use strict";function n(t,e){let r;if(void 0===e)for(const n of t)null!=n&&(r=n)&&(r=n);else{let n=-1;for(let i of t)null!=(i=e(i,++n,t))&&(r=i)&&(r=i)}return r}function i(t,e){let r;if(void 0===e)for(const n of t)null!=n&&(r>n||void 0===r&&n>=n)&&(r=n);else{let n=-1;for(let i of t)null!=(i=e(i,++n,t))&&(r>i||void 0===r&&i>=i)&&(r=i)}return r}function a(t){return t}r.d(e,{JLW:()=>us,l78:()=>x,tlR:()=>y,qrM:()=>vs,Yu4:()=>Ts,IA3:()=>Ms,Wi0:()=>Ls,PGM:()=>Fs,OEq:()=>Es,y8u:()=>Ns,olC:()=>Is,IrU:()=>Ps,oDi:()=>qs,Q7f:()=>Hs,cVp:()=>Gs,lUB:()=>fs,Lx9:()=>Xs,nVG:()=>nl,uxU:()=>il,Xf2:()=>sl,GZz:()=>cl,UPb:()=>ul,dyv:()=>hl,GPZ:()=>Gr,Sk5:()=>Jr,bEH:()=>En,n8j:()=>ys,T9B:()=>n,jkA:()=>i,rLf:()=>Cs,WH:()=>Kn,m4Y:()=>bi,UMr:()=>zn,w7C:()=>No,zt:()=>jo,Ltv:()=>Io,UAC:()=>Ni,DCK:()=>fa,TUC:()=>Hi,Agd:()=>Di,t6C:()=>Li,wXd:()=>$i,ABi:()=>zi,Ui6:()=>ea,rGn:()=>Ui,ucG:()=>Fi,YPH:()=>Pi,Mol:()=>Wi,PGu:()=>Ki,GuW:()=>qi,hkb:()=>pn});var o=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function p(t){return e=>+t(e)}function f(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function g(){return!this.__axis}function m(t,e){var r=[],n=null,i=null,m=6,y=6,x=3,b="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,C=t===o||t===c?-1:1,k=t===c||t===s?"x":"y",w=t===o||t===l?u:d;function _(u){var d=null==n?e.ticks?e.ticks.apply(e,r):e.domain():n,_=null==i?e.tickFormat?e.tickFormat.apply(e,r):a:i,v=Math.max(m,0)+x,S=e.range(),T=+S[0]+b,A=+S[S.length-1]+b,M=(e.bandwidth?f:p)(e.copy(),b),B=u.selection?u.selection():u,L=B.selectAll(".domain").data([null]),F=B.selectAll(".tick").data(d,e).order(),$=F.exit(),E=F.enter().append("g").attr("class","tick"),D=F.select("line"),O=F.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),F=F.merge(E),D=D.merge(E.append("line").attr("stroke","currentColor").attr(k+"2",C*m)),O=O.merge(E.append("text").attr("fill","currentColor").attr(k,C*v).attr("dy",t===o?"0em":t===l?"0.71em":"0.32em")),u!==B&&(L=L.transition(u),F=F.transition(u),D=D.transition(u),O=O.transition(u),$=$.transition(u).attr("opacity",h).attr("transform",function(t){return isFinite(t=M(t))?w(t+b):this.getAttribute("transform")}),E.attr("opacity",h).attr("transform",function(t){var e=this.parentNode.__axis;return w((e&&isFinite(e=e(t))?e:M(t))+b)})),$.remove(),L.attr("d",t===c||t===s?y?"M"+C*y+","+T+"H"+b+"V"+A+"H"+C*y:"M"+b+","+T+"V"+A:y?"M"+T+","+C*y+"V"+b+"H"+A+"V"+C*y:"M"+T+","+b+"H"+A),F.attr("opacity",1).attr("transform",function(t){return w(M(t)+b)}),D.attr(k+"2",C*m),O.attr(k,C*v).text(_),B.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),B.each(function(){this.__axis=M})}return _.scale=function(t){return arguments.length?(e=t,_):e},_.ticks=function(){return r=Array.from(arguments),_},_.tickArguments=function(t){return arguments.length?(r=null==t?[]:Array.from(t),_):r.slice()},_.tickValues=function(t){return arguments.length?(n=null==t?null:Array.from(t),_):n&&n.slice()},_.tickFormat=function(t){return arguments.length?(i=t,_):i},_.tickSize=function(t){return arguments.length?(m=y=+t,_):m},_.tickSizeInner=function(t){return arguments.length?(m=+t,_):m},_.tickSizeOuter=function(t){return arguments.length?(y=+t,_):y},_.tickPadding=function(t){return arguments.length?(x=+t,_):x},_.offset=function(t){return arguments.length?(b=+t,_):b},_}function y(t){return m(o,t)}function x(t){return m(l,t)}function b(){}function C(t){return null==t?b:function(){return this.querySelector(t)}}function k(){return[]}function w(t){return null==t?k:function(){return this.querySelectorAll(t)}}function _(t){return function(){return null==(e=t.apply(this,arguments))?[]:Array.isArray(e)?e:Array.from(e);var e}}function v(t){return function(){return this.matches(t)}}function S(t){return function(e){return e.matches(t)}}var T=Array.prototype.find;function A(){return this.firstElementChild}var M=Array.prototype.filter;function B(){return Array.from(this.children)}function L(t){return new Array(t.length)}function F(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function $(t,e,r,n,i,a){for(var o,s=0,l=e.length,c=a.length;se?1:t>=e?0:NaN}F.prototype={constructor:F,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var j="http://www.w3.org/1999/xhtml";const I={svg:"http://www.w3.org/2000/svg",xhtml:j,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function R(t){var e=t+="",r=e.indexOf(":");return r>=0&&"xmlns"!==(e=t.slice(0,r))&&(t=t.slice(r+1)),I.hasOwnProperty(e)?{space:I[e],local:t}:t}function P(t){return function(){this.removeAttribute(t)}}function z(t){return function(){this.removeAttributeNS(t.space,t.local)}}function K(t,e){return function(){this.setAttribute(t,e)}}function q(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function W(t,e){return function(){var r=e.apply(this,arguments);null==r?this.removeAttribute(t):this.setAttribute(t,r)}}function H(t,e){return function(){var r=e.apply(this,arguments);null==r?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function U(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function G(t){return function(){this.style.removeProperty(t)}}function Y(t,e,r){return function(){this.style.setProperty(t,e,r)}}function X(t,e,r){return function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function V(t,e){return t.style.getPropertyValue(e)||U(t).getComputedStyle(t,null).getPropertyValue(e)}function Z(t){return function(){delete this[t]}}function Q(t,e){return function(){this[t]=e}}function J(t,e){return function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new rt(t)}function rt(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function nt(t,e){for(var r=et(t),n=-1,i=e.length;++n=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Mt=[null];function Bt(t,e){this._groups=t,this._parents=e}function Lt(){return new Bt([[document.documentElement]],Mt)}Bt.prototype=Lt.prototype={constructor:Bt,select:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i=k&&(k=C+1);!(b=y[k])&&++k=0;)(n=i[a])&&(o&&4^n.compareDocumentPosition(o)&&o.parentNode.insertBefore(n,o),o=n);return this},sort:function(t){function e(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}t||(t=N);for(var r=this._groups,n=r.length,i=new Array(n),a=0;a1?this.each((null==e?G:"function"==typeof e?X:Y)(t,e,null==r?"":r)):V(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Z:"function"==typeof e?J:Q)(t,e)):this.node()[t]},classed:function(t,e){var r=tt(t+"");if(arguments.length<2){for(var n=et(this.node()),i=-1,a=r.length;++i=0&&(e=t.slice(r+1),t=t.slice(0,r)),{type:t,name:e}})}(t+""),o=a.length;if(!(arguments.length<2)){for(s=e?vt:_t,n=0;n{}};function Et(){for(var t,e=0,r=arguments.length,n={};e=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),o=-1,s=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o0)for(var r,n,i=new Array(r),a=0;a=0&&e._call.call(void 0,t),e=e._next;--Pt}()}finally{Pt=0,function(){var t,e,r=It,n=1/0;for(;r;)r._call?(n>r._time&&(n=r._time),t=r,r=r._next):(e=r._next,r._next=null,r=t?t._next=e:It=e);Rt=t,te(n)}(),Wt=0}}function Jt(){var t=Ut.now(),e=t-qt;e>1e3&&(Ht-=e,qt=t)}function te(t){Pt||(zt&&(zt=clearTimeout(zt)),t-Wt>24?(t<1/0&&(zt=setTimeout(Qt,t-Ut.now()-Ht)),Kt&&(Kt=clearInterval(Kt))):(Kt||(qt=Ut.now(),Kt=setInterval(Jt,1e3)),Pt=1,Gt(Qt)))}function ee(t,e,r){var n=new Vt;return e=null==e?0:+e,n.restart(r=>{n.stop(),t(r+e)},e,r),n}Vt.prototype=Zt.prototype={constructor:Vt,restart:function(t,e,r){if("function"!=typeof t)throw new TypeError("callback is not a function");r=(null==r?Yt():+r)+(null==e?0:+e),this._next||Rt===this||(Rt?Rt._next=this:It=this,Rt=this),this._call=t,this._time=r,te()},stop:function(){this._call&&(this._call=null,this._time=1/0,te())}};var re=jt("start","end","cancel","interrupt"),ne=[];function ie(t,e,r,n,i,a){var o=t.__transition;if(o){if(r in o)return}else t.__transition={};!function(t,e,r){var n,i=t.__transition;function a(t){r.state=1,r.timer.restart(o,r.delay,r.time),r.delay<=t&&o(t-r.delay)}function o(a){var c,h,u,d;if(1!==r.state)return l();for(c in i)if((d=i[c]).name===r.name){if(3===d.state)return ee(o);4===d.state?(d.state=6,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete i[c]):+c0)throw new Error("too late; already scheduled");return r}function oe(t,e){var r=se(t,e);if(r.state>3)throw new Error("too late; already running");return r}function se(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function le(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var ce,he=180/Math.PI,ue={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function de(t,e,r,n,i,a){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,l/=s),t*n180?e+=360:e-t>180&&(t+=360),a.push({i:r.push(i(r)+"rotate(",null,n)-2,x:le(t,e)})):e&&r.push(i(r)+"rotate("+e+n)}(a.rotate,o.rotate,s,l),function(t,e,r,a){t!==e?a.push({i:r.push(i(r)+"skewX(",null,n)-2,x:le(t,e)}):e&&r.push(i(r)+"skewX("+e+n)}(a.skewX,o.skewX,s,l),function(t,e,r,n,a,o){if(t!==r||e!==n){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:le(t,r)},{i:s-2,x:le(e,n)})}else 1===r&&1===n||a.push(i(a)+"scale("+r+","+n+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a=o=null,function(t){for(var e,r=-1,n=l.length;++r>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?Re(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?Re(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Me.exec(t))?new Ke(e[1],e[2],e[3],1):(e=Be.exec(t))?new Ke(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Le.exec(t))?Re(e[1],e[2],e[3],e[4]):(e=Fe.exec(t))?Re(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=$e.exec(t))?Ye(e[1],e[2]/100,e[3]/100,1):(e=Ee.exec(t))?Ye(e[1],e[2]/100,e[3]/100,e[4]):De.hasOwnProperty(t)?Ie(De[t]):"transparent"===t?new Ke(NaN,NaN,NaN,0):null}function Ie(t){return new Ke(t>>16&255,t>>8&255,255&t,1)}function Re(t,e,r,n){return n<=0&&(t=e=r=NaN),new Ke(t,e,r,n)}function Pe(t){return t instanceof ke||(t=je(t)),t?new Ke((t=t.rgb()).r,t.g,t.b,t.opacity):new Ke}function ze(t,e,r,n){return 1===arguments.length?Pe(t):new Ke(t,e,r,null==n?1:n)}function Ke(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function qe(){return`#${Ge(this.r)}${Ge(this.g)}${Ge(this.b)}`}function We(){const t=He(this.opacity);return`${1===t?"rgb(":"rgba("}${Ue(this.r)}, ${Ue(this.g)}, ${Ue(this.b)}${1===t?")":`, ${t})`}`}function He(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Ue(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Ge(t){return((t=Ue(t))<16?"0":"")+t.toString(16)}function Ye(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new Ve(t,e,r,n)}function Xe(t){if(t instanceof Ve)return new Ve(t.h,t.s,t.l,t.opacity);if(t instanceof ke||(t=je(t)),!t)return new Ve;if(t instanceof Ve)return t;var e=(t=t.rgb()).r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),o=NaN,s=a-i,l=(a+i)/2;return s?(o=e===a?(r-n)/s+6*(r0&&l<1?0:o,new Ve(o,s,l,t.opacity)}function Ve(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function Ze(t){return(t=(t||0)%360)<0?t+360:t}function Qe(t){return Math.max(0,Math.min(1,t||0))}function Je(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}function tr(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}be(ke,je,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Oe,formatHex:Oe,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Xe(this).formatHsl()},formatRgb:Ne,toString:Ne}),be(Ke,ze,Ce(ke,{brighter(t){return t=null==t?_e:Math.pow(_e,t),new Ke(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?we:Math.pow(we,t),new Ke(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ke(Ue(this.r),Ue(this.g),Ue(this.b),He(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:qe,formatHex:qe,formatHex8:function(){return`#${Ge(this.r)}${Ge(this.g)}${Ge(this.b)}${Ge(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:We,toString:We})),be(Ve,function(t,e,r,n){return 1===arguments.length?Xe(t):new Ve(t,e,r,null==n?1:n)},Ce(ke,{brighter(t){return t=null==t?_e:Math.pow(_e,t),new Ve(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?we:Math.pow(we,t),new Ve(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new Ke(Je(t>=240?t-240:t+120,i,n),Je(t,i,n),Je(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new Ve(Ze(this.h),Qe(this.s),Qe(this.l),He(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=He(this.opacity);return`${1===t?"hsl(":"hsla("}${Ze(this.h)}, ${100*Qe(this.s)}%, ${100*Qe(this.l)}%${1===t?")":`, ${t})`}`}}));const er=t=>()=>t;function rr(t,e){return function(r){return t+r*e}}function nr(t){return 1===(t=+t)?ir:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):er(isNaN(e)?r:e)}}function ir(t,e){var r=e-t;return r?rr(t,r):er(isNaN(t)?e:t)}const ar=function t(e){var r=nr(e);function n(t,e){var n=r((t=ze(t)).r,(e=ze(e)).r),i=r(t.g,e.g),a=r(t.b,e.b),o=ir(t.opacity,e.opacity);return function(e){return t.r=n(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return n.gamma=t,n}(1);function or(t){return function(e){var r,n,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(r=0;r=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],o=n>0?t[n-1]:2*i-a,s=na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:le(r,n)})),a=lr.lastIndex;return a=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?ae:oe;return function(){var o=a(this,t),s=o.on;s!==n&&(i=(n=s).copy()).on(e,r),o.on=i}}(r,t,e))},attr:function(t,e){var r=R(t),n="transform"===r?ge:hr;return this.attrTween(t,"function"==typeof e?(r.local?mr:gr)(r,n,xe(this,"attr."+t,e)):null==e?(r.local?dr:ur)(r):(r.local?fr:pr)(r,n,e))},attrTween:function(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;var n=R(t);return this.tween(r,(n.local?yr:xr)(n,e))},style:function(t,e,r){var n="transform"==(t+="")?fe:hr;return null==e?this.styleTween(t,function(t,e){var r,n,i;return function(){var a=V(this,t),o=(this.style.removeProperty(t),V(this,t));return a===o?null:a===r&&o===n?i:i=e(r=a,n=o)}}(t,n)).on("end.style."+t,vr(t)):"function"==typeof e?this.styleTween(t,function(t,e,r){var n,i,a;return function(){var o=V(this,t),s=r(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=V(this,t)),o===l?null:o===n&&l===i?a:(i=l,a=e(n=o,s))}}(t,n,xe(this,"style."+t,e))).each(function(t,e){var r,n,i,a,o="style."+e,s="end."+o;return function(){var l=oe(this,t),c=l.on,h=null==l.value[o]?a||(a=vr(e)):void 0;c===r&&i===h||(n=(r=c).copy()).on(s,i=h),l.on=n}}(this._id,t)):this.styleTween(t,function(t,e,r){var n,i,a=r+"";return function(){var o=V(this,t);return o===a?null:o===n?i:i=e(n=o,r)}}(t,n,e),r).on("end.style."+t,null)},styleTween:function(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;return this.tween(n,function(t,e,r){var n,i;function a(){var a=e.apply(this,arguments);return a!==i&&(n=(i=a)&&function(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}(t,a,r)),n}return a._value=e,a}(t,e,null==r?"":r))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(xe(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,r;function n(){var n=t.apply(this,arguments);return n!==r&&(e=(r=n)&&function(t){return function(e){this.textContent=t.call(this,e)}}(n)),e}return n._value=t,n}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n,i=se(this.node(),r).tween,a=0,o=i.length;a2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(n?"interrupt":"cancel",t,t.__data__,r.index,r.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)})},Ft.prototype.transition=function(t){var e,r;t instanceof Tr?(e=t._id,t=t._name):(e=Ar(),(r=Br).time=Yt(),t=null==t?null:t+"");for(var n=this._groups,i=n.length,a=0;a1?n[0]+n.slice(2):n,+t.slice(r+1)]}function Ir(t){return(t=jr(Math.abs(t)))?t[1]:NaN}var Rr,Pr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function zr(t){if(!(e=Pr.exec(t)))throw new Error("invalid format: "+t);var e;return new Kr({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Kr(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function qr(t,e){var r=jr(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}zr.prototype=Kr.prototype,Kr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Wr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>qr(100*t,e),r:qr,s:function(t,e){var r=jr(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(Rr=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+jr(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Hr(t){return t}var Ur,Gr,Yr,Xr=Array.prototype.map,Vr=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function Zr(t){var e,r,n=void 0===t.grouping||void 0===t.thousands?Hr:(e=Xr.call(t.grouping,Number),r=t.thousands+"",function(t,n){for(var i=t.length,a=[],o=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(t.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[o=(o+1)%e.length];return a.reverse().join(r)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Hr:function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(Xr.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=zr(t)).fill,r=t.align,u=t.sign,d=t.symbol,p=t.zero,f=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):Wr[x]||(void 0===m&&(m=12),y=!0,x="g"),(p||"0"===e&&"="===r)&&(p=!0,e="0",r="=");var b="$"===d?i:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",C="$"===d?a:/[%p]/.test(x)?l:"",k=Wr[x],w=/[defgprs%]/.test(x);function _(t){var i,a,l,d=b,_=C;if("c"===x)_=k(t)+_,t="";else{var v=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:k(Math.abs(t),m),y&&(t=function(t){t:for(var e,r=t.length,n=1,i=-1;n0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),v&&0===+t&&"+"!==u&&(v=!1),d=(v?"("===u?u:c:"-"===u||"("===u?"":u)+d,_=("s"===x?Vr[8+Rr/3]:"")+_+(v&&"("===u?")":""),w)for(i=-1,a=t.length;++i(l=t.charCodeAt(i))||l>57){_=(46===l?o+t.slice(i+1):t.slice(i))+_,t=t.slice(0,i);break}}g&&!p&&(t=n(t,1/0));var S=d.length+t.length+_.length,T=S>1)+d+t+_+T.slice(S);break;default:t=T+d+t+_}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),_.toString=function(){return t+""},_}return{format:u,formatPrefix:function(t,e){var r=u(((t=zr(t)).type="f",t)),n=3*Math.max(-8,Math.min(8,Math.floor(Ir(e)/3))),i=Math.pow(10,-n),a=Vr[8+n/3];return function(t){return r(i*t)+a}}}}function Qr(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function Jr(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=en)):void 0===e&&(e=tn);for(var r,n,i,a,o,s=new an(t),l=[s];r=l.pop();)if((i=e(r.data))&&(o=(i=Array.from(i)).length))for(r.children=i,a=o-1;a>=0;--a)l.push(n=i[a]=new an(i[a])),n.parent=r,n.depth=r.depth+1;return s.eachBefore(nn)}function tn(t){return t.children}function en(t){return Array.isArray(t)?t[1]:null}function rn(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function nn(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function an(t){this.data=t,this.depth=this.height=0,this.parent=null}function on(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function sn(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,c=t.value&&(n-e)/t.value;++s=0;--n)a.push(r[n]);return this},find:function(t,e){let r=-1;for(const n of this)if(t.call(e,n,++r,this))return n},sum:function(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;t=r.pop(),e=n.pop();for(;t===e;)i=t,t=r.pop(),e=n.pop();return i}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e},copy:function(){return Jr(this).eachBefore(rn)},[Symbol.iterator]:function*(){var t,e,r,n,i=this,a=[i];do{for(t=a.reverse(),a=[];i=t.pop();)if(yield i,e=i.children)for(r=0,n=e.length;rd&&(d=s),m=h*h*g,(p=Math.max(d/m,m/u))>f){h-=s;break}f=p}y.push(o={value:h,dice:l1?e:1)},r}((1+Math.sqrt(5))/2);function hn(t){if("function"!=typeof t)throw new Error;return t}function un(){return 0}function dn(t){return function(){return t}}function pn(){var t=cn,e=!1,r=1,n=1,i=[0],a=un,o=un,s=un,l=un,c=un;function h(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(u),i=[0],e&&t.eachBefore(on),t}function u(e){var r=i[e.depth],n=e.x0+r,h=e.y0+r,u=e.x1-r,d=e.y1-r;ukn?Math.pow(t,1/3):t/Cn+xn}function Sn(t){return t>bn?t*t*t:Cn*(t-xn)}function Tn(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function An(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Mn(t){if(t instanceof Ln)return new Ln(t.h,t.c,t.l,t.opacity);if(t instanceof _n||(t=wn(t)),0===t.a&&0===t.b)return new Ln(NaN,0180||r<-180?r-360*Math.round(r/360):r):er(isNaN(t)?e:t)});$n(ir);function Dn(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class On extends Map{constructor(t,e=Rn){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[r,n]of t)this.set(r,n)}get(t){return super.get(Nn(this,t))}has(t){return super.has(Nn(this,t))}set(t,e){return super.set(jn(this,t),e)}delete(t){return super.delete(In(this,t))}}Set;function Nn({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):r}function jn({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function In({_intern:t,_key:e},r){const n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function Rn(t){return null!==t&&"object"==typeof t?t.valueOf():t}const Pn=Symbol("implicit");function zn(){var t=new On,e=[],r=[],n=Pn;function i(i){let a=t.get(i);if(void 0===a){if(n!==Pn)return n;t.set(i,a=e.push(i)-1)}return r[a%r.length]}return i.domain=function(r){if(!arguments.length)return e.slice();e=[],t=new On;for(const n of r)t.has(n)||t.set(n,e.push(n)-1);return i},i.range=function(t){return arguments.length?(r=Array.from(t),i):r.slice()},i.unknown=function(t){return arguments.length?(n=t,i):n},i.copy=function(){return zn(e,r).unknown(n)},Dn.apply(i,arguments),i}function Kn(){var t,e,r=zn().unknown(void 0),n=r.domain,i=r.range,a=0,o=1,s=!1,l=0,c=0,h=.5;function u(){var r=n().length,u=o=qn?10:a>=Wn?5:a>=Hn?2:1;let s,l,c;return i<0?(c=Math.pow(10,-i)/o,s=Math.round(t*c),l=Math.round(e*c),s/ce&&--l,c=-c):(c=Math.pow(10,i)*o,s=Math.round(t/c),l=Math.round(e/c),s*ce&&--l),le?1:t>=e?0:NaN}function Vn(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function Zn(t){let e,r,n;function i(t,n,i=0,a=t.length){if(i>>1;r(t[e],n)<0?i=e+1:a=e}while(iXn(t(e),r),n=(e,r)=>t(e)-r):(e=t===Xn||t===Vn?t:Qn,r=t,n=t),{left:i,center:function(t,e,r=0,a=t.length){const o=i(t,e,r,a-1);return o>r&&n(t[o-1],e)>-n(t[o],e)?o-1:o},right:function(t,n,i=0,a=t.length){if(i>>1;r(t[e],n)<=0?i=e+1:a=e}while(ie&&(r=t,t=e,e=r),c=function(r){return Math.max(t,Math.min(e,r))}),n=l>2?pi:di,i=a=null,u}function u(e){return null==e||isNaN(e=+e)?r:(i||(i=n(o.map(t),s,l)))(t(c(e)))}return u.invert=function(r){return c(e((a||(a=n(s,o.map(t),le)))(r)))},u.domain=function(t){return arguments.length?(o=Array.from(t,li),h()):o.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=si,h()},u.clamp=function(t){return arguments.length?(c=!!t||hi,h()):c!==hi},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(r=t,u):r},function(r,n){return t=r,e=n,h()}}function mi(){return gi()(hi,hi)}function yi(t,e,r,n){var i,a=Yn(t,e,r);switch((n=zr(null==n?",f":n)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=n.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ir(e)/3)))-Ir(Math.abs(t)))}(a,o))||(n.precision=i),Yr(n,o);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ir(e)-Ir(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(n.precision=i-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(i=function(t){return Math.max(0,-Ir(Math.abs(t)))}(a))||(n.precision=i-2*("%"===n.type))}return Gr(n)}function xi(t){var e=t.domain;return t.ticks=function(t){var r=e();return function(t,e,r){if(!((r=+r)>0))return[];if((t=+t)===(e=+e))return[t];const n=e=i))return[];const s=a-i+1,l=new Array(s);if(n)if(o<0)for(let c=0;c0;){if((i=Gn(l,c,r))===n)return a[o]=l,a[s]=c,e(a);if(i>0)l=Math.floor(l/i)*i,c=Math.ceil(c/i)*i;else{if(!(i<0))break;l=Math.ceil(l*i)/i,c=Math.floor(c*i)/i}n=i}return t},t}function bi(){var t=mi();return t.copy=function(){return fi(t,bi())},Dn.apply(t,arguments),xi(t)}const Ci=1e3,ki=6e4,wi=36e5,_i=864e5,vi=6048e5,Si=2592e6,Ti=31536e6,Ai=new Date,Mi=new Date;function Bi(t,e,r,n){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=r=>(t(r=new Date(r-1)),e(r,1),t(r),r),i.round=t=>{const e=i(t),r=i.ceil(t);return t-e(e(t=new Date(+t),null==r?1:Math.floor(r)),t),i.range=(r,n,a)=>{const o=[];if(r=i.ceil(r),a=null==a?1:Math.floor(a),!(r0))return o;let s;do{o.push(s=new Date(+r)),e(r,a),t(r)}while(sBi(e=>{if(e>=e)for(;t(e),!r(e);)e.setTime(e-1)},(t,n)=>{if(t>=t)if(n<0)for(;++n<=0;)for(;e(t,-1),!r(t););else for(;--n>=0;)for(;e(t,1),!r(t););}),r&&(i.count=(e,n)=>(Ai.setTime(+e),Mi.setTime(+n),t(Ai),t(Mi),Math.floor(r(Ai,Mi))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(n?e=>n(e)%t===0:e=>i.count(0,e)%t===0):i:null)),i}const Li=Bi(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Li.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Bi(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):Li:null);Li.range;const Fi=Bi(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*Ci)},(t,e)=>(e-t)/Ci,t=>t.getUTCSeconds()),$i=(Fi.range,Bi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Ci)},(t,e)=>{t.setTime(+t+e*ki)},(t,e)=>(e-t)/ki,t=>t.getMinutes())),Ei=($i.range,Bi(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*ki)},(t,e)=>(e-t)/ki,t=>t.getUTCMinutes())),Di=(Ei.range,Bi(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Ci-t.getMinutes()*ki)},(t,e)=>{t.setTime(+t+e*wi)},(t,e)=>(e-t)/wi,t=>t.getHours())),Oi=(Di.range,Bi(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*wi)},(t,e)=>(e-t)/wi,t=>t.getUTCHours())),Ni=(Oi.range,Bi(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ki)/_i,t=>t.getDate()-1)),ji=(Ni.range,Bi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/_i,t=>t.getUTCDate()-1)),Ii=(ji.range,Bi(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/_i,t=>Math.floor(t/_i)));Ii.range;function Ri(t){return Bi(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(t,e)=>{t.setDate(t.getDate()+7*e)},(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ki)/vi)}const Pi=Ri(0),zi=Ri(1),Ki=Ri(2),qi=Ri(3),Wi=Ri(4),Hi=Ri(5),Ui=Ri(6);Pi.range,zi.range,Ki.range,qi.range,Wi.range,Hi.range,Ui.range;function Gi(t){return Bi(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)},(t,e)=>(e-t)/vi)}const Yi=Gi(0),Xi=Gi(1),Vi=Gi(2),Zi=Gi(3),Qi=Gi(4),Ji=Gi(5),ta=Gi(6),ea=(Yi.range,Xi.range,Vi.range,Zi.range,Qi.range,Ji.range,ta.range,Bi(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear()),t=>t.getMonth())),ra=(ea.range,Bi(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear()),t=>t.getUTCMonth())),na=(ra.range,Bi(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear()));na.every=t=>isFinite(t=Math.floor(t))&&t>0?Bi(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)}):null;na.range;const ia=Bi(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());ia.every=t=>isFinite(t=Math.floor(t))&&t>0?Bi(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)}):null;ia.range;function aa(t,e,r,n,i,a){const o=[[Fi,1,Ci],[Fi,5,5e3],[Fi,15,15e3],[Fi,30,3e4],[a,1,ki],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,wi],[i,3,108e5],[i,6,216e5],[i,12,432e5],[n,1,_i],[n,2,1728e5],[r,1,vi],[e,1,Si],[e,3,7776e6],[t,1,Ti]];function s(e,r,n){const i=Math.abs(r-e)/n,a=Zn(([,,t])=>t).right(o,i);if(a===o.length)return t.every(Yn(e/Ti,r/Ti,n));if(0===a)return Li.every(Math.max(Yn(e,r,n),1));const[s,l]=o[i/o[a-1][2][t.toLowerCase(),e]))}function _a(t,e,r){var n=ma.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function va(t,e,r){var n=ma.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function Sa(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function Ta(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function Aa(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function Ma(t,e,r){var n=ma.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Ba(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function La(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function Fa(t,e,r){var n=ma.exec(e.slice(r,r+1));return n?(t.q=3*n[0]-3,r+n[0].length):-1}function $a(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function Ea(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Da(t,e,r){var n=ma.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function Oa(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function Na(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function ja(t,e,r){var n=ma.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function Ia(t,e,r){var n=ma.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function Ra(t,e,r){var n=ma.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function Pa(t,e,r){var n=ya.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function za(t,e,r){var n=ma.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function Ka(t,e,r){var n=ma.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function qa(t,e){return ba(t.getDate(),e,2)}function Wa(t,e){return ba(t.getHours(),e,2)}function Ha(t,e){return ba(t.getHours()%12||12,e,2)}function Ua(t,e){return ba(1+Ni.count(na(t),t),e,3)}function Ga(t,e){return ba(t.getMilliseconds(),e,3)}function Ya(t,e){return Ga(t,e)+"000"}function Xa(t,e){return ba(t.getMonth()+1,e,2)}function Va(t,e){return ba(t.getMinutes(),e,2)}function Za(t,e){return ba(t.getSeconds(),e,2)}function Qa(t){var e=t.getDay();return 0===e?7:e}function Ja(t,e){return ba(Pi.count(na(t)-1,t),e,2)}function to(t){var e=t.getDay();return e>=4||0===e?Wi(t):Wi.ceil(t)}function eo(t,e){return t=to(t),ba(Wi.count(na(t),t)+(4===na(t).getDay()),e,2)}function ro(t){return t.getDay()}function no(t,e){return ba(zi.count(na(t)-1,t),e,2)}function io(t,e){return ba(t.getFullYear()%100,e,2)}function ao(t,e){return ba((t=to(t)).getFullYear()%100,e,2)}function oo(t,e){return ba(t.getFullYear()%1e4,e,4)}function so(t,e){var r=t.getDay();return ba((t=r>=4||0===r?Wi(t):Wi.ceil(t)).getFullYear()%1e4,e,4)}function lo(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+ba(e/60|0,"0",2)+ba(e%60,"0",2)}function co(t,e){return ba(t.getUTCDate(),e,2)}function ho(t,e){return ba(t.getUTCHours(),e,2)}function uo(t,e){return ba(t.getUTCHours()%12||12,e,2)}function po(t,e){return ba(1+ji.count(ia(t),t),e,3)}function fo(t,e){return ba(t.getUTCMilliseconds(),e,3)}function go(t,e){return fo(t,e)+"000"}function mo(t,e){return ba(t.getUTCMonth()+1,e,2)}function yo(t,e){return ba(t.getUTCMinutes(),e,2)}function xo(t,e){return ba(t.getUTCSeconds(),e,2)}function bo(t){var e=t.getUTCDay();return 0===e?7:e}function Co(t,e){return ba(Yi.count(ia(t)-1,t),e,2)}function ko(t){var e=t.getUTCDay();return e>=4||0===e?Qi(t):Qi.ceil(t)}function wo(t,e){return t=ko(t),ba(Qi.count(ia(t),t)+(4===ia(t).getUTCDay()),e,2)}function _o(t){return t.getUTCDay()}function vo(t,e){return ba(Xi.count(ia(t)-1,t),e,2)}function So(t,e){return ba(t.getUTCFullYear()%100,e,2)}function To(t,e){return ba((t=ko(t)).getUTCFullYear()%100,e,2)}function Ao(t,e){return ba(t.getUTCFullYear()%1e4,e,4)}function Mo(t,e){var r=t.getUTCDay();return ba((t=r>=4||0===r?Qi(t):Qi.ceil(t)).getUTCFullYear()%1e4,e,4)}function Bo(){return"+0000"}function Lo(){return"%"}function Fo(t){return+t}function $o(t){return Math.floor(+t/1e3)}function Eo(t){return new Date(t)}function Do(t){return t instanceof Date?+t:+new Date(+t)}function Oo(t,e,r,n,i,a,o,s,l,c){var h=mi(),u=h.invert,d=h.domain,p=c(".%L"),f=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),b=c("%B"),C=c("%Y");function k(t){return(l(t)=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Fo,s:$o,S:Za,u:Qa,U:Ja,V:eo,w:ro,W:no,x:null,X:null,y:io,Y:oo,Z:lo,"%":Lo},C={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:co,e:co,f:go,g:To,G:Mo,H:ho,I:uo,j:po,L:fo,m:mo,M:yo,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Fo,s:$o,S:xo,u:bo,U:Co,V:wo,w:_o,W:vo,x:null,X:null,y:So,Y:Ao,Z:Bo,"%":Lo},k={a:function(t,e,r){var n=p.exec(e.slice(r));return n?(t.w=f.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){var n=u.exec(e.slice(r));return n?(t.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){var n=y.exec(e.slice(r));return n?(t.m=x.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){var n=g.exec(e.slice(r));return n?(t.m=m.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,r,n){return v(t,e,r,n)},d:Ea,e:Ea,f:Ra,g:Ba,G:Ma,H:Oa,I:Oa,j:Da,L:Ia,m:$a,M:Na,p:function(t,e,r){var n=c.exec(e.slice(r));return n?(t.p=h.get(n[0].toLowerCase()),r+n[0].length):-1},q:Fa,Q:za,s:Ka,S:ja,u:va,U:Sa,V:Ta,w:_a,W:Aa,x:function(t,e,n){return v(t,r,e,n)},X:function(t,e,r){return v(t,n,e,r)},y:Ba,Y:Ma,Z:La,"%":Pa};function w(t,e){return function(r){var n,i,a,o=[],s=-1,l=0,c=t.length;for(r instanceof Date||(r=new Date(+r));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(n=ua(da(a.y,0,1))).getUTCDay(),n=i>4||0===i?Xi.ceil(n):Xi(n),n=ji.offset(n,7*(a.V-1)),a.y=n.getUTCFullYear(),a.m=n.getUTCMonth(),a.d=n.getUTCDate()+(a.w+6)%7):(i=(n=ha(da(a.y,0,1))).getDay(),n=i>4||0===i?zi.ceil(n):zi(n),n=Ni.offset(n,7*(a.V-1)),a.y=n.getFullYear(),a.m=n.getMonth(),a.d=n.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?ua(da(a.y,0,1)).getUTCDay():ha(da(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,ua(a)):ha(a)}}function v(t,e,r,n){for(var i,a,o=0,s=e.length,l=r.length;o=l)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=k[i in ga?e.charAt(o++):i])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}return b.x=w(r,b),b.X=w(n,b),b.c=w(e,b),C.x=w(r,C),C.X=w(n,C),C.c=w(e,C),{format:function(t){var e=w(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=_(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",C);return e.toString=function(){return t},e},utcParse:function(t){var e=_(t+="",!0);return e.toString=function(){return t},e}}}(t),fa=pa.format,pa.parse,pa.utcFormat,pa.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const jo=function(t){for(var e=t.length/6|0,r=new Array(e),n=0;n=1?Xo:t<=-1?-Xo:Math.asin(t)}const Qo=Math.PI,Jo=2*Qo,ts=1e-6,es=Jo-ts;function rs(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return rs;const r=10**e;return function(t){this._+=t[0];for(let e=1,n=t.length;ets)if(Math.abs(h*s-l*c)>ts&&i){let d=r-a,p=n-o,f=s*s+l*l,g=d*d+p*p,m=Math.sqrt(f),y=Math.sqrt(u),x=i*Math.tan((Qo-Math.acos((f+u-g)/(2*m*y)))/2),b=x/y,C=x/m;Math.abs(b-1)>ts&&this._append`L${t+b*c},${e+b*h}`,this._append`A${i},${i},0,0,${+(h*d>c*p)},${this._x1=t+C*s},${this._y1=e+C*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,r,n,i,a){if(t=+t,e=+e,a=!!a,(r=+r)<0)throw new Error(`negative radius: ${r}`);let o=r*Math.cos(n),s=r*Math.sin(n),l=t+o,c=e+s,h=1^a,u=a?n-i:i-n;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>ts||Math.abs(this._y1-c)>ts)&&this._append`L${l},${c}`,r&&(u<0&&(u=u%Jo+Jo),u>es?this._append`A${r},${r},0,1,${h},${t-o},${e-s}A${r},${r},0,1,${h},${this._x1=l},${this._y1=c}`:u>ts&&this._append`A${r},${r},0,${+(u>=Qo)},${h},${this._x1=t+r*Math.cos(i)},${this._y1=e+r*Math.sin(i)}`)}rect(t,e,r,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${r=+r}v${+n}h${-r}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(null==r)e=null;else{const t=Math.floor(r);if(!(t>=0))throw new RangeError(`invalid digits: ${r}`);e=t}return t},()=>new ns(e)}function as(t){return t.innerRadius}function os(t){return t.outerRadius}function ss(t){return t.startAngle}function ls(t){return t.endAngle}function cs(t){return t&&t.padAngle}function hs(t,e,r,n,i,a,o){var s=t-r,l=e-n,c=(o?a:-a)/Uo(s*s+l*l),h=c*l,u=-c*s,d=t+h,p=e+u,f=r+h,g=n+u,m=(d+f)/2,y=(p+g)/2,x=f-d,b=g-p,C=x*x+b*b,k=i-a,w=d*g-f*p,_=(b<0?-1:1)*Uo(qo(0,k*k*C-w*w)),v=(w*b-x*_)/C,S=(-w*x-b*_)/C,T=(w*b+x*_)/C,A=(-w*x+b*_)/C,M=v-m,B=S-y,L=T-m,F=A-y;return M*M+B*B>L*L+F*F&&(v=T,S=A),{cx:v,cy:S,x01:-h,y01:-u,x11:v*(i/k-1),y11:S*(i/k-1)}}function us(){var t=as,e=os,r=Ro(0),n=null,i=ss,a=ls,o=cs,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),p=+e.apply(this,arguments),f=i.apply(this,arguments)-Xo,g=a.apply(this,arguments)-Xo,m=Po(g-f),y=g>f;if(s||(s=c=l()),pGo)if(m>Vo-Go)s.moveTo(p*Ko(f),p*Ho(f)),s.arc(0,0,p,f,g,!y),d>Go&&(s.moveTo(d*Ko(g),d*Ho(g)),s.arc(0,0,d,g,f,y));else{var x,b,C=f,k=g,w=f,_=g,v=m,S=m,T=o.apply(this,arguments)/2,A=T>Go&&(n?+n.apply(this,arguments):Uo(d*d+p*p)),M=Wo(Po(p-d)/2,+r.apply(this,arguments)),B=M,L=M;if(A>Go){var F=Zo(A/d*Ho(T)),$=Zo(A/p*Ho(T));(v-=2*F)>Go?(w+=F*=y?1:-1,_-=F):(v=0,w=_=(f+g)/2),(S-=2*$)>Go?(C+=$*=y?1:-1,k-=$):(S=0,C=k=(f+g)/2)}var E=p*Ko(C),D=p*Ho(C),O=d*Ko(_),N=d*Ho(_);if(M>Go){var j,I=p*Ko(k),R=p*Ho(k),P=d*Ko(w),z=d*Ho(w);if(m1?0:u<-1?Yo:Math.acos(u))/2),G=Uo(j[0]*j[0]+j[1]*j[1]);B=Wo(M,(d-G)/(U-1)),L=Wo(M,(p-G)/(U+1))}else B=L=0}S>Go?L>Go?(x=hs(P,z,E,D,p,L,y),b=hs(I,R,O,N,p,L,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),LGo&&v>Go?B>Go?(x=hs(O,N,I,R,d,-B,y),b=hs(E,D,P,z,d,-B,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),Bt?1:e>=t?0:NaN}function bs(t){return t}function Cs(){var t=bs,e=xs,r=null,n=Ro(0),i=Ro(Vo),a=Ro(0);function o(o){var s,l,c,h,u,d=(o=ds(o)).length,p=0,f=new Array(d),g=new Array(d),m=+n.apply(this,arguments),y=Math.min(Vo,Math.max(-Vo,i.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,a.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s0&&(p+=u);for(null!=e?f.sort(function(t,r){return e(g[t],g[r])}):null!=r&&f.sort(function(t,e){return r(o[t],o[e])}),s=0,c=p?(y-d*b)/p:0;s0?u*c:0)+b,g[l]={data:o[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:Ro(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,r=null,o):e},o.sort=function(t){return arguments.length?(r=t,e=null,o):r},o.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Ro(+t),o):n},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ro(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ro(+t),o):a},o}function ks(){}function ws(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function _s(t){this._context=t}function vs(t){return new _s(t)}function Ss(t){this._context=t}function Ts(t){return new Ss(t)}function As(t){this._context=t}function Ms(t){return new As(t)}ps.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ws(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ws(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Ss.prototype={areaStart:ks,areaEnd:ks,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ws(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},As.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:ws(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Bs{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Ls(t){return new Bs(t,!0)}function Fs(t){return new Bs(t,!1)}function $s(t,e){this._basis=new _s(t),this._beta=e}$s.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n,i=t[0],a=e[0],o=t[r]-i,s=e[r]-a,l=-1;++l<=r;)n=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+n*o),this._beta*e[l]+(1-this._beta)*(a+n*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Es=function t(e){function r(t){return 1===e?new _s(t):new $s(t,e)}return r.beta=function(e){return t(+e)},r}(.85);function Ds(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function Os(t,e){this._context=t,this._k=(1-e)/6}Os.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Ds(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Ds(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ns=function t(e){function r(t){return new Os(t,e)}return r.tension=function(e){return t(+e)},r}(0);function js(t,e){this._context=t,this._k=(1-e)/6}js.prototype={areaStart:ks,areaEnd:ks,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Ds(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Is=function t(e){function r(t){return new js(t,e)}return r.tension=function(e){return t(+e)},r}(0);function Rs(t,e){this._context=t,this._k=(1-e)/6}Rs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ds(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ps=function t(e){function r(t){return new Rs(t,e)}return r.tension=function(e){return t(+e)},r}(0);function zs(t,e,r){var n=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>Go){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Go){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*c+t._x1*t._l23_2a-e*t._l12_2a)/h,o=(o*c+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(n,i,a,o,t._x2,t._y2)}function Ks(t,e){this._context=t,this._alpha=e}Ks.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function r(t){return e?new Ks(t,e):new Os(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Ws(t,e){this._context=t,this._alpha=e}Ws.prototype={areaStart:ks,areaEnd:ks,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Hs=function t(e){function r(t){return e?new Ws(t,e):new js(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Us(t,e){this._context=t,this._alpha=e}Us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:zs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Gs=function t(e){function r(t){return e?new Us(t,e):new Rs(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Ys(t){this._context=t}function Xs(t){return new Ys(t)}function Vs(t){return t<0?-1:1}function Zs(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),o=(r-t._y1)/(i||n<0&&-0),s=(a*i+o*n)/(n+i);return(Vs(a)+Vs(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Qs(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Js(t,e,r){var n=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-n)/3;t._context.bezierCurveTo(n+s,i+s*e,a-s,o-s*r,a,o)}function tl(t){this._context=t}function el(t){this._context=new rl(t)}function rl(t){this._context=t}function nl(t){return new tl(t)}function il(t){return new el(t)}function al(t){this._context=t}function ol(t){var e,r,n=t.length-1,i=new Array(n),a=new Array(n),o=new Array(n);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[n-1]=(t[n]+i[n-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}},dl.prototype={constructor:dl,scale:function(t){return 1===t?this:new dl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new dl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new dl(1,0,0);dl.prototype},71807:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>O});var n=r(96540),i=r(34164),a=r(34291),o=r(51715),s=r.n(o);function l({children:t}){return t}var c=r(26058),h=r(71765),u=r(74848);function d({line:t,token:e,...r}){return(0,u.jsx)("span",{...r})}const p={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function f({line:t,classNames:e,showLineNumbers:r,getLineProps:n,getTokenProps:a}){const o=function(t){const e=1===t.length&&"\n"===t[0].content?t[0]:void 0;return e?[{...e,content:""}]:t}(t),s=n({line:o,className:(0,i.A)(e,r&&p.codeLine)}),l=o.map((t,e)=>{const r=a({token:t});return(0,u.jsx)(d,{...r,line:o,token:t,children:r.children},e)});return(0,u.jsxs)("span",{...s,children:[r?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("span",{className:p.codeLineNumber}),(0,u.jsx)("span",{className:p.codeLineContent,children:l})]}):l,(0,u.jsx)("br",{})]})}var g=r(17562);const m=n.forwardRef((t,e)=>(0,u.jsx)("pre",{ref:e,tabIndex:0,...t,className:(0,i.A)(t.className,g.A.codeBlock,"thin-scrollbar")}));function y(t){const{metadata:e}=(0,a.Ph)();return(0,u.jsx)("code",{...t,className:(0,i.A)(t.className,g.A.codeBlockLines,void 0!==e.lineNumbersStart&&g.A.codeBlockLinesWithNumbering),style:{...t.style,counterReset:void 0===e.lineNumbersStart?void 0:"line-count "+(e.lineNumbersStart-1)}})}function x({className:t}){const{metadata:e,wordWrap:r}=(0,a.Ph)(),n=(0,c.A)(),{code:o,language:s,lineNumbersStart:l,lineClassNames:d}=e;return(0,u.jsx)(h.f4,{theme:n,code:o,language:s,children:({className:e,style:n,tokens:a,getLineProps:o,getTokenProps:s})=>(0,u.jsx)(m,{ref:r.codeBlockRef,className:(0,i.A)(t,e),style:n,children:(0,u.jsx)(y,{children:a.map((t,e)=>(0,u.jsx)(f,{line:t,getLineProps:o,getTokenProps:s,classNames:d[e],showLineNumbers:void 0!==l},e))})})})}var b=r(92303);function C({children:t,fallback:e}){return(0,b.default)()?(0,u.jsx)(u.Fragment,{children:t?.()}):e??null}var k=r(21312);function w({className:t,...e}){return(0,u.jsx)("button",{type:"button",...e,className:(0,i.A)("clean-btn",t)})}function _(t){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,u.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function v(t){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,u.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const S={copyButtonCopied:"copyButtonCopied_Vdqa",copyButtonIcons:"copyButtonIcons_IEyt",copyButtonIcon:"copyButtonIcon_TrPX",copyButtonSuccessIcon:"copyButtonSuccessIcon_cVMy"};function T(t){return t?(0,k.translate)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,k.translate)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"})}function A(){const{metadata:{code:t}}=(0,a.Ph)(),[e,r]=(0,n.useState)(!1),i=(0,n.useRef)(void 0),o=(0,n.useCallback)(()=>{!function(t,{target:e=document.body}={}){if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const i=document.getSelection(),a=i.rangeCount>0&&i.getRangeAt(0);e.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let o=!1;try{o=document.execCommand("copy")}catch{}r.remove(),a&&(i.removeAllRanges(),i.addRange(a)),n&&n.focus()}(t),r(!0),i.current=window.setTimeout(()=>{r(!1)},1e3)},[t]);return(0,n.useEffect)(()=>()=>window.clearTimeout(i.current),[]),{copyCode:o,isCopied:e}}function M({className:t}){const{copyCode:e,isCopied:r}=A();return(0,u.jsx)(w,{"aria-label":T(r),title:(0,k.translate)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.A)(t,S.copyButton,r&&S.copyButtonCopied),onClick:e,children:(0,u.jsxs)("span",{className:S.copyButtonIcons,"aria-hidden":"true",children:[(0,u.jsx)(_,{className:S.copyButtonIcon}),(0,u.jsx)(v,{className:S.copyButtonSuccessIcon})]})})}function B(t){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,u.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const L={wordWrapButtonIcon:"wordWrapButtonIcon_b1P5",wordWrapButtonEnabled:"wordWrapButtonEnabled_uzNF"};function F({className:t}){const{wordWrap:e}=(0,a.Ph)();if(!(e.isEnabled||e.isCodeScrollable))return!1;const r=(0,k.translate)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,u.jsx)(w,{onClick:()=>e.toggle(),className:(0,i.A)(t,e.isEnabled&&L.wordWrapButtonEnabled),"aria-label":r,title:r,children:(0,u.jsx)(B,{className:L.wordWrapButtonIcon,"aria-hidden":"true"})})}const $={buttonGroup:"buttonGroup_M5ko"};function E({className:t}){return(0,u.jsx)(C,{children:()=>(0,u.jsxs)("div",{className:(0,i.A)(t,$.buttonGroup),children:[(0,u.jsx)(F,{}),(0,u.jsx)(M,{})]})})}const D={codeBlockContent:"codeBlockContent_QJqH",codeBlockTitle:"codeBlockTitle_OeMC",codeBlock:"codeBlock_a8dz"};function O({className:t}){const{metadata:e}=(0,a.Ph)();return(0,u.jsxs)(s(),{as:"div",className:(0,i.A)(t,e.className),children:[e.title&&(0,u.jsx)("div",{className:D.codeBlockTitle,children:(0,u.jsx)(l,{children:e.title})}),(0,u.jsxs)("div",{className:D.codeBlockContent,children:[(0,u.jsx)(x,{}),(0,u.jsx)(E,{})]})]})}},72136:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n="object"==typeof global&&global&&global.Object===Object&&global},72453:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});const n={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t),hsl2rgb:({h:t,s:e,l:r},i)=>{if(!e)return 2.55*r;t/=360,e/=100;const a=(r/=100)<.5?r*(1+e):r+e-r*e,o=2*r-a;switch(i){case"r":return 255*n.hue2rgb(o,a,t+1/3);case"g":return 255*n.hue2rgb(o,a,t);case"b":return 255*n.hue2rgb(o,a,t-1/3)}},rgb2hsl:({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;const i=Math.max(t,e,r),a=Math.min(t,e,r),o=(i+a)/2;if("l"===n)return 100*o;if(i===a)return 0;const s=i-a;if("s"===n)return 100*(o>.5?s/(2-i-a):s/(i+a));switch(i){case t:return 60*((e-r)/s+(ee>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},72550:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=r(36513),s=n(r(29493)),l=n(r(99208)),c=r(60542);e.default=function({children:t}){const e=function(){const{metadata:t,frontMatter:e,contentTitle:r}=(0,c.useDoc)();return e.hide_title||void 0!==r?null:t.title}();return(0,i.jsxs)("div",{className:(0,a.default)(o.ThemeClassNames.docs.docMarkdown,"markdown"),children:[e&&(0,i.jsx)("header",{children:(0,i.jsx)(l.default,{as:"h1",children:e})}),(0,i.jsx)(s.default,{children:t})]})}},74353:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",o="hour",s="day",l="week",c="month",h="quarter",u="year",d="date",p="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],r=t%100;return"["+t+(e[(r-20)%10]||e[r]||e[0])+"]"}},y=function(t,e,r){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(r)+t},x={s:y,z:function(t){var e=-t.utcOffset(),r=Math.abs(e),n=Math.floor(r/60),i=r%60;return(e<=0?"+":"-")+y(n,2,"0")+":"+y(i,2,"0")},m:function t(e,r){if(e.date()1)return t(o[0])}else{var s=e.name;C[s]=e,i=s}return!n&&i&&(b=i),i||!n&&b},v=function(t,e){if(w(t))return t.clone();var r="object"==typeof e?e:{};return r.date=t,r.args=arguments,new T(r)},S=x;S.l=_,S.i=w,S.w=function(t,e){return v(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var T=function(){function m(t){this.$L=_(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[k]=!0}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,r=t.utc;if(null===e)return new Date(NaN);if(S.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var i=n[2]-1||0,a=(n[7]||"0").substring(0,3);return r?new Date(Date.UTC(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],i,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return S},y.isValid=function(){return!(this.$d.toString()===p)},y.isSame=function(t,e){var r=v(t);return this.startOf(e)<=r&&r<=this.endOf(e)},y.isAfter=function(t,e){return v(t){"use strict";r.d(e,{D:()=>a});var n=r(41750),i=r(70451),a=(0,n.K2)(t=>{const{securityLevel:e}=(0,n.D7)();let r=(0,i.Ltv)("body");if("sandbox"===e){const e=(0,i.Ltv)(`#i${t}`),n=e.node()?.contentDocument??document;r=(0,i.Ltv)(n.body)}return r.select(`#${t}`)},"selectSvgElement")},74886:(t,e,r)=>{"use strict";r.d(e,{A:()=>g});var n=r(93539),i=r(63122);const a={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(a.re);if(!e)return;const r=e[1],i=parseInt(r,16),o=r.length,s=o%4==0,l=o>4,c=l?1:17,h=l?8:4,u=s?0:-1,d=l?255:15;return n.A.set({r:(i>>h*(u+3)&d)*c,g:(i>>h*(u+2)&d)*c,b:(i>>h*(u+1)&d)*c,a:s?(i&d)*c/255:1},t)},stringify:t=>{const{r:e,g:r,b:n,a:a}=t;return a<1?`#${i.Y[Math.round(e)]}${i.Y[Math.round(r)]}${i.Y[Math.round(n)]}${i.Y[Math.round(255*a)]}`:`#${i.Y[Math.round(e)]}${i.Y[Math.round(r)]}${i.Y[Math.round(n)]}`}},o=a;var s=r(72453);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,r]=e;switch(r){case"grad":return s.A.channel.clamp.h(.9*parseFloat(t));case"rad":return s.A.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.A.channel.clamp.h(360*parseFloat(t))}}return s.A.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const r=t.match(l.re);if(!r)return;const[,i,a,o,c,h]=r;return n.A.set({h:l._hue2deg(i),s:s.A.channel.clamp.s(parseFloat(a)),l:s.A.channel.clamp.l(parseFloat(o)),a:c?s.A.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${s.A.lang.round(e)}, ${s.A.lang.round(r)}%, ${s.A.lang.round(n)}%, ${i})`:`hsl(${s.A.lang.round(e)}, ${s.A.lang.round(r)}%, ${s.A.lang.round(n)}%)`}},c=l,h={colors:{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",cyanaqua:"#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",rebeccapurple:"#663399",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",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return o.parse(e)},stringify:t=>{const e=o.stringify(t);for(const r in h.colors)if(h.colors[r]===e)return r}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const r=t.match(d.re);if(!r)return;const[,i,a,o,l,c,h,u,p]=r;return n.A.set({r:s.A.channel.clamp.r(a?2.55*parseFloat(i):parseFloat(i)),g:s.A.channel.clamp.g(l?2.55*parseFloat(o):parseFloat(o)),b:s.A.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.A.channel.clamp.a(p?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${s.A.lang.round(e)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)}, ${s.A.lang.round(i)})`:`rgb(${s.A.lang.round(e)}, ${s.A.lang.round(r)}, ${s.A.lang.round(n)})`}},p=d,f={format:{keyword:h,hex:o,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=o.parse(t)||p.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(i.Z.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?p.stringify(t):o.stringify(t)},g=f},75263:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(95635);const i=(t,e)=>(0,n.A)(t,"l",-e)},75986:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>h});r(96540);var n=r(34164),i=r(17559),a=r(60542),o=r(26849),s=r.n(o);const l={tocMobile:"tocMobile_ITEo"};var c=r(74848);function h(){const{toc:t,frontMatter:e}=(0,a.useDoc)();return(0,c.jsx)(s(),{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,n.A)(i.G.docs.docTocMobile,l.tocMobile)})}},76875:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});const n=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)};var i=Math.max;const a=function(t,e,r){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,o=-1,s=i(a.length-e,0),l=Array(s);++o{"use strict";r.d(e,{A:()=>i});var n=r(95635);const i=(t,e)=>(0,n.A)(t,"l",e)},80127:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});const n=function(){this.__data__=[],this.size=0};var i=r(66984);const a=function(t,e){for(var r=t.length;r--;)if((0,i.A)(t[r][0],e))return r;return-1};var o=Array.prototype.splice;const s=function(t){var e=this.__data__,r=a(e,t);return!(r<0)&&(r==e.length-1?e.pop():o.call(e,r,1),--this.size,!0)};const l=function(t){var e=this.__data__,r=a(e,t);return r<0?void 0:e[r][1]};const c=function(t){return a(this.__data__,t)>-1};const h=function(t,e){var r=this.__data__,n=a(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function u(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{"use strict";r.d(e,{A:()=>l});var n=r(41917),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof module&&module&&!module.nodeType&&module,o=a&&a.exports===i?n.A.Buffer:void 0,s=o?o.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var r=t.length,n=s?s(r):new t.constructor(r);return t.copy(n),n}},81121:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=Function.prototype.toString;const i=function(t){if(null!=t){try{return n.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},83235:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={admonition:"admonition_ntHH",admonitionHeading:"admonitionHeading_JPfy",admonitionIcon:"admonitionIcon_BGV6",admonitionContent:"admonitionContent_iozl"}},83607:(t,e,r)=>{"use strict";r.d(e,{A:()=>h});const n=function(t,e){for(var r=-1,n=Array(t);++r{"use strict";r.d(e,{A:()=>i});var n=r(18744);const i=function(){try{var t=(0,n.A)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},85088:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(36513),o=n(r(64157)),s=n(r(33203)),l=r(60542);e.default=function(t){const e=`docs-doc-id-${t.content.metadata.unversionedId}`,r=t.content;return(0,i.jsx)(l.DocProvider,{content:t.content,children:(0,i.jsxs)(a.HtmlClassNameProvider,{className:e,children:[(0,i.jsx)(o.default,{}),(0,i.jsx)(s.default,{children:(0,i.jsx)(r,{})})]})})}},85827:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={tag:"tag_dtsN",tagRegular:"tagRegular_SGIC",tagWithCount:"tagWithCount_gIvh"}},86068:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(34559)),o=n(r(21312)),s=r(36513),l=n(r(86777)),c=r(97481),h=r(23025);e.default=function({className:t}){const e=(0,h.useDocsVersion)();return e.badge?(0,i.jsx)("span",{className:(0,a.default)(t,s.ThemeClassNames.docs.docVersionBadge,"badge badge--secondary",l.default.badge),children:(0,i.jsx)(c.Typography,{variant:"body3",children:(0,i.jsx)(o.default,{id:"theme.docs.versionBadge.label",values:{versionLabel:e.label},children:"Version: {versionLabel}"})})}):null}},86777:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>n});const n={badge:"badge_AsjZ"}},88308:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(36513),o=r(54865),s=n(r(71807));e.default=function(t){const e=function(t){const{prism:e}=(0,a.useThemeConfig)();return(0,o.createCodeBlockMetadata)({code:t.children,className:t.className,metastring:t.metastring,magicComments:e.magicComments,defaultLanguage:e.defaultLanguage,language:t.language,title:t.title,showLineNumbers:t.showLineNumbers})}(t),r=(0,o.useCodeWordWrap)();return(0,i.jsx)(o.CodeBlockContextProvider,{metadata:e,wordWrap:r,children:(0,i.jsx)(s.default,{})})}},88496:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(241),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=n.A?n.A.toStringTag:void 0;const l=function(t){var e=a.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(l){}var i=o.call(t);return n&&(e?t[s]=r:delete t[s]),i};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=n.A?n.A.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},88857:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=r(97481),o=r(36513),s=n(r(21312)),l=n(r(34559)),c=n(r(96540)),h=n(r(83235));const u={note:{infimaClassName:"secondary",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M8.00004 11.3333C8.18893 11.3333 8.34737 11.2693 8.47537 11.1413C8.60337 11.0133 8.66715 10.8551 8.66671 10.6667C8.66671 10.4778 8.60271 10.3193 8.47471 10.1913C8.34671 10.0633 8.18849 9.99957 8.00004 10C7.81115 10 7.65271 10.064 7.52471 10.192C7.39671 10.32 7.33293 10.4782 7.33337 10.6667C7.33337 10.8556 7.39737 11.014 7.52537 11.142C7.65337 11.27 7.8116 11.3338 8.00004 11.3333ZM7.33337 8.66668H8.66671V4.66668H7.33337V8.66668ZM8.00004 14.6667C7.07782 14.6667 6.21115 14.4916 5.40004 14.1413C4.58893 13.7911 3.88337 13.3162 3.28337 12.7167C2.68337 12.1167 2.20849 11.4111 1.85871 10.6C1.50893 9.7889 1.33382 8.92223 1.33337 8.00001C1.33337 7.07779 1.50849 6.21112 1.85871 5.40001C2.20893 4.5889 2.68382 3.88334 3.28337 3.28334C3.88337 2.68334 4.58893 2.20845 5.40004 1.85868C6.21115 1.5089 7.07782 1.33379 8.00004 1.33334C8.92226 1.33334 9.78893 1.50845 10.6 1.85868C11.4112 2.2089 12.1167 2.68379 12.7167 3.28334C13.3167 3.88334 13.7918 4.5889 14.142 5.40001C14.4923 6.21112 14.6672 7.07779 14.6667 8.00001C14.6667 8.92223 14.4916 9.7889 14.1414 10.6C13.7912 11.4111 13.3163 12.1167 12.7167 12.7167C12.1167 13.3167 11.4112 13.7918 10.6 14.142C9.78893 14.4922 8.92226 14.6671 8.00004 14.6667ZM8.00004 13.3333C9.48893 13.3333 10.75 12.8167 11.7834 11.7833C12.8167 10.75 13.3334 9.4889 13.3334 8.00001C13.3334 6.51112 12.8167 5.25001 11.7834 4.21668C10.75 3.18334 9.48893 2.66668 8.00004 2.66668C6.51115 2.66668 5.25004 3.18334 4.21671 4.21668C3.18337 5.25001 2.66671 6.51112 2.66671 8.00001C2.66671 9.4889 3.18337 10.75 4.21671 11.7833C5.25004 12.8167 6.51115 13.3333 8.00004 13.3333Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})},tip:{infimaClassName:"success",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M8 14.6666C7.63333 14.6666 7.31933 14.536 7.058 14.2746C6.79667 14.0133 6.66622 13.6995 6.66667 13.3333H9.33333C9.33333 13.7 9.20267 14.014 8.94133 14.2753C8.68 14.5366 8.36622 14.6671 8 14.6666ZM5.33333 12.6666V11.3333H10.6667V12.6666H5.33333ZM5.5 10.6666C4.73333 10.2111 4.12489 9.59998 3.67467 8.83331C3.22445 8.06665 2.99956 7.23331 3 6.33331C3 4.94442 3.48622 3.76376 4.45867 2.79131C5.43111 1.81887 6.61156 1.33287 8 1.33331C9.38889 1.33331 10.5696 1.81954 11.542 2.79198C12.5144 3.76442 13.0004 4.94487 13 6.33331C13 7.23331 12.7751 8.06665 12.3253 8.83331C11.8756 9.59998 11.2671 10.2111 10.5 10.6666H5.5ZM5.9 9.33331H10.1C10.6 8.97776 10.9862 8.53887 11.2587 8.01665C11.5311 7.49442 11.6671 6.93331 11.6667 6.33331C11.6667 5.31109 11.3111 4.44442 10.6 3.73331C9.88889 3.0222 9.02222 2.66665 8 2.66665C6.97778 2.66665 6.11111 3.0222 5.4 3.73331C4.68889 4.44442 4.33333 5.31109 4.33333 6.33331C4.33333 6.93331 4.46956 7.49442 4.742 8.01665C5.01444 8.53887 5.40045 8.97776 5.9 9.33331Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})},danger:{infimaClassName:"danger",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M5.5 14L2 10.5V5.5L5.5 2H10.5L14 5.5V10.5L10.5 14H5.5ZM6.1 10.8333L8 8.93333L9.9 10.8333L10.8333 9.9L8.93333 8L10.8333 6.1L9.9 5.16667L8 7.06667L6.1 5.16667L5.16667 6.1L7.06667 8L5.16667 9.9L6.1 10.8333ZM6.06667 12.6667H9.93333L12.6667 9.93333V6.06667L9.93333 3.33333H6.06667L3.33333 6.06667V9.93333L6.06667 12.6667Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})},info:{infimaClassName:"info",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M7.33334 11.3333H8.66668V7.33331H7.33334V11.3333ZM8.00001 5.99998C8.1889 5.99998 8.34734 5.93598 8.47534 5.80798C8.60334 5.67998 8.66712 5.52176 8.66668 5.33331C8.66668 5.14442 8.60268 4.98598 8.47468 4.85798C8.34668 4.72998 8.18845 4.6662 8.00001 4.66665C7.81112 4.66665 7.65268 4.73065 7.52468 4.85865C7.39668 4.98665 7.3329 5.14487 7.33334 5.33331C7.33334 5.5222 7.39734 5.68065 7.52534 5.80865C7.65334 5.93665 7.81157 6.00042 8.00001 5.99998ZM8.00001 14.6666C7.07779 14.6666 6.21112 14.4915 5.40001 14.1413C4.5889 13.7911 3.88334 13.3162 3.28334 12.7166C2.68334 12.1166 2.20845 11.4111 1.85868 10.6C1.5089 9.78887 1.33379 8.9222 1.33334 7.99998C1.33334 7.07776 1.50845 6.21109 1.85868 5.39998C2.2089 4.58887 2.68379 3.88331 3.28334 3.28331C3.88334 2.68331 4.5889 2.20842 5.40001 1.85865C6.21112 1.50887 7.07779 1.33376 8.00001 1.33331C8.92223 1.33331 9.7889 1.50842 10.6 1.85865C11.4111 2.20887 12.1167 2.68376 12.7167 3.28331C13.3167 3.88331 13.7918 4.58887 14.142 5.39998C14.4922 6.21109 14.6671 7.07776 14.6667 7.99998C14.6667 8.9222 14.4916 9.78887 14.1413 10.6C13.7911 11.4111 13.3162 12.1166 12.7167 12.7166C12.1167 13.3166 11.4111 13.7918 10.6 14.142C9.7889 14.4922 8.92223 14.6671 8.00001 14.6666ZM8.00001 13.3333C9.4889 13.3333 10.75 12.8166 11.7833 11.7833C12.8167 10.75 13.3333 9.48887 13.3333 7.99998C13.3333 6.51109 12.8167 5.24998 11.7833 4.21665C10.75 3.18331 9.4889 2.66665 8.00001 2.66665C6.51112 2.66665 5.25001 3.18331 4.21668 4.21665C3.18334 5.24998 2.66668 6.51109 2.66668 7.99998C2.66668 9.48887 3.18334 10.75 4.21668 11.7833C5.25001 12.8166 6.51112 13.3333 8.00001 13.3333Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})},caution:{infimaClassName:"warning",iconComponent:function(){return(0,i.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,i.jsx)("path",{d:"M8.00001 14.6833C7.82224 14.6833 7.65268 14.65 7.49135 14.5833C7.33001 14.5167 7.1829 14.4222 7.05001 14.3L1.70001 8.94999C1.57779 8.81666 1.48335 8.66932 1.41668 8.50799C1.35001 8.34666 1.31668 8.17732 1.31668 7.99999C1.31668 7.82221 1.35001 7.64999 1.41668 7.48332C1.48335 7.31666 1.57779 7.17221 1.70001 7.04999L7.05001 1.69999C7.18335 1.56666 7.33068 1.46932 7.49201 1.40799C7.65335 1.34666 7.82268 1.31621 8.00001 1.31666C8.17779 1.31666 8.35001 1.34732 8.51668 1.40866C8.68335 1.46999 8.82779 1.5671 8.95001 1.69999L14.3 7.04999C14.4333 7.17221 14.5307 7.31666 14.592 7.48332C14.6533 7.64999 14.6838 7.82221 14.6833 7.99999C14.6833 8.17777 14.6529 8.34732 14.592 8.50866C14.5311 8.66999 14.4338 8.8171 14.3 8.94999L8.95001 14.3C8.82779 14.4222 8.68335 14.5167 8.51668 14.5833C8.35001 14.65 8.17779 14.6833 8.00001 14.6833ZM8.00001 13.35L13.35 7.99999L8.00001 2.64999L2.65001 7.99999L8.00001 13.35ZM7.33335 8.66666H8.66668V4.66666H7.33335V8.66666ZM8.00001 10.6667C8.1889 10.6667 8.34735 10.6027 8.47535 10.4747C8.60335 10.3467 8.66713 10.1884 8.66668 9.99999C8.66668 9.8111 8.60268 9.65266 8.47468 9.52466C8.34668 9.39666 8.18846 9.33288 8.00001 9.33332C7.81113 9.33332 7.65268 9.39732 7.52468 9.52532C7.39668 9.65332 7.3329 9.81154 7.33335 9.99999C7.33335 10.1889 7.39735 10.3473 7.52535 10.4753C7.65335 10.6033 7.81157 10.6671 8.00001 10.6667Z",fill:"currentColor"})})},label:(0,i.jsx)(s.default,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})}},d={secondary:"note",important:"info",success:"tip",warning:"danger"};function p(t){const{mdxAdmonitionTitle:e,rest:r}=function(t){const e=c.default.Children.toArray(t),r=e.find(t=>c.default.isValidElement(t)&&"mdxAdmonitionTitle"===t.props?.mdxType),n=(0,i.jsx)(i.Fragment,{children:e.filter(t=>t!==r)});return{mdxAdmonitionTitle:r,rest:n}}(t.children);return{...t,title:t.title??e,children:r}}e.default=function(t){const{children:e,type:r,title:n,icon:s}=p(t),c=function(t){const e=d[t]??t,r=u[e];return r||(console.warn(`No admonition config found for admonition type "${e}". Using Info as fallback.`),u.info)}(r),f=n??c.label,{iconComponent:g}=c,m=s??(0,i.jsx)(g,{});return(0,i.jsxs)("div",{className:(0,l.default)(o.ThemeClassNames.common.admonition,o.ThemeClassNames.common.admonitionType(t.type),`alert--${c.infimaClassName}`,h.default.admonition),children:[(0,i.jsx)("span",{className:h.default.admonitionIcon,children:m}),(0,i.jsxs)("div",{children:[(0,i.jsx)(a.Typography,{variant:"body1",className:h.default.admonitionHeading,children:f}),(0,i.jsx)(a.Typography,{variant:"body1",className:h.default.admonitionContent,children:e})]})]})}},89610:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(88496),i=r(23149);const a=function(t){if(!(0,i.A)(t))return!1;var e=(0,n.A)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},89724:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>o});r(96540);var n=r(34164);const i={img:"img_ev3q"};var a=r(74848);function o(t){return(0,a.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,n.A)(e,i.img))});var e}},90565:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(43988);const i=function(t){var e=new t.constructor(t.byteLength);return new n.A(e).set(new n.A(t)),e}},92049:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=Array.isArray},93539:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(72453),i=r(63122);const a=class{constructor(){this.type=i.Z.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=i.Z.ALL}is(t){return this.type===t}};const o=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.Z.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:r,l:i}=t;void 0===e&&(t.h=n.A.channel.rgb2hsl(t,"h")),void 0===r&&(t.s=n.A.channel.rgb2hsl(t,"s")),void 0===i&&(t.l=n.A.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:r,b:i}=t;void 0===e&&(t.r=n.A.channel.hsl2rgb(t,"r")),void 0===r&&(t.g=n.A.channel.hsl2rgb(t,"g")),void 0===i&&(t.b=n.A.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(i.Z.HSL)||void 0===e?(this._ensureHSL(),n.A.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(i.Z.HSL)||void 0===e?(this._ensureHSL(),n.A.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(i.Z.HSL)||void 0===e?(this._ensureHSL(),n.A.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(i.Z.RGB)||void 0===e?(this._ensureRGB(),n.A.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(i.Z.RGB)||void 0===e?(this._ensureRGB(),n.A.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(i.Z.RGB)||void 0===e?(this._ensureRGB(),n.A.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(i.Z.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(i.Z.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(i.Z.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(i.Z.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(i.Z.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(i.Z.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},95635:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(72453),i=r(74886);const a=(t,e,r)=>{const a=i.A.parse(t),o=a[e],s=n.A.channel.clamp[e](o+r);return o!==s&&(a[e]=s),i.A.stringify(a)}},97271:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=Object.prototype;const i=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},97795:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>c});r(96540);var n=r(34164),i=r(26058),a=r(17559),o=r(34291);const s={codeBlockContainer:"codeBlockContainer_Ckt0"};var l=r(74848);function c({as:t,...e}){const r=(0,i.A)(),c=(0,o.M$)(r);return(0,l.jsx)(t,{...e,style:c,className:(0,n.A)(e.className,s.codeBlockContainer,a.G.common.codeBlock)})}},99208:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const i=r(74848),a=n(r(31795)),o=r(59667);e.default=function(t){const e=(0,o.useMDXEnhancementElements)("heading","after",t);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.default,{...t}),e]})}},99418:(t,e,r)=>{"use strict";r.d(e,{A:()=>st});const{entries:n,setPrototypeOf:i,isFrozen:a,getPrototypeOf:o,getOwnPropertyDescriptor:s}=Object;let{freeze:l,seal:c,create:h}=Object,{apply:u,construct:d}="undefined"!=typeof Reflect&&Reflect;l||(l=function(t){return t}),c||(c=function(t){return t}),u||(u=function(t,e,r){return t.apply(e,r)}),d||(d=function(t,e){return new t(...e)});const p=M(Array.prototype.forEach),f=M(Array.prototype.lastIndexOf),g=M(Array.prototype.pop),m=M(Array.prototype.push),y=M(Array.prototype.splice),x=M(String.prototype.toLowerCase),b=M(String.prototype.toString),C=M(String.prototype.match),k=M(String.prototype.replace),w=M(String.prototype.indexOf),_=M(String.prototype.trim),v=M(Object.prototype.hasOwnProperty),S=M(RegExp.prototype.test),T=(A=TypeError,function(){for(var t=arguments.length,e=new Array(t),r=0;r1?r-1:0),i=1;i2&&void 0!==arguments[2]?arguments[2]:x;i&&i(t,null);let n=e.length;for(;n--;){let i=e[n];if("string"==typeof i){const t=r(i);t!==i&&(a(e)||(e[n]=t),i=t)}t[i]=!0}return t}function L(t){for(let e=0;e/gm),U=c(/\$\{[\w\W]*/gm),G=c(/^data-[\-\w.\u00B7-\uFFFF]+$/),Y=c(/^aria-[\-\w]+$/),X=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),V=c(/^(?:\w+script|data):/i),Z=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Q=c(/^html$/i),J=c(/^[a-z][.\w]*(-[.\w]+)+$/i);var tt=Object.freeze({__proto__:null,ARIA_ATTR:Y,ATTR_WHITESPACE:Z,CUSTOM_ELEMENT:J,DATA_ATTR:G,DOCTYPE_NAME:Q,ERB_EXPR:H,IS_ALLOWED_URI:X,IS_SCRIPT_OR_DATA:V,MUSTACHE_EXPR:W,TMPLIT_EXPR:U});const et=1,rt=3,nt=7,it=8,at=9,ot=function(){return"undefined"==typeof window?null:window};var st=function t(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ot();const r=e=>t(e);if(r.version="3.2.6",r.removed=[],!e||!e.document||e.document.nodeType!==at||!e.Element)return r.isSupported=!1,r;let{document:i}=e;const a=i,o=a.currentScript,{DocumentFragment:s,HTMLTemplateElement:c,Node:u,Element:d,NodeFilter:A,NamedNodeMap:M=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:L,DOMParser:W,trustedTypes:H}=e,U=d.prototype,G=$(U,"cloneNode"),Y=$(U,"remove"),V=$(U,"nextSibling"),Z=$(U,"childNodes"),J=$(U,"parentNode");if("function"==typeof c){const t=i.createElement("template");t.content&&t.content.ownerDocument&&(i=t.content.ownerDocument)}let st,lt="";const{implementation:ct,createNodeIterator:ht,createDocumentFragment:ut,getElementsByTagName:dt}=i,{importNode:pt}=a;let ft={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};r.isSupported="function"==typeof n&&"function"==typeof J&&ct&&void 0!==ct.createHTMLDocument;const{MUSTACHE_EXPR:gt,ERB_EXPR:mt,TMPLIT_EXPR:yt,DATA_ATTR:xt,ARIA_ATTR:bt,IS_SCRIPT_OR_DATA:Ct,ATTR_WHITESPACE:kt,CUSTOM_ELEMENT:wt}=tt;let{IS_ALLOWED_URI:_t}=tt,vt=null;const St=B({},[...E,...D,...O,...j,...R]);let Tt=null;const At=B({},[...P,...z,...K,...q]);let Mt=Object.seal(h(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Bt=null,Lt=null,Ft=!0,$t=!0,Et=!1,Dt=!0,Ot=!1,Nt=!0,jt=!1,It=!1,Rt=!1,Pt=!1,zt=!1,Kt=!1,qt=!0,Wt=!1,Ht=!0,Ut=!1,Gt={},Yt=null;const Xt=B({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Vt=null;const Zt=B({},["audio","video","img","source","image","track"]);let Qt=null;const Jt=B({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),te="http://www.w3.org/1998/Math/MathML",ee="http://www.w3.org/2000/svg",re="http://www.w3.org/1999/xhtml";let ne=re,ie=!1,ae=null;const oe=B({},[te,ee,re],b);let se=B({},["mi","mo","mn","ms","mtext"]),le=B({},["annotation-xml"]);const ce=B({},["title","style","font","a","script"]);let he=null;const ue=["application/xhtml+xml","text/html"];let de=null,pe=null;const fe=i.createElement("form"),ge=function(t){return t instanceof RegExp||t instanceof Function},me=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!pe||pe!==t){if(t&&"object"==typeof t||(t={}),t=F(t),he=-1===ue.indexOf(t.PARSER_MEDIA_TYPE)?"text/html":t.PARSER_MEDIA_TYPE,de="application/xhtml+xml"===he?b:x,vt=v(t,"ALLOWED_TAGS")?B({},t.ALLOWED_TAGS,de):St,Tt=v(t,"ALLOWED_ATTR")?B({},t.ALLOWED_ATTR,de):At,ae=v(t,"ALLOWED_NAMESPACES")?B({},t.ALLOWED_NAMESPACES,b):oe,Qt=v(t,"ADD_URI_SAFE_ATTR")?B(F(Jt),t.ADD_URI_SAFE_ATTR,de):Jt,Vt=v(t,"ADD_DATA_URI_TAGS")?B(F(Zt),t.ADD_DATA_URI_TAGS,de):Zt,Yt=v(t,"FORBID_CONTENTS")?B({},t.FORBID_CONTENTS,de):Xt,Bt=v(t,"FORBID_TAGS")?B({},t.FORBID_TAGS,de):F({}),Lt=v(t,"FORBID_ATTR")?B({},t.FORBID_ATTR,de):F({}),Gt=!!v(t,"USE_PROFILES")&&t.USE_PROFILES,Ft=!1!==t.ALLOW_ARIA_ATTR,$t=!1!==t.ALLOW_DATA_ATTR,Et=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Dt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Ot=t.SAFE_FOR_TEMPLATES||!1,Nt=!1!==t.SAFE_FOR_XML,jt=t.WHOLE_DOCUMENT||!1,Pt=t.RETURN_DOM||!1,zt=t.RETURN_DOM_FRAGMENT||!1,Kt=t.RETURN_TRUSTED_TYPE||!1,Rt=t.FORCE_BODY||!1,qt=!1!==t.SANITIZE_DOM,Wt=t.SANITIZE_NAMED_PROPS||!1,Ht=!1!==t.KEEP_CONTENT,Ut=t.IN_PLACE||!1,_t=t.ALLOWED_URI_REGEXP||X,ne=t.NAMESPACE||re,se=t.MATHML_TEXT_INTEGRATION_POINTS||se,le=t.HTML_INTEGRATION_POINTS||le,Mt=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ge(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Mt.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ge(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Mt.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Mt.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ot&&($t=!1),zt&&(Pt=!0),Gt&&(vt=B({},R),Tt=[],!0===Gt.html&&(B(vt,E),B(Tt,P)),!0===Gt.svg&&(B(vt,D),B(Tt,z),B(Tt,q)),!0===Gt.svgFilters&&(B(vt,O),B(Tt,z),B(Tt,q)),!0===Gt.mathMl&&(B(vt,j),B(Tt,K),B(Tt,q))),t.ADD_TAGS&&(vt===St&&(vt=F(vt)),B(vt,t.ADD_TAGS,de)),t.ADD_ATTR&&(Tt===At&&(Tt=F(Tt)),B(Tt,t.ADD_ATTR,de)),t.ADD_URI_SAFE_ATTR&&B(Qt,t.ADD_URI_SAFE_ATTR,de),t.FORBID_CONTENTS&&(Yt===Xt&&(Yt=F(Yt)),B(Yt,t.FORBID_CONTENTS,de)),Ht&&(vt["#text"]=!0),jt&&B(vt,["html","head","body"]),vt.table&&(B(vt,["tbody"]),delete Bt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');st=t.TRUSTED_TYPES_POLICY,lt=st.createHTML("")}else void 0===st&&(st=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let r=null;const n="data-tt-policy-suffix";e&&e.hasAttribute(n)&&(r=e.getAttribute(n));const i="dompurify"+(r?"#"+r:"");try{return t.createPolicy(i,{createHTML:t=>t,createScriptURL:t=>t})}catch(a){return console.warn("TrustedTypes policy "+i+" could not be created."),null}}(H,o)),null!==st&&"string"==typeof lt&&(lt=st.createHTML(""));l&&l(t),pe=t}},ye=B({},[...D,...O,...N]),xe=B({},[...j,...I]),be=function(t){m(r.removed,{element:t});try{J(t).removeChild(t)}catch(e){Y(t)}},Ce=function(t,e){try{m(r.removed,{attribute:e.getAttributeNode(t),from:e})}catch(n){m(r.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t)if(Pt||zt)try{be(e)}catch(n){}else try{e.setAttribute(t,"")}catch(n){}},ke=function(t){let e=null,r=null;if(Rt)t=""+t;else{const e=C(t,/^[\r\n\t ]+/);r=e&&e[0]}"application/xhtml+xml"===he&&ne===re&&(t=''+t+"");const n=st?st.createHTML(t):t;if(ne===re)try{e=(new W).parseFromString(n,he)}catch(o){}if(!e||!e.documentElement){e=ct.createDocument(ne,"template",null);try{e.documentElement.innerHTML=ie?lt:n}catch(o){}}const a=e.body||e.documentElement;return t&&r&&a.insertBefore(i.createTextNode(r),a.childNodes[0]||null),ne===re?dt.call(e,jt?"html":"body")[0]:jt?e.documentElement:a},we=function(t){return ht.call(t.ownerDocument||t,t,A.SHOW_ELEMENT|A.SHOW_COMMENT|A.SHOW_TEXT|A.SHOW_PROCESSING_INSTRUCTION|A.SHOW_CDATA_SECTION,null)},_e=function(t){return t instanceof L&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof M)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ve=function(t){return"function"==typeof u&&t instanceof u};function Se(t,e,n){p(t,t=>{t.call(r,e,n,pe)})}const Te=function(t){let e=null;if(Se(ft.beforeSanitizeElements,t,null),_e(t))return be(t),!0;const n=de(t.nodeName);if(Se(ft.uponSanitizeElement,t,{tagName:n,allowedTags:vt}),Nt&&t.hasChildNodes()&&!ve(t.firstElementChild)&&S(/<[/\w!]/g,t.innerHTML)&&S(/<[/\w!]/g,t.textContent))return be(t),!0;if(t.nodeType===nt)return be(t),!0;if(Nt&&t.nodeType===it&&S(/<[/\w]/g,t.data))return be(t),!0;if(!vt[n]||Bt[n]){if(!Bt[n]&&Me(n)){if(Mt.tagNameCheck instanceof RegExp&&S(Mt.tagNameCheck,n))return!1;if(Mt.tagNameCheck instanceof Function&&Mt.tagNameCheck(n))return!1}if(Ht&&!Yt[n]){const e=J(t)||t.parentNode,r=Z(t)||t.childNodes;if(r&&e){for(let n=r.length-1;n>=0;--n){const i=G(r[n],!0);i.__removalCount=(t.__removalCount||0)+1,e.insertBefore(i,V(t))}}}return be(t),!0}return t instanceof d&&!function(t){let e=J(t);e&&e.tagName||(e={namespaceURI:ne,tagName:"template"});const r=x(t.tagName),n=x(e.tagName);return!!ae[t.namespaceURI]&&(t.namespaceURI===ee?e.namespaceURI===re?"svg"===r:e.namespaceURI===te?"svg"===r&&("annotation-xml"===n||se[n]):Boolean(ye[r]):t.namespaceURI===te?e.namespaceURI===re?"math"===r:e.namespaceURI===ee?"math"===r&&le[n]:Boolean(xe[r]):t.namespaceURI===re?!(e.namespaceURI===ee&&!le[n])&&!(e.namespaceURI===te&&!se[n])&&!xe[r]&&(ce[r]||!ye[r]):!("application/xhtml+xml"!==he||!ae[t.namespaceURI]))}(t)?(be(t),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!S(/<\/no(script|embed|frames)/i,t.innerHTML)?(Ot&&t.nodeType===rt&&(e=t.textContent,p([gt,mt,yt],t=>{e=k(e,t," ")}),t.textContent!==e&&(m(r.removed,{element:t.cloneNode()}),t.textContent=e)),Se(ft.afterSanitizeElements,t,null),!1):(be(t),!0)},Ae=function(t,e,r){if(qt&&("id"===e||"name"===e)&&(r in i||r in fe))return!1;if($t&&!Lt[e]&&S(xt,e));else if(Ft&&S(bt,e));else if(!Tt[e]||Lt[e]){if(!(Me(t)&&(Mt.tagNameCheck instanceof RegExp&&S(Mt.tagNameCheck,t)||Mt.tagNameCheck instanceof Function&&Mt.tagNameCheck(t))&&(Mt.attributeNameCheck instanceof RegExp&&S(Mt.attributeNameCheck,e)||Mt.attributeNameCheck instanceof Function&&Mt.attributeNameCheck(e))||"is"===e&&Mt.allowCustomizedBuiltInElements&&(Mt.tagNameCheck instanceof RegExp&&S(Mt.tagNameCheck,r)||Mt.tagNameCheck instanceof Function&&Mt.tagNameCheck(r))))return!1}else if(Qt[e]);else if(S(_t,k(r,kt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==w(r,"data:")||!Vt[t]){if(Et&&!S(Ct,k(r,kt,"")));else if(r)return!1}else;return!0},Me=function(t){return"annotation-xml"!==t&&C(t,wt)},Be=function(t){Se(ft.beforeSanitizeAttributes,t,null);const{attributes:e}=t;if(!e||_e(t))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tt,forceKeepAttr:void 0};let i=e.length;for(;i--;){const o=e[i],{name:s,namespaceURI:l,value:c}=o,h=de(s),u=c;let d="value"===s?u:_(u);if(n.attrName=h,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,Se(ft.uponSanitizeAttribute,t,n),d=n.attrValue,!Wt||"id"!==h&&"name"!==h||(Ce(s,t),d="user-content-"+d),Nt&&S(/((--!?|])>)|<\/(style|title)/i,d)){Ce(s,t);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){Ce(s,t);continue}if(!Dt&&S(/\/>/i,d)){Ce(s,t);continue}Ot&&p([gt,mt,yt],t=>{d=k(d,t," ")});const f=de(t.nodeName);if(Ae(f,h,d)){if(st&&"object"==typeof H&&"function"==typeof H.getAttributeType)if(l);else switch(H.getAttributeType(f,h)){case"TrustedHTML":d=st.createHTML(d);break;case"TrustedScriptURL":d=st.createScriptURL(d)}if(d!==u)try{l?t.setAttributeNS(l,s,d):t.setAttribute(s,d),_e(t)?be(t):g(r.removed)}catch(a){Ce(s,t)}}else Ce(s,t)}Se(ft.afterSanitizeAttributes,t,null)},Le=function t(e){let r=null;const n=we(e);for(Se(ft.beforeSanitizeShadowDOM,e,null);r=n.nextNode();)Se(ft.uponSanitizeShadowNode,r,null),Te(r),Be(r),r.content instanceof s&&t(r.content);Se(ft.afterSanitizeShadowDOM,e,null)};return r.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,i=null,o=null,l=null;if(ie=!t,ie&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ve(t)){if("function"!=typeof t.toString)throw T("toString is not a function");if("string"!=typeof(t=t.toString()))throw T("dirty is not a string, aborting")}if(!r.isSupported)return t;if(It||me(e),r.removed=[],"string"==typeof t&&(Ut=!1),Ut){if(t.nodeName){const e=de(t.nodeName);if(!vt[e]||Bt[e])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof u)n=ke("\x3c!----\x3e"),i=n.ownerDocument.importNode(t,!0),i.nodeType===et&&"BODY"===i.nodeName||"HTML"===i.nodeName?n=i:n.appendChild(i);else{if(!Pt&&!Ot&&!jt&&-1===t.indexOf("<"))return st&&Kt?st.createHTML(t):t;if(n=ke(t),!n)return Pt?null:Kt?lt:""}n&&Rt&&be(n.firstChild);const c=we(Ut?t:n);for(;o=c.nextNode();)Te(o),Be(o),o.content instanceof s&&Le(o.content);if(Ut)return t;if(Pt){if(zt)for(l=ut.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Tt.shadowroot||Tt.shadowrootmode)&&(l=pt.call(a,l,!0)),l}let h=jt?n.outerHTML:n.innerHTML;return jt&&vt["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&S(Q,n.ownerDocument.doctype.name)&&(h="\n"+h),Ot&&p([gt,mt,yt],t=>{h=k(h,t," ")}),st&&Kt?st.createHTML(h):h},r.setConfig=function(){me(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),It=!0},r.clearConfig=function(){pe=null,It=!1},r.isValidAttribute=function(t,e,r){pe||me({});const n=de(t),i=de(e);return Ae(n,i,r)},r.addHook=function(t,e){"function"==typeof e&&m(ft[t],e)},r.removeHook=function(t,e){if(void 0!==e){const r=f(ft[t],e);return-1===r?void 0:y(ft[t],r,1)[0]}return g(ft[t])},r.removeHooks=function(t){ft[t]=[]},r.removeAllHooks=function(){ft={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},r}()},99912:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(41917);const i=function(){return!1};var a="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=a&&"object"==typeof module&&module&&!module.nodeType&&module,s=o&&o.exports===a?n.A.Buffer:void 0;const l=(s?s.isBuffer:void 0)||i}}]); \ No newline at end of file diff --git a/assets/js/17896441.7ecfd138.js.LICENSE.txt b/assets/js/17896441.7ecfd138.js.LICENSE.txt deleted file mode 100644 index 6e97ec6..0000000 --- a/assets/js/17896441.7ecfd138.js.LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */ diff --git a/assets/js/1f1f54c7.78b63311.js b/assets/js/1f1f54c7.78b63311.js deleted file mode 100644 index 533d2c3..0000000 --- a/assets/js/1f1f54c7.78b63311.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4214],{28453:(e,s,r)=>{r.d(s,{R:()=>i,x:()=>a});var t=r(96540);const n={},o=t.createContext(n);function i(e){const s=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),t.createElement(o.Provider,{value:s},e.children)}},95470:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"guides/js-waku/store-retrieve-messages","title":"Retrieve Messages Using Store Protocol","description":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","source":"@site/docs/guides/js-waku/store-retrieve-messages.md","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/store-retrieve-messages","permalink":"/guides/js-waku/store-retrieve-messages","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/store-retrieve-messages.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Retrieve Messages Using Store Protocol","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Send and Receive Messages Using Light Push and Filter","permalink":"/guides/js-waku/light-send-receive"},"next":{"title":"Encrypt, Decrypt, and Sign Your Messages","permalink":"/guides/js-waku/message-encryption"}}');var n=r(74848),o=r(28453);const i={title:"Retrieve Messages Using Store Protocol",hide_table_of_contents:!0},a=void 0,c={},d=[{value:"Create a light node",id:"create-a-light-node",level:2},{value:"Connect to store peers",id:"connect-to-store-peers",level:2},{value:"Choose a content topic",id:"choose-a-content-topic",level:2},{value:"Retrieve messages",id:"retrieve-messages",level:2},{value:"queryWithOrderedCallback",id:"querywithorderedcallback",level:3},{value:"queryGenerator",id:"querygenerator",level:3},{value:"Store query options",id:"store-query-options",level:2},{value:"pageDirection",id:"pagedirection",level:3},{value:"cursor",id:"cursor",level:3},{value:"timeFilter",id:"timefilter",level:3}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the ",(0,n.jsx)(s.a,{href:"/learn/concepts/protocols#store",children:"Store protocol"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"create-a-light-node",children:"Create a light node"}),"\n",(0,n.jsxs)(s.p,{children:["Use the ",(0,n.jsx)(s.code,{children:"createLightNode()"})," function to create a Light Node and interact with the Waku Network:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\n\n// Create and start a Light Node\nconst node = await createLightNode({ defaultBootstrap: true });\nawait node.start();\n'})}),"\n",(0,n.jsx)(s.h2,{id:"connect-to-store-peers",children:"Connect to store peers"}),"\n",(0,n.jsxs)(s.p,{children:["Use the ",(0,n.jsx)(s.code,{children:"node.waitForPeers()"})," method to wait for the node to connect with Store peers:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { Protocols } from "@waku/sdk";\n\n// Wait for a successful peer connection\nawait node.waitForPeers([Protocols.Store]);\n'})}),"\n",(0,n.jsx)(s.p,{children:"You can also specify a dedicated Store peer to use for queries when creating the node. This is particularly useful when running your own Store node or when you want to use a specific Store node in the network:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'const node = await createLightNode({ \n defaultBootstrap: true,\n store: {\n peer: "/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm..." // multiaddr or PeerId of your Store node\n }\n});\n'})}),"\n",(0,n.jsx)(s.p,{children:"If the specified Store peer is not available, the node will fall back to using random Store peers in the network."}),"\n",(0,n.jsx)(s.h2,{id:"choose-a-content-topic",children:"Choose a content topic"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/learn/concepts/content-topics",children:"Choose a content topic"})," for filtering the messages to retrieve and create a message ",(0,n.jsx)(s.code,{children:"decoder"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { createDecoder } from "@waku/sdk";\n\n// Choose a content topic\nconst contentTopic = "/store-guide/1/message/proto";\n\n// Create a message decoder\nconst decoder = createDecoder(contentTopic);\n'})}),"\n",(0,n.jsx)(s.h2,{id:"retrieve-messages",children:"Retrieve messages"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"@waku/sdk"})," provides the ",(0,n.jsx)(s.code,{children:"queryWithOrderedCallback()"})," and ",(0,n.jsx)(s.code,{children:"queryGenerator()"})," functions for querying ",(0,n.jsx)(s.code,{children:"Store"})," nodes and retrieving historical or missed messages. The responses from ",(0,n.jsx)(s.code,{children:"Store"})," nodes are paginated and require you to process each page sequentially."]}),"\n",(0,n.jsx)(s.h3,{id:"querywithorderedcallback",children:(0,n.jsx)(s.code,{children:"queryWithOrderedCallback"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"store.queryWithOrderedCallback()"})," function provides a straightforward method for querying ",(0,n.jsx)(s.code,{children:"Store"})," nodes and processing messages in chronological order through a callback function. It accepts these parameters:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"decoders"}),": List of ",(0,n.jsx)(s.code,{children:"decoders"})," that specify the ",(0,n.jsx)(s.code,{children:"content topic"})," to query for and their ",(0,n.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/application/26/payload",children:"message decryption"})," methods."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"callback"}),": The callback function for processing the retrieved messages."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"options"})," (optional): ",(0,n.jsx)(s.a,{href:"/guides/js-waku/store-retrieve-messages#store-query-options",children:"Query options"})," to filter the retrieved messages."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// Create the callback function\nconst callback = (wakuMessage) => {\n // Render the message/payload in your application\n console.log(wakuMessage);\n};\n\n// Query the Store peer\nawait node.store.queryWithOrderedCallback([decoder], callback);\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"queryWithOrderedCallback()"})," function always returns the most recent messages in a page first."]})}),"\n",(0,n.jsx)(s.h3,{id:"querygenerator",children:(0,n.jsx)(s.code,{children:"queryGenerator"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"store.queryGenerator()"})," function provides more control and flexibility over processing messages retrieved from ",(0,n.jsx)(s.code,{children:"Store"})," nodes through ",(0,n.jsx)(s.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator",children:"Async Generators"}),". It accepts these parameters:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"decoders"}),": List of ",(0,n.jsx)(s.code,{children:"decoders"})," that specify the ",(0,n.jsx)(s.code,{children:"content topic"})," to query for and their ",(0,n.jsx)(s.a,{href:"https://rfc.vac.dev/waku/standards/application/26/payload",children:"message decryption"})," methods."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"options"})," (optional): ",(0,n.jsx)(s.a,{href:"/guides/js-waku/store-retrieve-messages#store-query-options",children:"Query options"})," to filter the retrieved messages."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// Create the store query\nconst storeQuery = node.store.queryGenerator([decoder]);\n\n// Process the messages\nfor await (const messagesPromises of storeQuery) {\n // Fulfil the messages promises\n const messages = await Promise.all(\n messagesPromises.map(async (p) => {\n const msg = await p;\n // Render the message/payload in your application\n console.log(msg);\n })\n );\n}\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"queryGenerator()"})," function always returns the oldest messages in a page first."]})}),"\n",(0,n.jsx)(s.h2,{id:"store-query-options",children:"Store query options"}),"\n",(0,n.jsx)(s.h3,{id:"pagedirection",children:(0,n.jsx)(s.code,{children:"pageDirection"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"pageDirection"})," option specifies the direction in which pages are retrieved:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"BACKWARD"})," (default): Most recent page first."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"FORWARD"}),": Oldest page first."]}),"\n"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { PageDirection } from "@waku/sdk";\n\n// Retrieve recent messages first\nconst queryOptions = {\n pageDirection: PageDirection.BACKWARD,\n};\n\n// Retrieve oldest messages first\nconst queryOptions = {\n pageDirection: PageDirection.FORWARD,\n};\n\n// Query the Store peer with options\nawait node.store.queryWithOrderedCallback([decoder], callback, options);\nconst storeQuery = node.store.queryGenerator([decoder, options]);\n'})}),"\n",(0,n.jsx)(s.h3,{id:"cursor",children:(0,n.jsx)(s.code,{children:"cursor"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"cursor"})," option specifies the starting index for retrieving messages. For example, consider a query that retrieves the first page messages and then continues with the next page:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:'import { waku } from "@waku/sdk";\n\n// Create the callback function\nconst messages = [];\nconst callback = (wakuMessage) => {\n messages.push(wakuMessage);\n // Return "true" to stop retrieving pages\n // Here, it retrieves only the first page\n return true;\n};\n\n// Retrieve the first page of messages\n// This retrieves all the messages if "return true" is not present\nawait node.store.queryWithOrderedCallback([decoder], callback);\n\n// Create the cursor\nconst lastMessage = messages[messages.length - 1];\nconst cursor = await waku.createCursor(lastMessage);\n\n// Retrieve the next page of messages\n// The message at the cursor index is excluded from the result\nawait node.store.queryWithOrderedCallback([decoder], callback, {\n cursor: cursor,\n});\nconsole.log(messages);\n'})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["If you omit the ",(0,n.jsx)(s.code,{children:"cursor"})," option, the query will start from the beginning or end of the history, depending on the ",(0,n.jsx)(s.a,{href:"#pagedirection",children:"page direction"}),"."]})}),"\n",(0,n.jsx)(s.h3,{id:"timefilter",children:(0,n.jsx)(s.code,{children:"timeFilter"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"timeFilter"})," option specifies a time frame to retrieve messages from. For example, consider a query that retrieves messages from the previous week:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-js",children:"// Get the time frame\nconst endTime = new Date();\nconst startTime = new Date();\nstartTime.setDate(endTime.getDate() - 7);\n\n// Retrieve a week of messages\nconst queryOptions = {\n timeFilter: {\n startTime,\n endTime,\n },\n};\n\n// Query the Store peer with options\nawait node.store.queryWithOrderedCallback([decoder], callback, options);\nconst storeQuery = node.store.queryGenerator([decoder, options]);\n"})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"timeFilter"})," option significantly reduces message retrieval performance. To optimise it, consider resuming message retrieval using a ",(0,n.jsx)(s.a,{href:"#cursor",children:"cursor"})," that starts from the last seen message."]})}),"\n",(0,n.jsx)(s.admonition,{title:"Congratulations!",type:"tip",children:(0,n.jsxs)(s.p,{children:["You have successfully retrieved and filtered historical messages on a Light Node using the ",(0,n.jsx)(s.code,{children:"Store"})," protocol. Have a look at the ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/store-js",children:"store-js"})," and ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/store-reactjs-chat",children:"store-reactjs-chat"})," examples for working demos."]})})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}}}]); \ No newline at end of file diff --git a/assets/js/1f4fafed.6f333dae.js b/assets/js/1f4fafed.6f333dae.js new file mode 100644 index 0000000..cf34354 --- /dev/null +++ b/assets/js/1f4fafed.6f333dae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[7218],{30958:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>u});const r=JSON.parse('{"id":"run-node/faq","title":"Nwaku FAQ","description":"Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.","source":"@site/docs/run-node/faq.md","sourceDirName":"run-node","slug":"/run-node/faq","permalink":"/run-node/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/run-node/faq.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Nwaku FAQ","hide_table_of_contents":true,"sidebar_label":"Frequently Asked Questions","displayed_sidebar":"runNode"},"sidebar":"runNode","previous":{"title":"Node Configuration Examples","permalink":"/run-node/configure-nwaku"},"next":{"title":"Upgrade Instructions","permalink":"/run-node/upgrade-instructions"}}');var i=o(74848),t=o(28453),s=o(39018);const a={title:"Nwaku FAQ",hide_table_of_contents:!0,sidebar_label:"Frequently Asked Questions",displayed_sidebar:"runNode"},d=void 0,c={},u=[];function l(e){const n={p:"p",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.AccordionItem,{title:"How can I run a Waku node?",children:(0,i.jsxs)(n.p,{children:["Check out the ",(0,i.jsx)("a",{href:"/run-node/run-docker-compose",children:"Run Nwaku with Docker Compose"})," guide to learn the simplest and fastest way to run a node. You can also check the comprehensive ",(0,i.jsx)("a",{href:"/run-node/",children:"Run a Nwaku Node"})," guide to explore other options like ",(0,i.jsx)("a",{href:"/run-node/run-node#download-the-binary",children:"downloading binaries"})," and ",(0,i.jsx)("a",{href:"/run-node/build-source",children:"building from source"}),"."]})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"What are the system requirements for running a node?",children:(0,i.jsx)(n.p,{children:"We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient."})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"How can I interact with my running nwaku node?",children:(0,i.jsxs)(n.p,{children:["You can interact with a running nwaku node using the ",(0,i.jsx)("a",{href:"https://waku-org.github.io/waku-rest-api/",children:"REST API interface"})," or the ",(0,i.jsx)("a",{href:"/build/javascript/",children:"JavaScript Waku SDK"}),"."]})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"How can I view the logs of a nwaku node running in Docker?",children:(0,i.jsx)(n.p,{children:'To check your node logs in Docker, use the command: "docker-compose logs -f nwaku"'})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"What configuration methods are available for nwaku nodes?",children:(0,i.jsxs)(n.p,{children:["You can configure Nwaku nodes using command line options and flags, environment variables, and TOML configuration files. Check out the ",(0,i.jsx)("a",{href:"/run-node/config-methods",children:"Node Configuration Methods"})," guide to understand their usage and priority."]})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"How can I configure my nwaku node before running?",children:(0,i.jsxs)(n.p,{children:["Check out the ",(0,i.jsx)("a",{href:"/run-node/config-options",children:"Node Configuration Options"})," guide for available node configuration options, their default values and descriptions. For examples of common configuration use cases, visit the ",(0,i.jsx)("a",{href:"/run-node/configure-nwaku",children:"Node Configuration Examples"})," guide."]})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"What peer discovery mechanisms are available for nwaku nodes, and how can I configure them?",children:(0,i.jsxs)(n.p,{children:["You can configure peer discovery for nwaku nodes through options like ",(0,i.jsx)("a",{href:"/learn/concepts/static-peers",children:"Static Peers"}),", ",(0,i.jsx)("a",{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"}),", ",(0,i.jsx)("a",{href:"/learn/concepts/discv5",children:"DiscV5"}),", and ",(0,i.jsx)("a",{href:"/learn/concepts/peer-exchange",children:"Peer Exchange"}),". Check out the ",(0,i.jsx)("a",{href:"/run-node/configure-discovery",children:"Configure Peer Discovery"})," guide for setting up your node."]})}),"\n",(0,i.jsx)(s.AccordionItem,{title:"How do I find my nwaku node's addresses for peer discovery?",children:(0,i.jsxs)(n.p,{children:["The node listening and ENR addresses can be found through the node's logs and ",(0,i.jsx)("a",{href:"https://waku-org.github.io/waku-rest-api/#get-/debug/v1/info",children:"REST API"}),". Check out the ",(0,i.jsx)("a",{href:"/run-node/run-node/find-node-address",children:"Find the node addresses"})," section to understand how to locate your node addresses."]})})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},39018:(e,n,o)=>{var r=o(98941);o.o(r,"AccordionItem")&&o.d(n,{AccordionItem:function(){return r.AccordionItem}})}}]); \ No newline at end of file diff --git a/assets/js/2076.73eda8bc.js b/assets/js/2076.73eda8bc.js deleted file mode 100644 index 7a3cd27..0000000 --- a/assets/js/2076.73eda8bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2076],{22076:(e,r,s)=>{s.d(r,{diagram:()=>t});var a=s(98379),u=(s(24651),s(44540),s(98833),s(45020),s(51789),s(30070),s(66906),s(28823),s(55683),s(68506),s(46792),s(41750)),t={parser:a._$,get db(){return new a.NM},renderer:a.Lh,styles:a.tM,init:(0,u.K2)(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]); \ No newline at end of file diff --git a/assets/js/20987266.0004704f.js b/assets/js/20987266.0004704f.js deleted file mode 100644 index 3377a07..0000000 --- a/assets/js/20987266.0004704f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[8169],{39018:(e,n,o)=>{var i=o(98941);o.o(i,"AccordionItem")&&o.d(n,{AccordionItem:function(){return i.AccordionItem}})},91090:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>l,frontMatter:()=>t,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"guides/nwaku/faq","title":"Nwaku FAQ","description":"Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.","source":"@site/docs/guides/nwaku/faq.md","sourceDirName":"guides/nwaku","slug":"/guides/nwaku/faq","permalink":"/guides/nwaku/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/nwaku/faq.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Nwaku FAQ","hide_table_of_contents":true,"sidebar_label":"Frequently Asked Questions"},"sidebar":"guides","previous":{"title":"Node Configuration Examples","permalink":"/guides/nwaku/configure-nwaku"},"next":{"title":"Upgrade Instructions","permalink":"/guides/nwaku/upgrade-instructions"}}');var r=o(74848),s=o(28453),a=o(39018);const t={title:"Nwaku FAQ",hide_table_of_contents:!0,sidebar_label:"Frequently Asked Questions"},d=void 0,u={},c=[];function h(e){const n={p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.AccordionItem,{title:"How can I run a Waku node?",children:(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)("a",{href:"/guides/nwaku/run-docker-compose",children:"Run Nwaku with Docker Compose"})," guide to learn the simplest and fastest way to run a node. You can also check the comprehensive ",(0,r.jsx)("a",{href:"/guides/nwaku/run-node",children:"Run a Nwaku Node"})," guide to explore other options like ",(0,r.jsx)("a",{href:"/guides/nwaku/run-node#download-the-binary",children:"downloading binaries"})," and ",(0,r.jsx)("a",{href:"/guides/nwaku/build-source",children:"building from source"}),"."]})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"What are the system requirements for running a node?",children:(0,r.jsx)(n.p,{children:"We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient."})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"How can I interact with my running nwaku node?",children:(0,r.jsxs)(n.p,{children:["You can interact with a running nwaku node using the ",(0,r.jsx)("a",{href:"https://waku-org.github.io/waku-rest-api/",children:"REST API interface"})," or the ",(0,r.jsx)("a",{href:"/guides/js-waku/",children:"JavaScript Waku SDK"}),"."]})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"How can I view the logs of a nwaku node running in Docker?",children:(0,r.jsx)(n.p,{children:'To check your node logs in Docker, use the command: "docker-compose logs -f nwaku"'})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"What configuration methods are available for nwaku nodes?",children:(0,r.jsxs)(n.p,{children:["You can configure Nwaku nodes using command line options and flags, environment variables, and TOML configuration files. Check out the ",(0,r.jsx)("a",{href:"/guides/nwaku/config-methods",children:"Node Configuration Methods"})," guide to understand their usage and priority."]})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"How can I configure my nwaku node before running?",children:(0,r.jsxs)(n.p,{children:["Check out the ",(0,r.jsx)("a",{href:"/guides/nwaku/config-options",children:"Node Configuration Options"})," guide for available node configuration options, their default values and descriptions. For examples of common configuration use cases, visit the ",(0,r.jsx)("a",{href:"/guides/nwaku/configure-nwaku",children:"Node Configuration Examples"})," guide."]})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"What peer discovery mechanisms are available for nwaku nodes, and how can I configure them?",children:(0,r.jsxs)(n.p,{children:["You can configure peer discovery for nwaku nodes through options like ",(0,r.jsx)("a",{href:"/learn/concepts/static-peers",children:"Static Peers"}),", ",(0,r.jsx)("a",{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"}),", ",(0,r.jsx)("a",{href:"/learn/concepts/discv5",children:"DiscV5"}),", and ",(0,r.jsx)("a",{href:"/learn/concepts/peer-exchange",children:"Peer Exchange"}),". Check out the ",(0,r.jsx)("a",{href:"/guides/nwaku/configure-discovery",children:"Configure Peer Discovery"})," guide for setting up your node."]})}),"\n",(0,r.jsx)(a.AccordionItem,{title:"How do I find my nwaku node's addresses for peer discovery?",children:(0,r.jsxs)(n.p,{children:["The node listening and ENR addresses can be found through the node's logs and ",(0,r.jsx)("a",{href:"https://waku-org.github.io/waku-rest-api/#get-/debug/v1/info",children:"REST API"}),". Check out the ",(0,r.jsx)("a",{href:"/guides/nwaku/run-node#find-the-node-addresses",children:"Find the node addresses"})," section to understand how to locate your node addresses."]})})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}}}]); \ No newline at end of file diff --git a/assets/js/2159.d82e6f21.js b/assets/js/2159.d82e6f21.js deleted file mode 100644 index 6b3e810..0000000 --- a/assets/js/2159.d82e6f21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2159],{42159:(e,r,t)=>{t.d(r,{diagram:()=>u});var a=t(88583),s=(t(44540),t(98833),t(45020),t(51789),t(30070),t(66906),t(28823),t(55683),t(68506),t(46792),t(41750)),u={parser:a.Zk,get db(){return new a.u4(2)},renderer:a.q7,styles:a.tM,init:(0,s.K2)(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]); \ No newline at end of file diff --git a/assets/js/2291.ef00f3cc.js b/assets/js/2291.ef00f3cc.js new file mode 100644 index 0000000..b2cc27b --- /dev/null +++ b/assets/js/2291.ef00f3cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2291],{21152:(t,e,s)=>{s.d(e,{P:()=>r});var i=s(67633),n=s(40797),r=(0,n.K2)((t,e,s,r)=>{t.attr("class",s);const{width:o,height:l,x:c,y:h}=a(t,e);(0,i.a$)(t,l,o,r);const d=u(c,h,o,l,e);t.attr("viewBox",d),n.Rm.debug(`viewBox configured: ${d} with padding: ${e}`)},"setupViewPortForSVG"),a=(0,n.K2)((t,e)=>{const s=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:s.width+2*e,height:s.height+2*e,x:s.x,y:s.y}},"calculateDimensionsWithPadding"),u=(0,n.K2)((t,e,s,i,n)=>`${t-n} ${e-n} ${s} ${i}`,"createViewBox")},22291:(t,e,s)=>{s.d(e,{diagram:()=>C});var i=s(52501),n=s(73981),r=s(89625),a=s(21152),u=s(10045),o=(s(5164),s(28698),s(5894)),l=(s(63245),s(32387),s(30092),s(13226)),c=s(67633),h=s(40797),d=s(70451),p=s(25582),g=s(75937),A=class{constructor(){this.vertexCounter=0,this.config=(0,c.D7)(),this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCount=-1,this.posCrossRef=[],this.funs=[],this.setAccTitle=c.SV,this.setAccDescription=c.EI,this.setDiagramTitle=c.ke,this.getAccTitle=c.iN,this.getAccDescription=c.m7,this.getDiagramTitle=c.ab,this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{(0,h.K2)(this,"FlowDB")}sanitizeText(t){return c.Y2.sanitizeText(t,this.config)}lookUpDomId(t){for(const e of this.vertices.values())if(e.id===t)return e.domId;return t}addVertex(t,e,s,i,r,a,u={},l){if(!t||0===t.trim().length)return;let h;if(void 0!==l){let t;t=l.includes("\n")?l+"\n":"{\n"+l+"\n}",h=(0,n.H)(t,{schema:n.r})}const d=this.edges.find(e=>e.id===t);if(d){const t=h;return void 0!==t?.animate&&(d.animate=t.animate),void 0!==t?.animation&&(d.animation=t.animation),void(void 0!==t?.curve&&(d.interpolate=t.curve))}let p,g=this.vertices.get(t);if(void 0===g&&(g={id:t,labelType:"text",domId:"flowchart-"+t+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(t,g)),this.vertexCounter++,void 0!==e?(this.config=(0,c.D7)(),p=this.sanitizeText(e.text.trim()),g.labelType=e.type,p.startsWith('"')&&p.endsWith('"')&&(p=p.substring(1,p.length-1)),g.text=p):void 0===g.text&&(g.text=t),void 0!==s&&(g.type=s),null!=i&&i.forEach(t=>{g.styles.push(t)}),null!=r&&r.forEach(t=>{g.classes.push(t)}),void 0!==a&&(g.dir=a),void 0===g.props?g.props=u:void 0!==u&&Object.assign(g.props,u),void 0!==h){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!(0,o.aP)(h.shape))throw new Error(`No such shape: ${h.shape}.`);g.type=h?.shape}h?.label&&(g.text=h?.label),h?.icon&&(g.icon=h?.icon,h.label?.trim()||g.text!==t||(g.text="")),h?.form&&(g.form=h?.form),h?.pos&&(g.pos=h?.pos),h?.img&&(g.img=h?.img,h.label?.trim()||g.text!==t||(g.text="")),h?.constraint&&(g.constraint=h.constraint),h.w&&(g.assetWidth=Number(h.w)),h.h&&(g.assetHeight=Number(h.h))}}addSingleLink(t,e,s,i){const n={start:t,end:e,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};h.Rm.info("abc78 Got edge...",n);const r=s.text;if(void 0!==r&&(n.text=this.sanitizeText(r.text.trim()),n.text.startsWith('"')&&n.text.endsWith('"')&&(n.text=n.text.substring(1,n.text.length-1)),n.labelType=r.type),void 0!==s&&(n.type=s.type,n.stroke=s.stroke,n.length=s.length>10?10:s.length),i&&!this.edges.some(t=>t.id===i))n.id=i,n.isUserDefinedId=!0;else{const t=this.edges.filter(t=>t.start===n.start&&t.end===n.end);0===t.length?n.id=(0,l.rY)(n.start,n.end,{counter:0,prefix:"L"}):n.id=(0,l.rY)(n.start,n.end,{counter:t.length+1,prefix:"L"})}if(!(this.edges.length<(this.config.maxEdges??500)))throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`);h.Rm.info("Pushing edge..."),this.edges.push(n)}isLinkData(t){return null!==t&&"object"==typeof t&&"id"in t&&"string"==typeof t.id}addLink(t,e,s){const i=this.isLinkData(s)?s.id.replace("@",""):void 0;h.Rm.info("addLink",t,e,i);for(const n of t)for(const r of e){const a=n===t[t.length-1],u=r===e[0];a&&u?this.addSingleLink(n,r,s,i):this.addSingleLink(n,r,s,void 0)}}updateLinkInterpolate(t,e){t.forEach(t=>{"default"===t?this.edges.defaultInterpolate=e:this.edges[t].interpolate=e})}updateLink(t,e){t.forEach(t=>{if("number"==typeof t&&t>=this.edges.length)throw new Error(`The index ${t} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);"default"===t?this.edges.defaultStyle=e:(this.edges[t].style=e,(this.edges[t]?.style?.length??0)>0&&!this.edges[t]?.style?.some(t=>t?.startsWith("fill"))&&this.edges[t]?.style?.push("fill:none"))})}addClass(t,e){const s=e.join().replace(/\\,/g,"\xa7\xa7\xa7").replace(/,/g,";").replace(/\xa7\xa7\xa7/g,",").split(";");t.split(",").forEach(t=>{let e=this.classes.get(t);void 0===e&&(e={id:t,styles:[],textStyles:[]},this.classes.set(t,e)),null!=s&&s.forEach(t=>{if(/color/.exec(t)){const s=t.replace("fill","bgFill");e.textStyles.push(s)}e.styles.push(t)})})}setDirection(t){this.direction=t.trim(),/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),"TD"===this.direction&&(this.direction="TB")}setClass(t,e){for(const s of t.split(",")){const t=this.vertices.get(s);t&&t.classes.push(e);const i=this.edges.find(t=>t.id===s);i&&i.classes.push(e);const n=this.subGraphLookup.get(s);n&&n.classes.push(e)}}setTooltip(t,e){if(void 0!==e){e=this.sanitizeText(e);for(const s of t.split(","))this.tooltips.set("gen-1"===this.version?this.lookUpDomId(s):s,e)}}setClickFun(t,e,s){const i=this.lookUpDomId(t);if("loose"!==(0,c.D7)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t{const t=document.querySelector(`[id="${i}"]`);null!==t&&t.addEventListener("click",()=>{l._K.runFunc(e,...n)},!1)}))}setLink(t,e,s){t.split(",").forEach(t=>{const i=this.vertices.get(t);void 0!==i&&(i.link=l._K.formatUrl(e,this.config),i.linkTarget=s)}),this.setClass(t,"clickable")}getTooltip(t){return this.tooltips.get(t)}setClickEvent(t,e,s){t.split(",").forEach(t=>{this.setClickFun(t,e,s)}),this.setClass(t,"clickable")}bindFunctions(t){this.funs.forEach(e=>{e(t)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(t){let e=(0,d.Ltv)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,d.Ltv)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,d.Ltv)(t).select("svg").selectAll("g.node").on("mouseover",t=>{const s=(0,d.Ltv)(t.currentTarget);if(null===s.attr("title"))return;const i=t.currentTarget?.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(s.attr("title")).style("left",window.scrollX+i.left+(i.right-i.left)/2+"px").style("top",window.scrollY+i.bottom+"px"),e.html(e.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",t=>{e.transition().duration(500).style("opacity",0);(0,d.Ltv)(t.currentTarget).classed("hover",!1)})}clear(t="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=t,this.config=(0,c.D7)(),(0,c.IU)()}setGen(t){this.version=t||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(t,e,s){let i=t.text.trim(),n=s.text;t===s&&/\s/.exec(s.text)&&(i=void 0);const r=(0,h.K2)(t=>{const e={boolean:{},number:{},string:{}},s=[];let i;return{nodeList:t.filter(function(t){const n=typeof t;return t.stmt&&"dir"===t.stmt?(i=t.value,!1):""!==t.trim()&&(n in e?!e[n].hasOwnProperty(t)&&(e[n][t]=!0):!s.includes(t)&&s.push(t))}),dir:i}},"uniq")(e.flat()),a=r.nodeList;let u=r.dir;const o=(0,c.D7)().flowchart??{};if(u=u??(o.inheritDir?this.getDirection()??(0,c.D7)().direction??void 0:void 0),"gen-1"===this.version)for(let c=0;c2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=e,this.subGraphs[e].id===t)return{result:!0,count:0};let i=0,n=1;for(;i=0){const s=this.indexNodes2(t,e);if(s.result)return{result:!0,count:n+s.count};n+=s.count}i+=1}return{result:!1,count:n}}getDepthFirstPos(t){return this.posCrossRef[t]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return!!this.firstGraphFlag&&(this.firstGraphFlag=!1,!0)}destructStartLink(t){let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let i="normal";return e.includes("=")&&(i="thick"),e.includes(".")&&(i="dotted"),{type:s,stroke:i}}countChar(t,e){const s=e.length;let i=0;for(let n=0;n":i="arrow_point",e.startsWith("<")&&(i="double_"+i,s=s.slice(1));break;case"o":i="arrow_circle",e.startsWith("o")&&(i="double_"+i,s=s.slice(1))}let n="normal",r=s.length-1;s.startsWith("=")&&(n="thick"),s.startsWith("~")&&(n="invisible");const a=this.countChar(".",s);return a&&(n="dotted",r=a),{type:i,stroke:n,length:r}}destructLink(t,e){const s=this.destructEndLink(t);let i;if(e){if(i=this.destructStartLink(e),i.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===i.type)i.type=s.type;else{if(i.type!==s.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return"double_arrow"===i.type&&(i.type="double_arrow_point"),i.length=s.length,i}return s}exists(t,e){for(const s of t)if(s.nodes.includes(e))return!0;return!1}makeUniq(t,e){const s=[];return t.nodes.forEach((i,n)=>{this.exists(e,i)||s.push(t.nodes[n])}),{nodes:s}}getTypeFromVertex(t){if(t.img)return"imageSquare";if(t.icon)return"circle"===t.form?"iconCircle":"square"===t.form?"iconSquare":"rounded"===t.form?"iconRounded":"icon";switch(t.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return t.type}}findNode(t,e){return t.find(t=>t.id===e)}destructEdgeType(t){let e="none",s="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":s=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":e=t.replace("double_",""),s=e}return{arrowTypeStart:e,arrowTypeEnd:s}}addNodeFromVertex(t,e,s,i,n,r){const a=s.get(t.id),u=i.get(t.id)??!1,o=this.findNode(e,t.id);if(o)o.cssStyles=t.styles,o.cssCompiledStyles=this.getCompiledStyles(t.classes),o.cssClasses=t.classes.join(" ");else{const s={id:t.id,label:t.text,labelStyle:"",parentId:a,padding:n.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),dir:t.dir,domId:t.domId,look:r,link:t.link,linkTarget:t.linkTarget,tooltip:this.getTooltip(t.id),icon:t.icon,pos:t.pos,img:t.img,assetWidth:t.assetWidth,assetHeight:t.assetHeight,constraint:t.constraint};u?e.push({...s,isGroup:!0,shape:"rect"}):e.push({...s,isGroup:!1,shape:this.getTypeFromVertex(t)})}}getCompiledStyles(t){let e=[];for(const s of t){const t=this.classes.get(s);t?.styles&&(e=[...e,...t.styles??[]].map(t=>t.trim())),t?.textStyles&&(e=[...e,...t.textStyles??[]].map(t=>t.trim()))}return e}getData(){const t=(0,c.D7)(),e=[],s=[],i=this.getSubGraphs(),n=new Map,r=new Map;for(let u=i.length-1;u>=0;u--){const t=i[u];t.nodes.length>0&&r.set(t.id,!0);for(const e of t.nodes)n.set(e,t.id)}for(let u=i.length-1;u>=0;u--){const s=i[u];e.push({id:s.id,label:s.title,labelStyle:"",parentId:n.get(s.id),padding:8,cssCompiledStyles:this.getCompiledStyles(s.classes),cssClasses:s.classes.join(" "),shape:"rect",dir:s.dir,isGroup:!0,look:t.look})}this.getVertices().forEach(s=>{this.addNodeFromVertex(s,e,n,r,t,t.look||"classic")});const a=this.getEdges();return a.forEach((e,i)=>{const{arrowTypeStart:n,arrowTypeEnd:r}=this.destructEdgeType(e.type),u=[...a.defaultStyle??[]];e.style&&u.push(...e.style);const o={id:(0,l.rY)(e.start,e.end,{counter:i,prefix:"L"},e.id),isUserDefinedId:e.isUserDefinedId,start:e.start,end:e.end,type:e.type??"normal",label:e.text,labelpos:"c",thickness:e.stroke,minlen:e.length,classes:"invisible"===e?.stroke?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:"invisible"===e?.stroke||"arrow_open"===e?.type?"none":n,arrowTypeEnd:"invisible"===e?.stroke||"arrow_open"===e?.type?"none":r,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(e.classes),labelStyle:u,style:u,pattern:e.stroke,look:t.look,animate:e.animate,animation:e.animation,curve:e.interpolate||this.edges.defaultInterpolate||t.flowchart?.curve};s.push(o)}),{nodes:e,edges:s,other:{},config:t}}defaultConfig(){return c.ME.flowchart}},b={getClasses:(0,h.K2)(function(t,e){return e.db.getClasses()},"getClasses"),draw:(0,h.K2)(async function(t,e,s,i){h.Rm.info("REF0:"),h.Rm.info("Drawing state diagram (v2)",e);const{securityLevel:n,flowchart:o,layout:p}=(0,c.D7)();let g;"sandbox"===n&&(g=(0,d.Ltv)("#i"+e));const A="sandbox"===n?g.nodes()[0].contentDocument:document;h.Rm.debug("Before getData: ");const b=i.db.getData();h.Rm.debug("Data: ",b);const y=(0,r.A)(e,n),k=i.db.getDirection();b.type=i.type,b.layoutAlgorithm=(0,u.q7)(p),"dagre"===b.layoutAlgorithm&&"elk"===p&&h.Rm.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),b.direction=k,b.nodeSpacing=o?.nodeSpacing||50,b.rankSpacing=o?.rankSpacing||50,b.markers=["point","circle","cross"],b.diagramId=e,h.Rm.debug("REF1:",b),await(0,u.XX)(b,y);const f=b.config.flowchart?.diagramPadding??8;l._K.insertTitle(y,"flowchartTitleText",o?.titleTopMargin||0,i.db.getDiagramTitle()),(0,a.P)(y,f,"flowchart",o?.useMaxWidth||!1);for(const r of b.nodes){const t=(0,d.Ltv)(`#${e} [id="${r.id}"]`);if(!t||!r.link)continue;const s=A.createElementNS("http://www.w3.org/2000/svg","a");s.setAttributeNS("http://www.w3.org/2000/svg","class",r.cssClasses),s.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===n?s.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):r.linkTarget&&s.setAttributeNS("http://www.w3.org/2000/svg","target",r.linkTarget);const i=t.insert(function(){return s},":first-child"),a=t.select(".label-container");a&&i.append(function(){return a.node()});const u=t.select(".label");u&&i.append(function(){return u.node()})}},"draw")},y=function(){var t=(0,h.K2)(function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},"o"),e=[1,4],s=[1,3],i=[1,5],n=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],r=[2,2],a=[1,13],u=[1,14],o=[1,15],l=[1,16],c=[1,23],d=[1,25],p=[1,26],g=[1,27],A=[1,49],b=[1,48],y=[1,29],k=[1,30],f=[1,31],m=[1,32],E=[1,33],D=[1,44],C=[1,46],x=[1,42],T=[1,47],S=[1,43],F=[1,50],_=[1,45],v=[1,51],B=[1,52],w=[1,34],L=[1,35],$=[1,36],I=[1,37],R=[1,57],N=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],P=[1,61],K=[1,60],G=[1,62],O=[8,9,11,75,77,78],V=[1,78],M=[1,91],U=[1,96],W=[1,95],Y=[1,92],j=[1,88],z=[1,94],X=[1,90],H=[1,97],q=[1,93],Q=[1,98],Z=[1,89],J=[8,9,10,11,40,75,77,78],tt=[8,9,10,11,40,46,75,77,78],et=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],st=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],it=[44,60,89,102,105,106,109,111,114,115,116],nt=[1,121],rt=[1,122],at=[1,124],ut=[1,123],ot=[44,60,62,74,89,102,105,106,109,111,114,115,116],lt=[1,133],ct=[1,147],ht=[1,148],dt=[1,149],pt=[1,150],gt=[1,135],At=[1,137],bt=[1,141],yt=[1,142],kt=[1,143],ft=[1,144],mt=[1,145],Et=[1,146],Dt=[1,151],Ct=[1,152],xt=[1,131],Tt=[1,132],St=[1,139],Ft=[1,134],_t=[1,138],vt=[1,136],Bt=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],wt=[1,154],Lt=[1,156],$t=[8,9,11],It=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],Rt=[1,176],Nt=[1,172],Pt=[1,173],Kt=[1,177],Gt=[1,174],Ot=[1,175],Vt=[77,116,119],Mt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],Ut=[10,106],Wt=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],Yt=[1,247],jt=[1,245],zt=[1,249],Xt=[1,243],Ht=[1,244],qt=[1,246],Qt=[1,248],Zt=[1,250],Jt=[1,268],te=[8,9,11,106],ee=[8,9,10,11,60,84,105,106,109,110,111,112],se={trace:(0,h.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:(0,h.K2)(function(t,e,s,i,n,r,a){var u=r.length-1;switch(n){case 2:case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 3:(!Array.isArray(r[u])||r[u].length>0)&&r[u-1].push(r[u]),this.$=r[u-1];break;case 4:case 183:case 44:case 54:case 76:case 181:this.$=r[u];break;case 11:i.setDirection("TB"),this.$="TB";break;case 12:i.setDirection(r[u-1]),this.$=r[u-1];break;case 27:this.$=r[u-1].nodes;break;case 33:this.$=i.addSubGraph(r[u-6],r[u-1],r[u-4]);break;case 34:this.$=i.addSubGraph(r[u-3],r[u-1],r[u-3]);break;case 35:this.$=i.addSubGraph(void 0,r[u-1],void 0);break;case 37:this.$=r[u].trim(),i.setAccTitle(this.$);break;case 38:case 39:this.$=r[u].trim(),i.setAccDescription(this.$);break;case 43:case 133:this.$=r[u-1]+r[u];break;case 45:i.addVertex(r[u-1][r[u-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,r[u]),i.addLink(r[u-3].stmt,r[u-1],r[u-2]),this.$={stmt:r[u-1],nodes:r[u-1].concat(r[u-3].nodes)};break;case 46:i.addLink(r[u-2].stmt,r[u],r[u-1]),this.$={stmt:r[u],nodes:r[u].concat(r[u-2].nodes)};break;case 47:i.addLink(r[u-3].stmt,r[u-1],r[u-2]),this.$={stmt:r[u-1],nodes:r[u-1].concat(r[u-3].nodes)};break;case 48:this.$={stmt:r[u-1],nodes:r[u-1]};break;case 49:i.addVertex(r[u-1][r[u-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,r[u]),this.$={stmt:r[u-1],nodes:r[u-1],shapeData:r[u]};break;case 50:this.$={stmt:r[u],nodes:r[u]};break;case 51:case 128:case 130:this.$=[r[u]];break;case 52:i.addVertex(r[u-5][r[u-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,r[u-4]),this.$=r[u-5].concat(r[u]);break;case 53:this.$=r[u-4].concat(r[u]);break;case 55:this.$=r[u-2],i.setClass(r[u-2],r[u]);break;case 56:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"square");break;case 57:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"doublecircle");break;case 58:this.$=r[u-5],i.addVertex(r[u-5],r[u-2],"circle");break;case 59:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"ellipse");break;case 60:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"stadium");break;case 61:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"subroutine");break;case 62:this.$=r[u-7],i.addVertex(r[u-7],r[u-1],"rect",void 0,void 0,void 0,Object.fromEntries([[r[u-5],r[u-3]]]));break;case 63:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"cylinder");break;case 64:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"round");break;case 65:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"diamond");break;case 66:this.$=r[u-5],i.addVertex(r[u-5],r[u-2],"hexagon");break;case 67:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"odd");break;case 68:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"trapezoid");break;case 69:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"inv_trapezoid");break;case 70:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"lean_right");break;case 71:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"lean_left");break;case 72:this.$=r[u],i.addVertex(r[u]);break;case 73:r[u-1].text=r[u],this.$=r[u-1];break;case 74:case 75:r[u-2].text=r[u-1],this.$=r[u-2];break;case 77:var o=i.destructLink(r[u],r[u-2]);this.$={type:o.type,stroke:o.stroke,length:o.length,text:r[u-1]};break;case 78:o=i.destructLink(r[u],r[u-2]);this.$={type:o.type,stroke:o.stroke,length:o.length,text:r[u-1],id:r[u-3]};break;case 79:case 86:case 101:case 103:this.$={text:r[u],type:"text"};break;case 80:case 87:case 102:this.$={text:r[u-1].text+""+r[u],type:r[u-1].type};break;case 81:case 88:this.$={text:r[u],type:"string"};break;case 82:case 89:case 104:this.$={text:r[u],type:"markdown"};break;case 83:o=i.destructLink(r[u]);this.$={type:o.type,stroke:o.stroke,length:o.length};break;case 84:o=i.destructLink(r[u]);this.$={type:o.type,stroke:o.stroke,length:o.length,id:r[u-1]};break;case 85:this.$=r[u-1];break;case 105:this.$=r[u-4],i.addClass(r[u-2],r[u]);break;case 106:this.$=r[u-4],i.setClass(r[u-2],r[u]);break;case 107:case 115:this.$=r[u-1],i.setClickEvent(r[u-1],r[u]);break;case 108:case 116:this.$=r[u-3],i.setClickEvent(r[u-3],r[u-2]),i.setTooltip(r[u-3],r[u]);break;case 109:this.$=r[u-2],i.setClickEvent(r[u-2],r[u-1],r[u]);break;case 110:this.$=r[u-4],i.setClickEvent(r[u-4],r[u-3],r[u-2]),i.setTooltip(r[u-4],r[u]);break;case 111:this.$=r[u-2],i.setLink(r[u-2],r[u]);break;case 112:this.$=r[u-4],i.setLink(r[u-4],r[u-2]),i.setTooltip(r[u-4],r[u]);break;case 113:this.$=r[u-4],i.setLink(r[u-4],r[u-2],r[u]);break;case 114:this.$=r[u-6],i.setLink(r[u-6],r[u-4],r[u]),i.setTooltip(r[u-6],r[u-2]);break;case 117:this.$=r[u-1],i.setLink(r[u-1],r[u]);break;case 118:this.$=r[u-3],i.setLink(r[u-3],r[u-2]),i.setTooltip(r[u-3],r[u]);break;case 119:this.$=r[u-3],i.setLink(r[u-3],r[u-2],r[u]);break;case 120:this.$=r[u-5],i.setLink(r[u-5],r[u-4],r[u]),i.setTooltip(r[u-5],r[u-2]);break;case 121:this.$=r[u-4],i.addVertex(r[u-2],void 0,void 0,r[u]);break;case 122:this.$=r[u-4],i.updateLink([r[u-2]],r[u]);break;case 123:this.$=r[u-4],i.updateLink(r[u-2],r[u]);break;case 124:this.$=r[u-8],i.updateLinkInterpolate([r[u-6]],r[u-2]),i.updateLink([r[u-6]],r[u]);break;case 125:this.$=r[u-8],i.updateLinkInterpolate(r[u-6],r[u-2]),i.updateLink(r[u-6],r[u]);break;case 126:this.$=r[u-6],i.updateLinkInterpolate([r[u-4]],r[u]);break;case 127:this.$=r[u-6],i.updateLinkInterpolate(r[u-4],r[u]);break;case 129:case 131:r[u-2].push(r[u]),this.$=r[u-2];break;case 182:case 184:this.$=r[u-1]+""+r[u];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"}}},"anonymous"),table:[{3:1,4:2,9:e,10:s,12:i},{1:[3]},t(n,r,{5:6}),{4:7,9:e,10:s,12:i},{4:8,9:e,10:s,12:i},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:c,33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},t(n,[2,9]),t(n,[2,10]),t(n,[2,11]),{8:[1,54],9:[1,55],10:R,15:53,18:56},t(N,[2,3]),t(N,[2,4]),t(N,[2,5]),t(N,[2,6]),t(N,[2,7]),t(N,[2,8]),{8:P,9:K,11:G,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:P,9:K,11:G,21:67},{8:P,9:K,11:G,21:68},{8:P,9:K,11:G,21:69},{8:P,9:K,11:G,21:70},{8:P,9:K,11:G,21:71},{8:P,9:K,10:[1,72],11:G,21:73},t(N,[2,36]),{35:[1,74]},{37:[1,75]},t(N,[2,39]),t(O,[2,50],{18:76,39:77,10:R,40:V}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:M,44:U,60:W,80:[1,86],89:Y,95:[1,83],97:[1,84],101:85,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z,120:87},t(N,[2,185]),t(N,[2,186]),t(N,[2,187]),t(N,[2,188]),t(J,[2,51]),t(J,[2,54],{46:[1,99]}),t(tt,[2,72],{113:112,29:[1,100],44:A,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:b,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:D,102:C,105:x,106:T,109:S,111:F,114:_,115:v,116:B}),t(et,[2,181]),t(et,[2,142]),t(et,[2,143]),t(et,[2,144]),t(et,[2,145]),t(et,[2,146]),t(et,[2,147]),t(et,[2,148]),t(et,[2,149]),t(et,[2,150]),t(et,[2,151]),t(et,[2,152]),t(n,[2,12]),t(n,[2,18]),t(n,[2,19]),{9:[1,113]},t(st,[2,26],{18:114,10:R}),t(N,[2,27]),{42:115,43:38,44:A,45:39,47:40,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(it,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:nt,81:rt,116:at,119:ut},{75:[1,125],77:[1,126]},t(ot,[2,83]),t(N,[2,28]),t(N,[2,29]),t(N,[2,30]),t(N,[2,31]),t(N,[2,32]),{10:lt,12:ct,14:ht,27:dt,28:127,32:pt,44:gt,60:At,75:bt,80:[1,129],81:[1,130],83:140,84:yt,85:kt,86:ft,87:mt,88:Et,89:Dt,90:Ct,91:128,105:xt,109:Tt,111:St,114:Ft,115:_t,116:vt},t(Bt,r,{5:153}),t(N,[2,37]),t(N,[2,38]),t(O,[2,48],{44:wt}),t(O,[2,49],{18:155,10:R,40:Lt}),t(J,[2,44]),{44:A,47:157,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{102:[1,158],103:159,105:[1,160]},{44:A,47:161,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{44:A,47:162,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t($t,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t($t,[2,115],{120:167,10:[1,166],14:M,44:U,60:W,89:Y,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z}),t($t,[2,117],{10:[1,168]}),t(It,[2,183]),t(It,[2,170]),t(It,[2,171]),t(It,[2,172]),t(It,[2,173]),t(It,[2,174]),t(It,[2,175]),t(It,[2,176]),t(It,[2,177]),t(It,[2,178]),t(It,[2,179]),t(It,[2,180]),{44:A,47:169,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{30:170,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:178,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:180,50:[1,179],67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:181,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:182,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:183,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{109:[1,184]},{30:185,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:186,65:[1,187],67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:188,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:189,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:190,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},t(et,[2,182]),t(n,[2,20]),t(st,[2,25]),t(O,[2,46],{39:191,18:192,10:R,40:V}),t(it,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{77:[1,196],79:197,116:at,119:ut},t(Vt,[2,79]),t(Vt,[2,81]),t(Vt,[2,82]),t(Vt,[2,168]),t(Vt,[2,169]),{76:198,79:120,80:nt,81:rt,116:at,119:ut},t(ot,[2,84]),{8:P,9:K,10:lt,11:G,12:ct,14:ht,21:200,27:dt,29:[1,199],32:pt,44:gt,60:At,75:bt,83:140,84:yt,85:kt,86:ft,87:mt,88:Et,89:Dt,90:Ct,91:201,105:xt,109:Tt,111:St,114:Ft,115:_t,116:vt},t(Mt,[2,101]),t(Mt,[2,103]),t(Mt,[2,104]),t(Mt,[2,157]),t(Mt,[2,158]),t(Mt,[2,159]),t(Mt,[2,160]),t(Mt,[2,161]),t(Mt,[2,162]),t(Mt,[2,163]),t(Mt,[2,164]),t(Mt,[2,165]),t(Mt,[2,166]),t(Mt,[2,167]),t(Mt,[2,90]),t(Mt,[2,91]),t(Mt,[2,92]),t(Mt,[2,93]),t(Mt,[2,94]),t(Mt,[2,95]),t(Mt,[2,96]),t(Mt,[2,97]),t(Mt,[2,98]),t(Mt,[2,99]),t(Mt,[2,100]),{6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:c,32:[1,202],33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},{10:R,18:203},{44:[1,204]},t(J,[2,43]),{10:[1,205],44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:112,114:_,115:v,116:B},{10:[1,206]},{10:[1,207],106:[1,208]},t(Ut,[2,128]),{10:[1,209],44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:112,114:_,115:v,116:B},{10:[1,210],44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:112,114:_,115:v,116:B},{80:[1,211]},t($t,[2,109],{10:[1,212]}),t($t,[2,111],{10:[1,213]}),{80:[1,214]},t(It,[2,184]),{80:[1,215],98:[1,216]},t(J,[2,55],{113:112,44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,114:_,115:v,116:B}),{31:[1,217],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(Wt,[2,86]),t(Wt,[2,88]),t(Wt,[2,89]),t(Wt,[2,153]),t(Wt,[2,154]),t(Wt,[2,155]),t(Wt,[2,156]),{49:[1,219],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{30:220,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{51:[1,221],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{53:[1,222],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{55:[1,223],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{57:[1,224],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{60:[1,225]},{64:[1,226],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{66:[1,227],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{30:228,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{31:[1,229],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{67:Rt,69:[1,230],71:[1,231],82:218,116:Kt,117:Gt,118:Ot},{67:Rt,69:[1,233],71:[1,232],82:218,116:Kt,117:Gt,118:Ot},t(O,[2,45],{18:155,10:R,40:Lt}),t(O,[2,47],{44:wt}),t(it,[2,75]),t(it,[2,74]),{62:[1,234],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(it,[2,77]),t(Vt,[2,80]),{77:[1,235],79:197,116:at,119:ut},{30:236,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},t(Bt,r,{5:237}),t(Mt,[2,102]),t(N,[2,35]),{43:238,44:A,45:39,47:40,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{10:R,18:239},{10:Yt,60:jt,84:zt,92:240,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{10:Yt,60:jt,84:zt,92:251,104:[1,252],105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{10:Yt,60:jt,84:zt,92:253,104:[1,254],105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{105:[1,255]},{10:Yt,60:jt,84:zt,92:256,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{44:A,47:257,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t($t,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t($t,[2,116]),t($t,[2,118],{10:[1,261]}),t($t,[2,119]),t(tt,[2,56]),t(Wt,[2,87]),t(tt,[2,57]),{51:[1,262],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(tt,[2,64]),t(tt,[2,59]),t(tt,[2,60]),t(tt,[2,61]),{109:[1,263]},t(tt,[2,63]),t(tt,[2,65]),{66:[1,264],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(tt,[2,67]),t(tt,[2,68]),t(tt,[2,70]),t(tt,[2,69]),t(tt,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(it,[2,78]),{31:[1,265],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:c,32:[1,266],33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},t(J,[2,53]),{43:267,44:A,45:39,47:40,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t($t,[2,121],{106:Jt}),t(te,[2,130],{108:269,10:Yt,60:jt,84:zt,105:Xt,109:Ht,110:qt,111:Qt,112:Zt}),t(ee,[2,132]),t(ee,[2,134]),t(ee,[2,135]),t(ee,[2,136]),t(ee,[2,137]),t(ee,[2,138]),t(ee,[2,139]),t(ee,[2,140]),t(ee,[2,141]),t($t,[2,122],{106:Jt}),{10:[1,270]},t($t,[2,123],{106:Jt}),{10:[1,271]},t(Ut,[2,129]),t($t,[2,105],{106:Jt}),t($t,[2,106],{113:112,44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,114:_,115:v,116:B}),t($t,[2,110]),t($t,[2,112],{10:[1,272]}),t($t,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:P,9:K,11:G,21:277},t(N,[2,34]),t(J,[2,52]),{10:Yt,60:jt,84:zt,105:Xt,107:278,108:242,109:Ht,110:qt,111:Qt,112:Zt},t(ee,[2,133]),{14:M,44:U,60:W,89:Y,101:279,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z,120:87},{14:M,44:U,60:W,89:Y,101:280,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z,120:87},{98:[1,281]},t($t,[2,120]),t(tt,[2,58]),{30:282,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},t(tt,[2,66]),t(Bt,r,{5:283}),t(te,[2,131],{108:269,10:Yt,60:jt,84:zt,105:Xt,109:Ht,110:qt,111:Qt,112:Zt}),t($t,[2,126],{120:167,10:[1,284],14:M,44:U,60:W,89:Y,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z}),t($t,[2,127],{120:167,10:[1,285],14:M,44:U,60:W,89:Y,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z}),t($t,[2,114]),{31:[1,286],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:c,32:[1,287],33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},{10:Yt,60:jt,84:zt,92:288,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{10:Yt,60:jt,84:zt,92:289,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},t(tt,[2,62]),t(N,[2,33]),t($t,[2,124],{106:Jt}),t($t,[2,125],{106:Jt})],defaultActions:{},parseError:(0,h.K2)(function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},"parseError"),parse:(0,h.K2)(function(t){var e=this,s=[0],i=[],n=[null],r=[],a=this.table,u="",o=0,l=0,c=0,d=r.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(g.yy[A]=this.yy[A]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var b=p.yylloc;r.push(b);var y=p.options&&p.options.ranges;function k(){var t;return"number"!=typeof(t=i.pop()||p.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,h.K2)(function(t){s.length=s.length-2*t,n.length=n.length-t,r.length=r.length-t},"popStack"),(0,h.K2)(k,"lex");for(var f,m,E,D,C,x,T,S,F,_={};;){if(E=s[s.length-1],this.defaultActions[E]?D=this.defaultActions[E]:(null==f&&(f=k()),D=a[E]&&a[E][f]),void 0===D||!D.length||!D[0]){var v="";for(x in F=[],a[E])this.terminals_[x]&&x>2&&F.push("'"+this.terminals_[x]+"'");v=p.showPosition?"Parse error on line "+(o+1)+":\n"+p.showPosition()+"\nExpecting "+F.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(v,{text:p.match,token:this.terminals_[f]||f,line:p.yylineno,loc:b,expected:F})}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+f);switch(D[0]){case 1:s.push(f),n.push(p.yytext),r.push(p.yylloc),s.push(D[1]),f=null,m?(f=m,m=null):(l=p.yyleng,u=p.yytext,o=p.yylineno,b=p.yylloc,c>0&&c--);break;case 2:if(T=this.productions_[D[1]][1],_.$=n[n.length-T],_._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},y&&(_._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(C=this.performAction.apply(_,[u,l,o,g.yy,D[1],n,r].concat(d))))return C;T&&(s=s.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),s.push(this.productions_[D[1]][0]),n.push(_.$),r.push(_._$),S=a[s[s.length-2]][s[s.length-1]],s.push(S);break;case 3:return!0}}return!0},"parse")},ie=function(){return{EOF:1,parseError:(0,h.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,h.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,h.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,h.K2)(function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,h.K2)(function(){return this._more=!0,this},"more"),reject:(0,h.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,h.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,h.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,h.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,h.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,h.K2)(function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},"test_match"),next:(0,h.K2)(function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,h.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,h.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,h.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,h.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,h.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,h.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,h.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:(0,h.K2)(function(t,e,s,i){switch(s){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 12:case 14:case 17:case 20:case 23:case 33:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),e.yytext="",40;case 8:return this.pushState("shapeDataStr"),40;case 9:return this.popState(),40;case 10:const s=/\n\s*/g;return e.yytext=e.yytext.replace(s,"
    "),40;case 11:return 40;case 13:this.begin("callbackname");break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 18:return 96;case 19:return"MD_STR";case 21:this.begin("md_string");break;case 22:return"STR";case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 34:return 88;case 35:case 36:case 37:return t.lex.firstGraph()&&this.begin("dir"),12;case 38:return 27;case 39:return 32;case 40:case 41:case 42:case 43:return 98;case 44:return this.popState(),13;case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:return this.popState(),14;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:case 102:return 111;case 62:return 46;case 63:return 60;case 64:case 103:return 44;case 65:return 8;case 66:return 106;case 67:case 101:return 115;case 68:case 71:case 74:return this.popState(),77;case 69:return this.pushState("edgeText"),75;case 70:case 73:case 76:return 119;case 72:return this.pushState("thickEdgeText"),75;case 75:return this.pushState("dottedEdgeText"),75;case 77:return 77;case 78:return this.popState(),53;case 79:case 115:return"TEXT";case 80:return this.pushState("ellipseText"),52;case 81:return this.popState(),55;case 82:return this.pushState("text"),54;case 83:return this.popState(),57;case 84:return this.pushState("text"),56;case 85:return 58;case 86:return this.pushState("text"),67;case 87:return this.popState(),64;case 88:return this.pushState("text"),63;case 89:return this.popState(),49;case 90:return this.pushState("text"),48;case 91:return this.popState(),69;case 92:return this.popState(),71;case 93:return 117;case 94:return this.pushState("trapText"),68;case 95:return this.pushState("trapText"),70;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;case 108:return this.pushState("text"),62;case 109:return this.popState(),51;case 110:return this.pushState("text"),50;case 111:return this.popState(),31;case 112:return this.pushState("text"),29;case 113:return this.popState(),66;case 114:return this.pushState("text"),65;case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}}}();function ne(){this.yy={}}return se.lexer=ie,(0,h.K2)(ne,"Parser"),ne.prototype=se,se.Parser=ne,new ne}();y.parser=y;var k=y,f=Object.assign({},k);f.parse=t=>{const e=t.replace(/}\s*\n/g,"}\n");return k.parse(e)};var m=f,E=(0,h.K2)((t,e)=>{const s=g.A,i=s(t,"r"),n=s(t,"g"),r=s(t,"b");return p.A(i,n,r,e)},"fade"),D=(0,h.K2)(t=>`.label {\n font-family: ${t.fontFamily};\n color: ${t.nodeTextColor||t.textColor};\n }\n .cluster-label text {\n fill: ${t.titleColor};\n }\n .cluster-label span {\n color: ${t.titleColor};\n }\n .cluster-label span p {\n background-color: transparent;\n }\n\n .label text,span {\n fill: ${t.nodeTextColor||t.textColor};\n color: ${t.nodeTextColor||t.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n\n .root .anchor path {\n fill: ${t.lineColor} !important;\n stroke-width: 0;\n stroke: ${t.lineColor};\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n p {\n background-color: ${t.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${E(t.edgeLabelBackground,.5)};\n // background-color:\n }\n\n .cluster rect {\n fill: ${t.clusterBkg};\n stroke: ${t.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n .cluster span {\n color: ${t.titleColor};\n }\n /* .cluster div {\n color: ${t.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${t.fontFamily};\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n\n rect.text {\n fill: none;\n stroke-width: 0;\n }\n\n .icon-shape, .image-shape {\n background-color: ${t.edgeLabelBackground};\n p {\n background-color: ${t.edgeLabelBackground};\n padding: 2px;\n }\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n ${(0,i.o)()}\n`,"getStyles"),C={parser:m,get db(){return new A},renderer:b,styles:D,init:(0,h.K2)(t=>{t.flowchart||(t.flowchart={}),t.layout&&(0,c.XV)({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,(0,c.XV)({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}},52501:(t,e,s)=>{s.d(e,{o:()=>i});var i=(0,s(40797).K2)(()=>"\n /* Font Awesome icon styling - consolidated */\n .label-icon {\n display: inline-block;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n \n .node .label-icon path {\n fill: currentColor;\n stroke: revert;\n stroke-width: revert;\n }\n","getIconStyles")},75937:(t,e,s)=>{s.d(e,{A:()=>r});var i=s(72453),n=s(74886);const r=(t,e)=>i.A.lang.round(n.A.parse(t)[e])},89625:(t,e,s)=>{s.d(e,{A:()=>r});var i=s(40797),n=s(70451),r=(0,i.K2)((t,e)=>{let s;"sandbox"===e&&(s=(0,n.Ltv)("#i"+t));return("sandbox"===e?(0,n.Ltv)(s.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id="${t}"]`)},"getDiagramElement")}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.8a3e18aa.js b/assets/js/22dd74f7.8a3e18aa.js deleted file mode 100644 index 654ea3b..0000000 --- a/assets/js/22dd74f7.8a3e18aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"guides":[{"type":"link","label":"Introduction to Waku","href":"/","docId":"guides/getting-started","unlisted":false},{"type":"category","label":"Run a Nwaku Node","collapsed":true,"items":[{"type":"link","label":"Run Nwaku with Docker Compose","href":"/guides/nwaku/run-docker-compose","docId":"guides/nwaku/run-docker-compose","unlisted":false},{"type":"link","label":"Run Nwaku in a Docker Container","href":"/guides/nwaku/run-docker","docId":"guides/nwaku/run-docker","unlisted":false},{"type":"link","label":"Build Nwaku from Source","href":"/guides/nwaku/build-source","docId":"guides/nwaku/build-source","unlisted":false},{"type":"link","label":"Configure Peer Discovery","href":"/guides/nwaku/configure-discovery","docId":"guides/nwaku/configure-discovery","unlisted":false},{"type":"link","label":"Find Your Node Address","href":"/guides/nwaku/find-node-address","docId":"guides/nwaku/find-node-address","unlisted":false},{"type":"link","label":"Node Configuration Methods","href":"/guides/nwaku/config-methods","docId":"guides/nwaku/config-methods","unlisted":false},{"type":"link","label":"Node Configuration Options","href":"/guides/nwaku/config-options","docId":"guides/nwaku/config-options","unlisted":false},{"type":"link","label":"Node Configuration Examples","href":"/guides/nwaku/configure-nwaku","docId":"guides/nwaku/configure-nwaku","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/guides/nwaku/faq","docId":"guides/nwaku/faq","unlisted":false},{"type":"link","label":"Upgrade Instructions","href":"/guides/nwaku/upgrade-instructions","docId":"guides/nwaku/upgrade-instructions","unlisted":false},{"type":"html","value":"
    REST API Reference"}],"collapsible":true,"href":"/guides/nwaku/run-node"},{"type":"category","label":"JavaScript Waku SDK","collapsed":true,"items":[{"type":"link","label":"Send and Receive Messages in a Reliable Channel","href":"/guides/js-waku/reliable-channels","docId":"guides/js-waku/reliable-channels","unlisted":false},{"type":"link","label":"Send and Receive Messages Using Light Push and Filter","href":"/guides/js-waku/light-send-receive","docId":"guides/js-waku/light-send-receive","unlisted":false},{"type":"link","label":"Retrieve Messages Using Store Protocol","href":"/guides/js-waku/store-retrieve-messages","docId":"guides/js-waku/store-retrieve-messages","unlisted":false},{"type":"link","label":"Encrypt, Decrypt, and Sign Your Messages","href":"/guides/js-waku/message-encryption","docId":"guides/js-waku/message-encryption","unlisted":false},{"type":"link","label":"Build React DApps Using @waku/react","href":"/guides/js-waku/use-waku-react","docId":"guides/js-waku/use-waku-react","unlisted":false},{"type":"link","label":"Scaffold DApps Using @waku/create-app","href":"/guides/js-waku/use-waku-create-app","docId":"guides/js-waku/use-waku-create-app","unlisted":false},{"type":"link","label":"Bootstrap Nodes and Discover Peers","href":"/guides/js-waku/configure-discovery","docId":"guides/js-waku/configure-discovery","unlisted":false},{"type":"link","label":"Run @waku/sdk in a NodeJS Application","href":"/guides/js-waku/run-waku-nodejs","docId":"guides/js-waku/run-waku-nodejs","unlisted":false},{"type":"link","label":"Debug Your Waku DApp and WebSocket","href":"/guides/js-waku/debug-waku-dapp","docId":"guides/js-waku/debug-waku-dapp","unlisted":false},{"type":"link","label":"Manage Your Filter Subscriptions","href":"/guides/js-waku/manage-filter","docId":"guides/js-waku/manage-filter","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/guides/js-waku/faq","docId":"guides/js-waku/faq","unlisted":false},{"type":"html","value":"@waku/sdk Examples"},{"type":"html","value":"API Reference"}],"collapsible":true,"href":"/guides/js-waku/"},{"type":"link","label":"Learn About Waku","href":"/learn/waku-network"},{"type":"link","label":"Waku Research","href":"/research"},{"type":"html","value":"Discord"},{"type":"html","value":"Awesome Waku"},{"type":"html","value":"Waku Idea Board"},{"type":"html","value":"Post-Hackathon Bounties"}],"learn":[{"type":"link","label":"The Waku Network","href":"/learn/waku-network","docId":"learn/waku-network","unlisted":false},{"type":"category","label":"Concepts","collapsed":false,"items":[{"type":"link","label":"Protocols","href":"/learn/concepts/protocols","docId":"learn/concepts/protocols","unlisted":false},{"type":"link","label":"Content Topics","href":"/learn/concepts/content-topics","docId":"learn/concepts/content-topics","unlisted":false},{"type":"link","label":"Network Domains","href":"/learn/concepts/network-domains","docId":"learn/concepts/network-domains","unlisted":false},{"type":"link","label":"Transports","href":"/learn/concepts/transports","docId":"learn/concepts/transports","unlisted":false},{"type":"category","label":"Peer Discovery","items":[{"type":"link","label":"Static Peers","href":"/learn/concepts/static-peers","docId":"learn/concepts/static-peers","unlisted":false},{"type":"link","label":"DNS Discovery","href":"/learn/concepts/dns-discovery","docId":"learn/concepts/dns-discovery","unlisted":false},{"type":"link","label":"Discv5","href":"/learn/concepts/discv5","docId":"learn/concepts/discv5","unlisted":false},{"type":"link","label":"Peer Exchange","href":"/learn/concepts/peer-exchange","docId":"learn/concepts/peer-exchange","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/learn/concepts/peer-discovery"}],"collapsible":true},{"type":"link","label":"Security Features","href":"/learn/security-features","docId":"learn/security-features","unlisted":false},{"type":"link","label":"Research","href":"/learn/research","docId":"learn/research","unlisted":false},{"type":"link","label":"Comparing Waku and libp2p","href":"/learn/waku-vs-libp2p","docId":"learn/waku-vs-libp2p","unlisted":false},{"type":"link","label":"Glossary","href":"/learn/glossary","docId":"learn/glossary","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/learn/faq","docId":"learn/faq","unlisted":false}],"research":[{"type":"link","label":"Research","href":"/research/","docId":"research/index","unlisted":false},{"type":"category","label":"Benchmarks","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"PostgreSQL","href":"/research/benchmarks/postgres-adoption","docId":"research/benchmarks/postgres-adoption","unlisted":false},{"type":"link","label":"Performance Benchmarks and Test Reports","href":"/research/benchmarks/test-results-summary","docId":"research/benchmarks/test-results-summary","unlisted":false}]},{"type":"category","label":"Research and Studies","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Capped Bandwidth in Waku","href":"/research/research-and-studies/capped-bandwidth","docId":"research/research-and-studies/capped-bandwidth","unlisted":false},{"type":"link","label":"Incentivisation","href":"/research/research-and-studies/incentivisation","docId":"research/research-and-studies/incentivisation","unlisted":false},{"type":"link","label":"Maximum Bandwidth for Global Adoption","href":"/research/research-and-studies/maximum-bandwidth","docId":"research/research-and-studies/maximum-bandwidth","unlisted":false},{"type":"link","label":"Message Propagation Times With Waku-RLN","href":"/research/research-and-studies/message-propagation","docId":"research/research-and-studies/message-propagation","unlisted":false},{"type":"link","label":"RLN Key Benchmarks","href":"/research/research-and-studies/rln-key-benchmarks","docId":"research/research-and-studies/rln-key-benchmarks","unlisted":false}]}]},"docs":{"guides/getting-started":{"id":"guides/getting-started","title":"Introduction to Waku","description":"Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy.","sidebar":"guides"},"guides/js-waku/configure-discovery":{"id":"guides/js-waku/configure-discovery","title":"Bootstrap Nodes and Discover Peers","description":"This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery.","sidebar":"guides"},"guides/js-waku/debug-waku-dapp":{"id":"guides/js-waku/debug-waku-dapp","title":"Debug Your Waku DApp and WebSocket","description":"This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.","sidebar":"guides"},"guides/js-waku/faq":{"id":"guides/js-waku/faq","title":"JavaScript SDK FAQ","description":"You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started.","sidebar":"guides"},"guides/js-waku/index":{"id":"guides/js-waku/index","title":"JavaScript Waku SDK","description":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","sidebar":"guides"},"guides/js-waku/light-send-receive":{"id":"guides/js-waku/light-send-receive","title":"Send and Receive Messages Using Light Push and Filter","description":"This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.","sidebar":"guides"},"guides/js-waku/manage-filter":{"id":"guides/js-waku/manage-filter","title":"Manage Your Filter Subscriptions","description":"This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.","sidebar":"guides"},"guides/js-waku/message-encryption":{"id":"guides/js-waku/message-encryption","title":"Encrypt, Decrypt, and Sign Your Messages","description":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.","sidebar":"guides"},"guides/js-waku/reliable-channels":{"id":"guides/js-waku/reliable-channels","title":"Send and Receive Messages in a Reliable Channel","description":"Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.","sidebar":"guides"},"guides/js-waku/run-waku-nodejs":{"id":"guides/js-waku/run-waku-nodejs","title":"Run @waku/sdk in a NodeJS Application","description":"While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.","sidebar":"guides"},"guides/js-waku/store-retrieve-messages":{"id":"guides/js-waku/store-retrieve-messages","title":"Retrieve Messages Using Store Protocol","description":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","sidebar":"guides"},"guides/js-waku/use-waku-create-app":{"id":"guides/js-waku/use-waku-create-app","title":"Scaffold DApps Using @waku/create-app","description":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","sidebar":"guides"},"guides/js-waku/use-waku-react":{"id":"guides/js-waku/use-waku-react","title":"Build React DApps Using @waku/react","description":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","sidebar":"guides"},"guides/nwaku/build-source":{"id":"guides/nwaku/build-source","title":"Build Nwaku from Source","description":"This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead.","sidebar":"guides"},"guides/nwaku/config-methods":{"id":"guides/nwaku/config-methods","title":"Node Configuration Methods","description":"Waku nodes can be configured using a combination of the following methods:","sidebar":"guides"},"guides/nwaku/config-options":{"id":"guides/nwaku/config-options","title":"Node Configuration Options","description":"Here are the available node configuration options, along with their default values and descriptions:","sidebar":"guides"},"guides/nwaku/configure-discovery":{"id":"guides/nwaku/configure-discovery","title":"Configure Peer Discovery","description":"This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network.","sidebar":"guides"},"guides/nwaku/configure-nwaku":{"id":"guides/nwaku/configure-nwaku","title":"Node Configuration Examples","description":"This guide provides detailed steps to configure a nwaku node for different use cases.","sidebar":"guides"},"guides/nwaku/faq":{"id":"guides/nwaku/faq","title":"Nwaku FAQ","description":"Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.","sidebar":"guides"},"guides/nwaku/find-node-address":{"id":"guides/nwaku/find-node-address","title":"Find Your Node Address","description":"When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level.","sidebar":"guides"},"guides/nwaku/run-docker":{"id":"guides/nwaku/run-docker","title":"Run Nwaku in a Docker Container","description":"This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.","sidebar":"guides"},"guides/nwaku/run-docker-compose":{"id":"guides/nwaku/run-docker-compose","title":"Run Nwaku with Docker Compose","description":"nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically:","sidebar":"guides"},"guides/nwaku/run-node":{"id":"guides/nwaku/run-node","title":"Run a Nwaku Node","description":"Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources.","sidebar":"guides"},"guides/nwaku/upgrade-instructions":{"id":"guides/nwaku/upgrade-instructions","title":"Upgrade Instructions","description":"If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order.","sidebar":"guides"},"learn/concepts/content-topics":{"id":"learn/concepts/content-topics","title":"Content Topics","description":"Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.","sidebar":"learn"},"learn/concepts/discv5":{"id":"learn/concepts/discv5","title":"Discv5","description":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.","sidebar":"learn"},"learn/concepts/dns-discovery":{"id":"learn/concepts/dns-discovery","title":"DNS Discovery","description":"Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr.","sidebar":"learn"},"learn/concepts/network-domains":{"id":"learn/concepts/network-domains","title":"Network Domains","description":"Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.","sidebar":"learn"},"learn/concepts/peer-discovery":{"id":"learn/concepts/peer-discovery","title":"Peer Discovery","description":"When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping.","sidebar":"learn"},"learn/concepts/peer-exchange":{"id":"learn/concepts/peer-exchange","title":"Peer Exchange","description":"The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network.","sidebar":"learn"},"learn/concepts/protocols":{"id":"learn/concepts/protocols","title":"Protocols","description":"Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:","sidebar":"learn"},"learn/concepts/static-peers":{"id":"learn/concepts/static-peers","title":"Static Peers","description":"Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node.","sidebar":"learn"},"learn/concepts/transports":{"id":"learn/concepts/transports","title":"Transports","description":"Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery.","sidebar":"learn"},"learn/faq":{"id":"learn/faq","title":"Waku FAQ","description":"Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.","sidebar":"learn"},"learn/glossary":{"id":"learn/glossary","title":"Glossary","description":"Definitions and usage of the terminology used in the Waku ecosystem.","sidebar":"learn"},"learn/research":{"id":"learn/research","title":"Research","description":"The following features are currently experimental and under research and initial implementation:","sidebar":"learn"},"learn/security-features":{"id":"learn/security-features","title":"Security Features","description":"Waku\'s protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol\'s security guarantees and limitations.","sidebar":"learn"},"learn/waku-network":{"id":"learn/waku-network","title":"The Waku Network","description":"The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include:","sidebar":"learn"},"learn/waku-vs-libp2p":{"id":"learn/waku-vs-libp2p","title":"Comparing Waku and libp2p","description":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","sidebar":"learn"},"migrations/js-waku/migration_v0.026_0.027":{"id":"migrations/js-waku/migration_v0.026_0.027","title":"Migrating to Waku v0.027","description":"A migration guide for refactoring your application code from Waku v0.026 to v0.027."},"privacy-policy":{"id":"privacy-policy","title":"Privacy Policy","description":"Last updated: 9 February 2024"},"research/benchmarks/postgres-adoption":{"id":"research/benchmarks/postgres-adoption","title":"PostgreSQL","description":"Document that describes why Nim-Waku started to use Postgres and shows some benchmark and comparison results.","sidebar":"research"},"research/benchmarks/test-results-summary":{"id":"research/benchmarks/test-results-summary","title":"Performance Benchmarks and Test Reports","description":"Introduction","sidebar":"research"},"research/index":{"id":"research/index","title":"Research","description":"Research and Studies: Protocol simulations and theoretical analysis to support the design of Waku protocols. The protocol definitions are on the Waku RFCs website.","sidebar":"research"},"research/research-and-studies/capped-bandwidth":{"id":"research/research-and-studies/capped-bandwidth","title":"Capped Bandwidth in Waku","description":"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.","sidebar":"research"},"research/research-and-studies/incentivisation":{"id":"research/research-and-studies/incentivisation","title":"Incentivisation","description":"Waku is a family of decentralised communication protocols. The Waku Network (TWN) consists of independent nodes running Waku protocols. TWN needs incentivisation (shortened to i13n) to ensure proper node behaviour.","sidebar":"research"},"research/research-and-studies/maximum-bandwidth":{"id":"research/research-and-studies/maximum-bandwidth","title":"Maximum Bandwidth for Global Adoption","description":"TLDR//github.com/waku-org/research/issues/22 to specify how this maximum will be enforced.","sidebar":"research"},"research/research-and-studies/message-propagation":{"id":"research/research-and-studies/message-propagation","title":"Message Propagation Times With Waku-RLN","description":"TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it\'s affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.","sidebar":"research"},"research/research-and-studies/rln-key-benchmarks":{"id":"research/research-and-studies/rln-key-benchmarks","title":"RLN Key Benchmarks","description":"Introduction","sidebar":"research"},"rules-of-engagement":{"id":"rules-of-engagement","title":"Rules of Engagement","description":"Waku is a nascent technology and the Waku community is still growing. Hence, the Waku team is keen to work closely with projects to help leverage Waku technology to drive the success of their own applications."},"security":{"id":"security","title":"Security","description":"We take security seriously at Waku and across the Institute of Free Technology and its affiliates."},"terms":{"id":"terms","title":"Terms of Use","description":"Last updated: 14 February 2024"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.e34d7927.js b/assets/js/22dd74f7.e34d7927.js new file mode 100644 index 0000000..f85a24b --- /dev/null +++ b/assets/js/22dd74f7.e34d7927.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"build":[{"type":"link","label":"Home","href":"/"},{"type":"category","label":"JavaScript SDK","collapsed":false,"items":[{"type":"link","label":"Send and Receive Messages in a Reliable Channel","href":"/build/javascript/reliable-channels","docId":"build/javascript/reliable-channels","unlisted":false},{"type":"link","label":"Send and Receive Messages Using Light Push and Filter","href":"/build/javascript/light-send-receive","docId":"build/javascript/light-send-receive","unlisted":false},{"type":"link","label":"Retrieve Messages Using Store Protocol","href":"/build/javascript/store-retrieve-messages","docId":"build/javascript/store-retrieve-messages","unlisted":false},{"type":"link","label":"Encrypt, Decrypt, and Sign Your Messages","href":"/build/javascript/message-encryption","docId":"build/javascript/message-encryption","unlisted":false},{"type":"link","label":"Build React DApps Using @waku/react","href":"/build/javascript/use-waku-react","docId":"build/javascript/use-waku-react","unlisted":false},{"type":"link","label":"Scaffold DApps Using @waku/create-app","href":"/build/javascript/use-waku-create-app","docId":"build/javascript/use-waku-create-app","unlisted":false},{"type":"link","label":"Bootstrap Nodes and Discover Peers","href":"/build/javascript/configure-discovery","docId":"build/javascript/configure-discovery","unlisted":false},{"type":"link","label":"Run @waku/sdk in a NodeJS Application","href":"/build/javascript/run-waku-nodejs","docId":"build/javascript/run-waku-nodejs","unlisted":false},{"type":"link","label":"Debug Your Waku DApp and WebSocket","href":"/build/javascript/debug-waku-dapp","docId":"build/javascript/debug-waku-dapp","unlisted":false},{"type":"link","label":"Manage Your Filter Subscriptions","href":"/build/javascript/manage-filter","docId":"build/javascript/manage-filter","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/build/javascript/faq","docId":"build/javascript/faq","unlisted":false},{"type":"html","value":"@waku/sdk Examples"},{"type":"html","value":"API Reference"}],"collapsible":true,"href":"/build/javascript/"}],"runNode":[{"type":"link","label":"Home","href":"/"},{"type":"category","label":"Run a Waku Node","collapsed":false,"items":[{"type":"link","label":"Run Nwaku with Docker Compose","href":"/run-node/run-docker-compose","docId":"run-node/run-docker-compose","unlisted":false},{"type":"link","label":"Run Nwaku in a Docker Container","href":"/run-node/run-docker","docId":"run-node/run-docker","unlisted":false},{"type":"link","label":"Build Nwaku from Source","href":"/run-node/build-source","docId":"run-node/build-source","unlisted":false},{"type":"link","label":"Configure Peer Discovery","href":"/run-node/configure-discovery","docId":"run-node/configure-discovery","unlisted":false},{"type":"link","label":"Find Your Node Address","href":"/run-node/find-node-address","docId":"run-node/find-node-address","unlisted":false},{"type":"link","label":"Node Configuration Methods","href":"/run-node/config-methods","docId":"run-node/config-methods","unlisted":false},{"type":"link","label":"Node Configuration Options","href":"/run-node/config-options","docId":"run-node/config-options","unlisted":false},{"type":"link","label":"Node Configuration Examples","href":"/run-node/configure-nwaku","docId":"run-node/configure-nwaku","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/run-node/faq","docId":"run-node/faq","unlisted":false},{"type":"link","label":"Upgrade Instructions","href":"/run-node/upgrade-instructions","docId":"run-node/upgrade-instructions","unlisted":false},{"type":"html","value":"REST API Reference"}],"collapsible":true,"href":"/run-node/"}],"learn":[{"type":"link","label":"Home","href":"/"},{"type":"link","label":"The Waku Network","href":"/learn/","docId":"learn/index","unlisted":false},{"type":"category","label":"Concepts","collapsed":false,"items":[{"type":"link","label":"Protocols","href":"/learn/concepts/protocols","docId":"learn/concepts/protocols","unlisted":false},{"type":"link","label":"Content Topics","href":"/learn/concepts/content-topics","docId":"learn/concepts/content-topics","unlisted":false},{"type":"link","label":"Network Domains","href":"/learn/concepts/network-domains","docId":"learn/concepts/network-domains","unlisted":false},{"type":"link","label":"Transports","href":"/learn/concepts/transports","docId":"learn/concepts/transports","unlisted":false},{"type":"category","label":"Peer Discovery","items":[{"type":"link","label":"Static Peers","href":"/learn/concepts/static-peers","docId":"learn/concepts/static-peers","unlisted":false},{"type":"link","label":"DNS Discovery","href":"/learn/concepts/dns-discovery","docId":"learn/concepts/dns-discovery","unlisted":false},{"type":"link","label":"Discv5","href":"/learn/concepts/discv5","docId":"learn/concepts/discv5","unlisted":false},{"type":"link","label":"Peer Exchange","href":"/learn/concepts/peer-exchange","docId":"learn/concepts/peer-exchange","unlisted":false}],"collapsed":true,"collapsible":true,"href":"/learn/concepts/peer-discovery"}],"collapsible":true},{"type":"link","label":"Security Features","href":"/learn/security-features","docId":"learn/security-features","unlisted":false},{"type":"category","label":"Research","items":[{"type":"category","label":"Benchmarks","collapsed":false,"items":[{"type":"link","label":"PostgreSQL","href":"/learn/research/benchmarks/postgres-adoption","docId":"learn/research/benchmarks/postgres-adoption","unlisted":false},{"type":"link","label":"Performance Benchmarks and Test Reports","href":"/learn/research/benchmarks/test-results-summary","docId":"learn/research/benchmarks/test-results-summary","unlisted":false}],"collapsible":true},{"type":"category","label":"Research and Studies","collapsed":false,"items":[{"type":"link","label":"Capped Bandwidth in Waku","href":"/learn/research/research-and-studies/capped-bandwidth","docId":"learn/research/research-and-studies/capped-bandwidth","unlisted":false},{"type":"link","label":"Incentivisation","href":"/learn/research/research-and-studies/incentivisation","docId":"learn/research/research-and-studies/incentivisation","unlisted":false},{"type":"link","label":"Maximum Bandwidth for Global Adoption","href":"/learn/research/research-and-studies/maximum-bandwidth","docId":"learn/research/research-and-studies/maximum-bandwidth","unlisted":false},{"type":"link","label":"Message Propagation Times With Waku-RLN","href":"/learn/research/research-and-studies/message-propagation","docId":"learn/research/research-and-studies/message-propagation","unlisted":false},{"type":"link","label":"RLN Key Benchmarks","href":"/learn/research/research-and-studies/rln-key-benchmarks","docId":"learn/research/research-and-studies/rln-key-benchmarks","unlisted":false}],"collapsible":true}],"collapsed":true,"collapsible":true,"href":"/learn/research/"},{"type":"link","label":"Comparing Waku and libp2p","href":"/learn/waku-vs-libp2p","docId":"learn/waku-vs-libp2p","unlisted":false},{"type":"link","label":"Glossary","href":"/learn/glossary","docId":"learn/glossary","unlisted":false},{"type":"link","label":"Frequently Asked Questions","href":"/learn/faq","docId":"learn/faq","unlisted":false}]},"docs":{"build/javascript/configure-discovery":{"id":"build/javascript/configure-discovery","title":"Bootstrap Nodes and Discover Peers","description":"This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery.","sidebar":"build"},"build/javascript/debug-waku-dapp":{"id":"build/javascript/debug-waku-dapp","title":"Debug Your Waku DApp and WebSocket","description":"This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.","sidebar":"build"},"build/javascript/faq":{"id":"build/javascript/faq","title":"JavaScript SDK FAQ","description":"You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started.","sidebar":"build"},"build/javascript/index":{"id":"build/javascript/index","title":"JavaScript Waku SDK","description":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","sidebar":"build"},"build/javascript/light-send-receive":{"id":"build/javascript/light-send-receive","title":"Send and Receive Messages Using Light Push and Filter","description":"This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.","sidebar":"build"},"build/javascript/manage-filter":{"id":"build/javascript/manage-filter","title":"Manage Your Filter Subscriptions","description":"This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.","sidebar":"build"},"build/javascript/message-encryption":{"id":"build/javascript/message-encryption","title":"Encrypt, Decrypt, and Sign Your Messages","description":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.","sidebar":"build"},"build/javascript/reliable-channels":{"id":"build/javascript/reliable-channels","title":"Send and Receive Messages in a Reliable Channel","description":"Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.","sidebar":"build"},"build/javascript/run-waku-nodejs":{"id":"build/javascript/run-waku-nodejs","title":"Run @waku/sdk in a NodeJS Application","description":"While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.","sidebar":"build"},"build/javascript/store-retrieve-messages":{"id":"build/javascript/store-retrieve-messages","title":"Retrieve Messages Using Store Protocol","description":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","sidebar":"build"},"build/javascript/use-waku-create-app":{"id":"build/javascript/use-waku-create-app","title":"Scaffold DApps Using @waku/create-app","description":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","sidebar":"build"},"build/javascript/use-waku-react":{"id":"build/javascript/use-waku-react","title":"Build React DApps Using @waku/react","description":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","sidebar":"build"},"landing":{"id":"landing","title":"Introduction to Waku","description":"Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy."},"learn/concepts/content-topics":{"id":"learn/concepts/content-topics","title":"Content Topics","description":"Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.","sidebar":"learn"},"learn/concepts/discv5":{"id":"learn/concepts/discv5","title":"Discv5","description":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.","sidebar":"learn"},"learn/concepts/dns-discovery":{"id":"learn/concepts/dns-discovery","title":"DNS Discovery","description":"Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr.","sidebar":"learn"},"learn/concepts/network-domains":{"id":"learn/concepts/network-domains","title":"Network Domains","description":"Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.","sidebar":"learn"},"learn/concepts/peer-discovery":{"id":"learn/concepts/peer-discovery","title":"Peer Discovery","description":"When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping.","sidebar":"learn"},"learn/concepts/peer-exchange":{"id":"learn/concepts/peer-exchange","title":"Peer Exchange","description":"The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network.","sidebar":"learn"},"learn/concepts/protocols":{"id":"learn/concepts/protocols","title":"Protocols","description":"Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:","sidebar":"learn"},"learn/concepts/static-peers":{"id":"learn/concepts/static-peers","title":"Static Peers","description":"Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node.","sidebar":"learn"},"learn/concepts/transports":{"id":"learn/concepts/transports","title":"Transports","description":"Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery.","sidebar":"learn"},"learn/faq":{"id":"learn/faq","title":"Waku FAQ","description":"Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.","sidebar":"learn"},"learn/glossary":{"id":"learn/glossary","title":"Glossary","description":"Definitions and usage of the terminology used in the Waku ecosystem.","sidebar":"learn"},"learn/index":{"id":"learn/index","title":"The Waku Network","description":"The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include:","sidebar":"learn"},"learn/research/benchmarks/postgres-adoption":{"id":"learn/research/benchmarks/postgres-adoption","title":"PostgreSQL","description":"Document that describes why Nim-Waku started to use Postgres and shows some benchmark and comparison results.","sidebar":"learn"},"learn/research/benchmarks/test-results-summary":{"id":"learn/research/benchmarks/test-results-summary","title":"Performance Benchmarks and Test Reports","description":"Introduction","sidebar":"learn"},"learn/research/index":{"id":"learn/research/index","title":"Research","description":"Experimental features","sidebar":"learn"},"learn/research/research-and-studies/capped-bandwidth":{"id":"learn/research/research-and-studies/capped-bandwidth","title":"Capped Bandwidth in Waku","description":"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.","sidebar":"learn"},"learn/research/research-and-studies/incentivisation":{"id":"learn/research/research-and-studies/incentivisation","title":"Incentivisation","description":"Waku is a family of decentralised communication protocols. The Waku Network (TWN) consists of independent nodes running Waku protocols. TWN needs incentivisation (shortened to i13n) to ensure proper node behaviour.","sidebar":"learn"},"learn/research/research-and-studies/maximum-bandwidth":{"id":"learn/research/research-and-studies/maximum-bandwidth","title":"Maximum Bandwidth for Global Adoption","description":"TLDR//github.com/waku-org/research/issues/22 to specify how this maximum will be enforced.","sidebar":"learn"},"learn/research/research-and-studies/message-propagation":{"id":"learn/research/research-and-studies/message-propagation","title":"Message Propagation Times With Waku-RLN","description":"TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it\'s affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.","sidebar":"learn"},"learn/research/research-and-studies/rln-key-benchmarks":{"id":"learn/research/research-and-studies/rln-key-benchmarks","title":"RLN Key Benchmarks","description":"Introduction","sidebar":"learn"},"learn/security-features":{"id":"learn/security-features","title":"Security Features","description":"Waku\'s protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol\'s security guarantees and limitations.","sidebar":"learn"},"learn/waku-vs-libp2p":{"id":"learn/waku-vs-libp2p","title":"Comparing Waku and libp2p","description":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","sidebar":"learn"},"privacy-policy":{"id":"privacy-policy","title":"Privacy Policy","description":"Last updated: 9 February 2024"},"rules-of-engagement":{"id":"rules-of-engagement","title":"Rules of Engagement","description":"Waku is a nascent technology and the Waku community is still growing. Hence, the Waku team is keen to work closely with projects to help leverage Waku technology to drive the success of their own applications."},"run-node/build-source":{"id":"run-node/build-source","title":"Build Nwaku from Source","description":"This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead.","sidebar":"runNode"},"run-node/config-methods":{"id":"run-node/config-methods","title":"Node Configuration Methods","description":"Waku nodes can be configured using a combination of the following methods:","sidebar":"runNode"},"run-node/config-options":{"id":"run-node/config-options","title":"Node Configuration Options","description":"Here are the available node configuration options, along with their default values and descriptions:","sidebar":"runNode"},"run-node/configure-discovery":{"id":"run-node/configure-discovery","title":"Configure Peer Discovery","description":"This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network.","sidebar":"runNode"},"run-node/configure-nwaku":{"id":"run-node/configure-nwaku","title":"Node Configuration Examples","description":"This guide provides detailed steps to configure a nwaku node for different use cases.","sidebar":"runNode"},"run-node/faq":{"id":"run-node/faq","title":"Nwaku FAQ","description":"Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.","sidebar":"runNode"},"run-node/find-node-address":{"id":"run-node/find-node-address","title":"Find Your Node Address","description":"When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level.","sidebar":"runNode"},"run-node/index":{"id":"run-node/index","title":"Run a Waku Node","description":"Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources.","sidebar":"runNode"},"run-node/run-docker":{"id":"run-node/run-docker","title":"Run Nwaku in a Docker Container","description":"This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.","sidebar":"runNode"},"run-node/run-docker-compose":{"id":"run-node/run-docker-compose","title":"Run Nwaku with Docker Compose","description":"nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically:","sidebar":"runNode"},"run-node/upgrade-instructions":{"id":"run-node/upgrade-instructions","title":"Upgrade Instructions","description":"If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order.","sidebar":"runNode"},"security":{"id":"security","title":"Security","description":"We take security seriously at Waku and across the Institute of Free Technology and its affiliates."},"terms":{"id":"terms","title":"Terms of Use","description":"Last updated: 14 February 2024"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/242b0c7c.09027b90.js b/assets/js/242b0c7c.09027b90.js deleted file mode 100644 index 40e844a..0000000 --- a/assets/js/242b0c7c.09027b90.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[8376],{4865:(e,n,s)=>{s.d(n,{A:()=>g});var t=s(96540),r=s(34164),a=s(23104),i=s(47751),c=s(92303);const o={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var d=s(74848);function l({className:e,block:n,selectedValue:s,selectValue:t,tabValues:i}){const c=[],{blockElementScrollPositionUntilNextRender:l}=(0,a.a_)(),m=e=>{const n=e.currentTarget,r=c.indexOf(n),a=i[r].value;a!==s&&(l(n),t(a))},p=e=>{let n=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{const s=c.indexOf(e.currentTarget)+1;n=c[s]??c[0];break}case"ArrowLeft":{const s=c.indexOf(e.currentTarget)-1;n=c[s]??c[c.length-1];break}}n?.focus()};return(0,d.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:t})=>(0,d.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{c.push(e)},onKeyDown:p,onClick:m,...t,className:(0,r.A)("tabs__item",o.tabItem,t?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function m({lazy:e,children:n,selectedValue:s}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.find(e=>e.props.value===s);return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,d.jsx)("div",{className:"margin-top--md",children:a.map((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function p(e){const n=(0,i.u)(e);return(0,d.jsxs)("div",{className:(0,r.A)("tabs-container",o.tabList),children:[(0,d.jsx)(l,{...n,...e}),(0,d.jsx)(m,{...n,...e})]})}function g(e){const n=(0,c.default)();return(0,d.jsx)(p,{...e,children:(0,i.v)(e.children)},String(n))}},8361:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>g,frontMatter:()=>o,metadata:()=>t,toc:()=>m});const t=JSON.parse('{"id":"guides/js-waku/message-encryption","title":"Encrypt, Decrypt, and Sign Your Messages","description":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.","source":"@site/docs/guides/js-waku/message-encryption.mdx","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/message-encryption","permalink":"/guides/js-waku/message-encryption","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/message-encryption.mdx","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Encrypt, Decrypt, and Sign Your Messages","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Retrieve Messages Using Store Protocol","permalink":"/guides/js-waku/store-retrieve-messages"},"next":{"title":"Build React DApps Using @waku/react","permalink":"/guides/js-waku/use-waku-react"}}');var r=s(74848),a=s(28453),i=s(4865),c=s(19365);const o={title:"Encrypt, Decrypt, and Sign Your Messages",hide_table_of_contents:!0},d=void 0,l={},m=[{value:"Installation",id:"installation",level:2},{value:"Symmetric encryption",id:"symmetric-encryption",level:2},{value:"ECIES encryption",id:"ecies-encryption",level:2},{value:"Signing encrypted messages",id:"signing-encrypted-messages",level:2},{value:"Storing encryption keys",id:"storing-encryption-keys",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["This guide provides detailed steps to use the ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@waku/message-encryption",children:"@waku/message-encryption"})," package to encrypt, decrypt, and sign your messages using ",(0,r.jsx)(n.a,{href:"/learn/glossary#waku-message-payload-encryption",children:"Waku message payload encryption"})," methods."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to freely use custom protocols or ",(0,r.jsx)(n.a,{href:"/learn/glossary#waku-message-payload-encryption",children:"Waku message payload encryption"})," methods."]})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsxs)(n.p,{children:["Install the required packages for integrating ",(0,r.jsx)(n.code,{children:"@waku/message-encryption"})," using your preferred package manager:"]}),"\n","\n",(0,r.jsxs)(i.A,{groupId:"package-manager",children:[(0,r.jsx)(c.A,{value:"npm",label:"NPM",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"npm install @waku/message-encryption @waku/utils\n"})})}),(0,r.jsx)(c.A,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"yarn add @waku/message-encryption @waku/utils\n"})})})]}),"\n",(0,r.jsx)(n.h2,{id:"symmetric-encryption",children:"Symmetric encryption"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Symmetric"})," encryption uses a single, shared key for message encryption and decryption. Use the ",(0,r.jsx)(n.code,{children:"generateSymmetricKey()"})," function to generate a random symmetric key:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { generateSymmetricKey } from "@waku/message-encryption";\n\n// Generate a random symmetric key\nconst symmetricKey = generateSymmetricKey();\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To send encrypted messages, create a ",(0,r.jsx)(n.code,{children:"Symmetric"})," message ",(0,r.jsx)(n.code,{children:"encoder"})," and send the message as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Sender client"',children:'import { createEncoder } from "@waku/message-encryption/symmetric";\n\n// Create a symmetric message encoder\nconst encoder = createEncoder({\n contentTopic: contentTopic, // message content topic\n symKey: symmetricKey, // symmetric key for encrypting messages\n});\n\n// Send the message using Light Push\nawait node.lightPush.send(encoder, { payload });\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To decrypt the messages you receive, create a symmetric message ",(0,r.jsx)(n.code,{children:"decoder"})," and process the messages as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Receiver client"',children:'import { createDecoder } from "@waku/message-encryption/symmetric";\n\n// Create a symmetric message decoder\nconst decoder = createDecoder(contentTopic, symmetricKey);\n\n// Receive messages from a Filter subscription\nawait subscription.subscribe([decoder], callback);\n\n// Retrieve messages from Store peers\nawait node.store.queryWithOrderedCallback([decoder], callback);\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["The symmetric key exchange between users can happen through an ",(0,r.jsx)(n.a,{href:"/learn/glossary#out-of-band",children:"out-of-band method"}),". For example, where the key is embedded within the URL shared by a user to access a specific resource."]})}),"\n",(0,r.jsx)(n.h2,{id:"ecies-encryption",children:"ECIES encryption"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"ECIES"})," encryption uses a public key for encryption and a private key for decryption. Use the ",(0,r.jsx)(n.code,{children:"generatePrivateKey()"})," function to generate a random ",(0,r.jsx)(n.code,{children:"ECDSA"})," private key:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { generatePrivateKey, getPublicKey } from "@waku/message-encryption";\n\n// Generate a random ECDSA private key, keep secure\nconst privateKey = generatePrivateKey();\n\n// Generate a public key from the private key, provide to the sender\nconst publicKey = getPublicKey(privateKey);\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To send encrypted messages, create an ",(0,r.jsx)(n.code,{children:"ECIES"})," message ",(0,r.jsx)(n.code,{children:"encoder"})," with the public key and send the message as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Sender client"',children:'import { createEncoder } from "@waku/message-encryption/ecies";\n\n// Create an ECIES message encoder\nconst encoder = createEncoder({\n contentTopic: contentTopic, // message content topic\n publicKey: publicKey, // ECIES public key for encrypting messages\n});\n\n// Send the message using Light Push\nawait node.lightPush.send(encoder, { payload });\n'})}),"\n",(0,r.jsxs)(n.p,{children:["To decrypt the messages you receive, create an ",(0,r.jsx)(n.code,{children:"ECIES"})," message ",(0,r.jsx)(n.code,{children:"decoder"})," with the private key and process the messages as usual:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Receiver client"',children:'import { createDecoder } from "@waku/message-encryption/ecies";\n\n// Create an ECIES message decoder\nconst decoder = createDecoder(contentTopic, privateKey);\n\n// Receive messages from a Filter subscription\nawait subscription.subscribe([decoder], callback);\n\n// Retrieve messages from Store peers\nawait node.store.queryWithOrderedCallback([decoder], callback);\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Users can share their public key through broadcasting or ",(0,r.jsx)(n.a,{href:"/learn/glossary#out-of-band",children:"out-of-band methods"}),", such as embedding it in a URL or sending an unencrypted message on another content topic for others to retrieve."]})}),"\n",(0,r.jsx)(n.h2,{id:"signing-encrypted-messages",children:"Signing encrypted messages"}),"\n",(0,r.jsx)(n.p,{children:"Message signing helps in proving the authenticity of received messages. By attaching a signature to a message, you can verify its origin and integrity with absolute certainty."}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"Signing messages is only possible when encrypted, but if your application does not require encryption, you can generate a symmetric key through hardcoded or deterministic methods using information available to all users."})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"sigPrivKey"})," parameter allows the ",(0,r.jsx)(n.code,{children:"Symmetric"})," and ",(0,r.jsx)(n.code,{children:"ECIES"})," message ",(0,r.jsx)(n.code,{children:"encoders"})," to sign the message before encryption using an ",(0,r.jsx)(n.code,{children:"ECDSA"})," private key:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Alice (sender) client"',children:'import { generatePrivateKey, getPublicKey } from "@waku/message-encryption";\nimport { createEncoder as createSymmetricEncoder } from "@waku/message-encryption/symmetric";\nimport { createEncoder as createECIESEncoder } from "@waku/message-encryption/ecies";\n\n// Generate a random ECDSA private key for signing messages\n// ECIES encryption and message signing both use ECDSA keys\n// For this example, we\'ll call the sender of the message Alice\nconst alicePrivateKey = generatePrivateKey();\nconst alicePublicKey = getPublicKey(alicePrivateKey);\n\n// Create a symmetric encoder that signs messages\nconst symmetricEncoder = createSymmetricEncoder({\n contentTopic: contentTopic, // message content topic\n symKey: symmetricKey, // symmetric key for encrypting messages\n sigPrivKey: alicePrivateKey, // private key for signing messages before encryption\n});\n\n// Create an ECIES encoder that signs messages\nconst ECIESEncoder = createECIESEncoder({\n contentTopic: contentTopic, // message content topic\n publicKey: publicKey, // ECIES public key for encrypting messages\n sigPrivKey: alicePrivateKey, // private key for signing messages before encryption\n});\n\n// Send and receive your messages as usual with Light Push and Filter\nawait subscription.subscribe([symmetricEncoder], callback);\nawait node.lightPush.send(symmetricEncoder, { payload });\n\nawait subscription.subscribe([ECIESEncoder], callback);\nawait node.lightPush.send(ECIESEncoder, { payload });\n'})}),"\n",(0,r.jsxs)(n.p,{children:["You can extract the ",(0,r.jsx)(n.code,{children:"signature"})," and its public key (",(0,r.jsx)(n.code,{children:"signaturePublicKey"}),") from the ",(0,r.jsx)(n.a,{href:"https://js.waku.org/classes/_waku_message_encryption.DecodedMessage.html",children:"DecodedMessage"})," and compare it with the expected public key or use the ",(0,r.jsx)(n.code,{children:"verifySignature()"})," function to verify the message origin:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",metastring:'title="Bob (receiver) client"',children:'import { generatePrivateKey } from "@waku/message-encryption";\nimport { createEncoder } from "@waku/message-encryption/symmetric";\n\n// Generate a random private key for signing messages\n// For this example, we\'ll call the receiver of the message Bob\nconst bobPrivateKey = generatePrivateKey();\n\n// Create an encoder that signs messages\nconst encoder = createEncoder({\n contentTopic: contentTopic,\n symKey: symmetricKey,\n sigPrivKey: bobPrivateKey,\n});\n\n// Modify the callback function to verify message signature\nconst callback = (wakuMessage) => {\n // Extract the message signature and public key of the signature\n // You can compare the signaturePublicKey with Alice public key\n const signature = wakuMessage.signature;\n const signaturePublicKey = wakuMessage.signaturePublicKey;\n\n // Verify the message was actually signed and sent by Alice\n // Alice\'s public key can be gotten from broadcasting or out-of-band methods\n if (wakuMessage.verifySignature(alicePublicKey)) {\n console.log("This message was signed by Alice");\n } else {\n console.log("This message was NOT signed by Alice");\n }\n};\n\nawait subscription.subscribe([encoder], callback);\n'})}),"\n",(0,r.jsx)(n.h2,{id:"storing-encryption-keys",children:"Storing encryption keys"}),"\n",(0,r.jsxs)(n.p,{children:["We used randomly generated keys for encryption and message signing in the provided examples, but real-world applications require consistent keys among client restarts. Have a look at the ",(0,r.jsx)(n.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/eth-pm/src/key_pair_handling",children:"Key Pair Handling"})," example, which demonstrates the secure storage and retrieval of key information from local storage using ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto",children:"Subtle Crypto"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you need a simple way to store your keys in hexadecimal format across your application, you can use the ",(0,r.jsx)(n.a,{href:"https://www.npmjs.com/package/@waku/utils",children:"@waku/utils"})," package:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { bytesToHex, hexToBytes } from "@waku/utils/bytes";\n\n// Generate random symmetric and private keys\nconst symmetricKey = generateSymmetricKey();\nconst privateKey = generatePrivateKey();\n\n// Store the keys in hexadecimal format\nconst symmetricKeyHex = bytesToHex(symmetricKey);\nconst privateKeyHex = bytesToHex(privateKey);\n\n// Restore the keys from hexadecimal format\nconst restoredSymmetricKey = hexToBytes(symmetricKeyHex);\nconst restoredPrivateKey = hexToBytes(privateKeyHex);\n'})}),"\n",(0,r.jsx)(n.admonition,{title:"Congratulations!",type:"tip",children:(0,r.jsxs)(n.p,{children:["You have successfully encrypted, decrypted, and signed your messages using ",(0,r.jsx)(n.code,{children:"Symmetric"})," and ",(0,r.jsx)(n.code,{children:"ECIES"})," encryption methods. Have a look at the ",(0,r.jsx)(n.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/eth-pm",children:"eth-pm"})," example for a working demo."]})})]})}function g(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},19365:(e,n,s)=>{s.d(n,{A:()=>i});s(96540);var t=s(34164);const r={tabItem:"tabItem_Ymn6"};var a=s(74848);function i({children:e,hidden:n,className:s}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,s),hidden:n,children:e})}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var t=s(96540);const r={},a=t.createContext(r);function i(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5277fe18.a5608628.js b/assets/js/25f4bf39.7cab021d.js similarity index 72% rename from assets/js/5277fe18.a5608628.js rename to assets/js/25f4bf39.7cab021d.js index e8917e2..3a29b5b 100644 --- a/assets/js/5277fe18.a5608628.js +++ b/assets/js/25f4bf39.7cab021d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[7800],{4865:(e,t,a)=>{a.d(t,{A:()=>h});var s=a(96540),n=a(34164),r=a(23104),i=a(47751),l=a(92303);const o={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var c=a(74848);function u({className:e,block:t,selectedValue:a,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,r.a_)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},p=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,c.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.A)("tabs",{"tabs--block":t},e),children:i.map(({value:e,label:t,attributes:s})=>(0,c.jsx)("li",{role:"tab",tabIndex:a===e?0:-1,"aria-selected":a===e,ref:e=>{l.push(e)},onKeyDown:p,onClick:d,...s,className:(0,n.A)("tabs__item",o.tabItem,s?.className,{"tabs__item--active":a===e}),children:t??e},e))})}function d({lazy:e,children:t,selectedValue:a}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===a);return e?(0,s.cloneElement)(e,{className:(0,n.A)("margin-top--md",e.props.className)}):null}return(0,c.jsx)("div",{className:"margin-top--md",children:r.map((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==a}))})}function p(e){const t=(0,i.u)(e);return(0,c.jsxs)("div",{className:(0,n.A)("tabs-container",o.tabList),children:[(0,c.jsx)(u,{...t,...e}),(0,c.jsx)(d,{...t,...e})]})}function h(e){const t=(0,l.default)();return(0,c.jsx)(p,{...e,children:(0,i.v)(e.children)},String(t))}},19365:(e,t,a)=>{a.d(t,{A:()=>i});a(96540);var s=a(34164);const n={tabItem:"tabItem_Ymn6"};var r=a(74848);function i({children:e,hidden:t,className:a}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)(n.tabItem,a),hidden:t,children:e})}},28453:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>l});var s=a(96540);const n={},r=s.createContext(n);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(r.Provider,{value:t},e.children)}},38684:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"guides/js-waku/use-waku-create-app","title":"Scaffold DApps Using @waku/create-app","description":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","source":"@site/docs/guides/js-waku/use-waku-create-app.md","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/use-waku-create-app","permalink":"/guides/js-waku/use-waku-create-app","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/use-waku-create-app.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Scaffold DApps Using @waku/create-app","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Build React DApps Using @waku/react","permalink":"/guides/js-waku/use-waku-react"},"next":{"title":"Bootstrap Nodes and Discover Peers","permalink":"/guides/js-waku/configure-discovery"}}');var n=a(74848),r=a(28453),i=a(4865),l=a(19365);const o={title:"Scaffold DApps Using @waku/create-app",hide_table_of_contents:!0},c=void 0,u={},d=[{value:"Usage",id:"usage",level:2},{value:"Contributing new templates",id:"contributing-new-templates",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["This guide provides detailed steps to bootstrap your next ",(0,n.jsx)(t.code,{children:"@waku/sdk"})," project from ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples",children:"various example templates"})," using the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@waku/create-app",children:"@waku/create-app"})," package."]}),"\n",(0,n.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsxs)(t.p,{children:["Initialise a new ",(0,n.jsx)(t.code,{children:"@waku/sdk"})," template using any of the following methods:"]}),"\n","\n",(0,n.jsxs)(i.A,{children:[(0,n.jsx)(l.A,{value:"npm",label:"NPM",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"npx @waku/create-app [PROJECT DIRECTORY]\n"})})}),(0,n.jsx)(l.A,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"yarn create @waku/app [PROJECT DIRECTORY]\n"})})})]}),"\n",(0,n.jsx)(t.p,{children:"Next, select a template to initialise your app from:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"waku create app demo",src:a(47631).A+"",width:"1136",height:"742"})}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you have previously installed ",(0,n.jsx)(t.code,{children:"@waku/create-app"})," globally, we recommend uninstalling the package to ensure that ",(0,n.jsx)(t.code,{children:"npx"})," always uses the latest version."]})}),"\n",(0,n.jsx)(t.h2,{id:"contributing-new-templates",children:"Contributing new templates"}),"\n",(0,n.jsxs)(t.p,{children:["We welcome and appreciate the contributions of templates for the ",(0,n.jsx)(t.code,{children:"@waku/create-app"})," package. To contribute a template, please follow these steps:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Create the template, ensuring it is user-friendly and thoroughly tested."}),"\n",(0,n.jsxs)(t.li,{children:["Place the template in the ",(0,n.jsx)(t.code,{children:"examples"})," folder in the ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples",children:"js-waku-examples"})," repository's root."]}),"\n",(0,n.jsx)(t.li,{children:"Commit your changes with a detailed message and push them to your forked repository."}),"\n",(0,n.jsxs)(t.li,{children:["Finally, submit a pull request to the ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples",children:"js-waku-examples"})," repository."]}),"\n",(0,n.jsx)(t.li,{children:"Our team will carefully review and merge your submission upon approval."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Waku also provides bounties to encourage community members to contribute to the network and earn rewards. To participate in the bounty program, head to ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/bounties",children:"https://github.com/waku-org/bounties"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},47631:(e,t,a)=>{a.d(t,{A:()=>s});const s=a.p+"assets/images/waku-create-app-demo-295aa111853f5a3381c5ed45d4cb9803.gif"}}]); \ No newline at end of file +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1530],{4865:(e,t,a)=>{a.d(t,{A:()=>h});var s=a(96540),n=a(34164),r=a(23104),i=a(47751),l=a(92303);const o={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var c=a(74848);function u({className:e,block:t,selectedValue:a,selectValue:s,tabValues:i}){const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,r.a_)(),d=e=>{const t=e.currentTarget,n=l.indexOf(t),r=i[n].value;r!==a&&(u(t),s(r))},p=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=l.indexOf(e.currentTarget)+1;t=l[a]??l[0];break}case"ArrowLeft":{const a=l.indexOf(e.currentTarget)-1;t=l[a]??l[l.length-1];break}}t?.focus()};return(0,c.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.A)("tabs",{"tabs--block":t},e),children:i.map(({value:e,label:t,attributes:s})=>(0,c.jsx)("li",{role:"tab",tabIndex:a===e?0:-1,"aria-selected":a===e,ref:e=>{l.push(e)},onKeyDown:p,onClick:d,...s,className:(0,n.A)("tabs__item",o.tabItem,s?.className,{"tabs__item--active":a===e}),children:t??e},e))})}function d({lazy:e,children:t,selectedValue:a}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===a);return e?(0,s.cloneElement)(e,{className:(0,n.A)("margin-top--md",e.props.className)}):null}return(0,c.jsx)("div",{className:"margin-top--md",children:r.map((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==a}))})}function p(e){const t=(0,i.u)(e);return(0,c.jsxs)("div",{className:(0,n.A)("tabs-container",o.tabList),children:[(0,c.jsx)(u,{...t,...e}),(0,c.jsx)(d,{...t,...e})]})}function h(e){const t=(0,l.default)();return(0,c.jsx)(p,{...e,children:(0,i.v)(e.children)},String(t))}},19365:(e,t,a)=>{a.d(t,{A:()=>i});a(96540);var s=a(34164);const n={tabItem:"tabItem_Ymn6"};var r=a(74848);function i({children:e,hidden:t,className:a}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)(n.tabItem,a),hidden:t,children:e})}},24311:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"build/javascript/use-waku-create-app","title":"Scaffold DApps Using @waku/create-app","description":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","source":"@site/docs/build/javascript/use-waku-create-app.md","sourceDirName":"build/javascript","slug":"/build/javascript/use-waku-create-app","permalink":"/build/javascript/use-waku-create-app","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/build/javascript/use-waku-create-app.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Scaffold DApps Using @waku/create-app","hide_table_of_contents":true,"displayed_sidebar":"build"},"sidebar":"build","previous":{"title":"Build React DApps Using @waku/react","permalink":"/build/javascript/use-waku-react"},"next":{"title":"Bootstrap Nodes and Discover Peers","permalink":"/build/javascript/configure-discovery"}}');var n=a(74848),r=a(28453),i=a(4865),l=a(19365);const o={title:"Scaffold DApps Using @waku/create-app",hide_table_of_contents:!0,displayed_sidebar:"build"},c=void 0,u={},d=[{value:"Usage",id:"usage",level:2},{value:"Contributing new templates",id:"contributing-new-templates",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["This guide provides detailed steps to bootstrap your next ",(0,n.jsx)(t.code,{children:"@waku/sdk"})," project from ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples",children:"various example templates"})," using the ",(0,n.jsx)(t.a,{href:"https://www.npmjs.com/package/@waku/create-app",children:"@waku/create-app"})," package."]}),"\n",(0,n.jsx)(t.h2,{id:"usage",children:"Usage"}),"\n",(0,n.jsxs)(t.p,{children:["Initialise a new ",(0,n.jsx)(t.code,{children:"@waku/sdk"})," template using any of the following methods:"]}),"\n","\n",(0,n.jsxs)(i.A,{children:[(0,n.jsx)(l.A,{value:"npm",label:"NPM",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"npx @waku/create-app [PROJECT DIRECTORY]\n"})})}),(0,n.jsx)(l.A,{value:"yarn",label:"Yarn",children:(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-shell",children:"yarn create @waku/app [PROJECT DIRECTORY]\n"})})})]}),"\n",(0,n.jsx)(t.p,{children:"Next, select a template to initialise your app from:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"waku create app demo",src:a(47631).A+"",width:"1136",height:"742"})}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["If you have previously installed ",(0,n.jsx)(t.code,{children:"@waku/create-app"})," globally, we recommend uninstalling the package to ensure that ",(0,n.jsx)(t.code,{children:"npx"})," always uses the latest version."]})}),"\n",(0,n.jsx)(t.h2,{id:"contributing-new-templates",children:"Contributing new templates"}),"\n",(0,n.jsxs)(t.p,{children:["We welcome and appreciate the contributions of templates for the ",(0,n.jsx)(t.code,{children:"@waku/create-app"})," package. To contribute a template, please follow these steps:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsx)(t.li,{children:"Create the template, ensuring it is user-friendly and thoroughly tested."}),"\n",(0,n.jsxs)(t.li,{children:["Place the template in the ",(0,n.jsx)(t.code,{children:"examples"})," folder in the ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples",children:"js-waku-examples"})," repository's root."]}),"\n",(0,n.jsx)(t.li,{children:"Commit your changes with a detailed message and push them to your forked repository."}),"\n",(0,n.jsxs)(t.li,{children:["Finally, submit a pull request to the ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples",children:"js-waku-examples"})," repository."]}),"\n",(0,n.jsx)(t.li,{children:"Our team will carefully review and merge your submission upon approval."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Waku also provides bounties to encourage community members to contribute to the network and earn rewards. To participate in the bounty program, head to ",(0,n.jsx)(t.a,{href:"https://github.com/waku-org/bounties",children:"https://github.com/waku-org/bounties"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},28453:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>l});var s=a(96540);const n={},r=s.createContext(n);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(r.Provider,{value:t},e.children)}},47631:(e,t,a)=>{a.d(t,{A:()=>s});const s=a.p+"assets/images/waku-create-app-demo-295aa111853f5a3381c5ed45d4cb9803.gif"}}]); \ No newline at end of file diff --git a/assets/js/263d1c85.dee84c75.js b/assets/js/263d1c85.dee84c75.js new file mode 100644 index 0000000..5ab168a --- /dev/null +++ b/assets/js/263d1c85.dee84c75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2139],{4865:(e,n,s)=>{s.d(n,{A:()=>h});var t=s(96540),r=s(34164),o=s(23104),i=s(47751),a=s(92303);const c={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var d=s(74848);function l({className:e,block:n,selectedValue:s,selectValue:t,tabValues:i}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,o.a_)(),p=e=>{const n=e.currentTarget,r=a.indexOf(n),o=i[r].value;o!==s&&(l(n),t(o))},u=e=>{let n=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,d.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":n},e),children:i.map(({value:e,label:n,attributes:t})=>(0,d.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{a.push(e)},onKeyDown:u,onClick:p,...t,className:(0,r.A)("tabs__item",c.tabItem,t?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function p({lazy:e,children:n,selectedValue:s}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===s);return e?(0,t.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,d.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function u(e){const n=(0,i.u)(e);return(0,d.jsxs)("div",{className:(0,r.A)("tabs-container",c.tabList),children:[(0,d.jsx)(l,{...n,...e}),(0,d.jsx)(p,{...n,...e})]})}function h(e){const n=(0,a.default)();return(0,d.jsx)(u,{...e,children:(0,i.v)(e.children)},String(n))}},19365:(e,n,s)=>{s.d(n,{A:()=>i});s(96540);var t=s(34164);const r={tabItem:"tabItem_Ymn6"};var o=s(74848);function i({children:e,hidden:n,className:s}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,t.A)(r.tabItem,s),hidden:n,children:e})}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>a});var t=s(96540);const r={},o=t.createContext(r);function i(e){const n=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:n},e.children)}},41118:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>c,metadata:()=>t,toc:()=>p});const t=JSON.parse('{"id":"build/javascript/configure-discovery","title":"Bootstrap Nodes and Discover Peers","description":"This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery.","source":"@site/docs/build/javascript/configure-discovery.mdx","sourceDirName":"build/javascript","slug":"/build/javascript/configure-discovery","permalink":"/build/javascript/configure-discovery","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/build/javascript/configure-discovery.mdx","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Bootstrap Nodes and Discover Peers","hide_table_of_contents":true},"sidebar":"build","previous":{"title":"Scaffold DApps Using @waku/create-app","permalink":"/build/javascript/use-waku-create-app"},"next":{"title":"Run @waku/sdk in a NodeJS Application","permalink":"/build/javascript/run-waku-nodejs"}}');var r=s(74848),o=s(28453),i=s(4865),a=s(19365);const c={title:"Bootstrap Nodes and Discover Peers",hide_table_of_contents:!0},d=void 0,l={},p=[{value:"Default bootstrap method",id:"default-bootstrap-method",level:2},{value:"Configure static peers",id:"configure-static-peers",level:2},{value:"Configure DNS discovery",id:"configure-dns-discovery",level:2},{value:"Configure DNS discovery and static peers",id:"configure-dns-discovery-and-static-peers",level:2},{value:"Retrieving connected peers",id:"retrieving-connected-peers",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["This guide provides detailed steps to bootstrap your your node using ",(0,r.jsx)(n.a,{href:"/learn/concepts/static-peers",children:"Static Peers"})," and discover peers in the Waku Network using ",(0,r.jsx)(n.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"If you do not set up a bootstrap node or discovery mechanism, your node will not connect to any remote peer."})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Until ",(0,r.jsx)(n.a,{href:"/learn/research#prevention-of-denial-of-service-dos-and-node-incentivisation",children:"node incentivisation"})," is in place, you should ",(0,r.jsx)(n.a,{href:"/run-node",children:"operate extra nodes"})," alongside the ones provided by the Waku Network. When running a node, we recommend using the ",(0,r.jsx)(n.a,{href:"#configure-dns-discovery-and-static-peers",children:"DNS Discovery and Static Peers"})," configuration to connect to both the Waku Network and your node."]})}),"\n",(0,r.jsx)(n.h2,{id:"default-bootstrap-method",children:"Default bootstrap method"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"@waku/sdk"})," package provides a built-in bootstrapping method that uses ",(0,r.jsx)(n.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"})," to locate peers from the ",(0,r.jsx)(n.code,{children:"waku v2.prod"})," ",(0,r.jsx)(n.code,{children:"ENR"})," tree."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\n\n// Bootstrap node using the default bootstrap method\nconst node = await createLightNode({ defaultBootstrap: true });\n'})}),"\n",(0,r.jsx)(n.h2,{id:"configure-static-peers",children:"Configure static peers"}),"\n",(0,r.jsxs)(n.p,{children:["To set ",(0,r.jsx)(n.a,{href:"/learn/concepts/static-peers",children:"static peers"}),", a list of ",(0,r.jsx)(n.code,{children:"multiaddr"})," to bootstrap the node should be passed to the ",(0,r.jsx)(n.code,{children:"bootstrapPeers"})," parameter of the ",(0,r.jsx)(n.code,{children:"createLightNode()"})," function:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\n\n// Bootstrap node using static peers\nconst node = await createLightNode({\n bootstrapPeers: ["[PEER MULTIADDR]"],\n});\n'})}),"\n",(0,r.jsxs)(n.p,{children:["For example, consider a node that connects to two static peers on the same local host (IP: ",(0,r.jsx)(n.code,{children:"0.0.0.0"}),") using TCP ports ",(0,r.jsx)(n.code,{children:"60002"})," and ",(0,r.jsx)(n.code,{children:"60003"})," with WebSocket enabled:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'// Define the list of static peers to bootstrap\nconst peers = [\n "/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H",\n "/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ",\n];\n\n// Bootstrap node using the static peers\nconst node = await createLightNode({\n bootstrapPeers: peers,\n});\n'})}),"\n",(0,r.jsx)(n.p,{children:"Alternatively, you can dial a particular node like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'// Define the list of static peers to bootstrap\nconst peers = [\n "/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H",\n "/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ",\n];\n\nconst node = await createLightNode();\n\n// In case nodes are using IP address and / or `ws` protocol - additional configuration is needed:\n/*\nconst node = await createLightNode({\n\tlibp2p: {\n\t\tfilterMultiaddrs: false,\n\t},\n});\n*/\n\nconst promises = peers.map((multiaddr) => node.dial(multiaddr));\n\nawait Promise.all(promises);\n'})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["For local development using a ",(0,r.jsx)(n.code,{children:"nwaku"})," node, use a ",(0,r.jsx)(n.code,{children:"ws"})," address instead of ",(0,r.jsx)(n.code,{children:"wss"}),". Remember that this setup is functional only when your web server is running locally. You can check how to get multi address of your locally run node in ",(0,r.jsx)(n.a,{href:"/run-node/find-node-address",children:"Find node address"}),"."]})}),"\n",(0,r.jsx)(n.h2,{id:"configure-dns-discovery",children:"Configure DNS discovery"}),"\n",(0,r.jsxs)(n.p,{children:["To bootstrap a node using ",(0,r.jsx)(n.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"}),", first install the ",(0,r.jsx)(n.code,{children:"@waku/dns-discovery"})," package:"]}),"\n",(0,r.jsxs)(i.A,{groupId:"package-manager",children:[(0,r.jsx)(a.A,{value:"npm",label:"NPM",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"npm install @waku/dns-discovery\n"})})}),(0,r.jsx)(a.A,{value:"yarn",label:"Yarn",children:(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"yarn add @waku/dns-discovery\n"})})})]}),"\n",(0,r.jsxs)(n.p,{children:["Then, use the ",(0,r.jsx)(n.code,{children:"wakuDnsDiscovery()"})," function to provide a list of URLs for DNS node list in the format ",(0,r.jsx)(n.code,{children:"enrtree://@"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\nimport { wakuDnsDiscovery } from "@waku/dns-discovery";\n\n// Define DNS node list\nconst enrTree = "enrtree://[PUBLIC KEY]@[DOMAIN NAME]";\n\n// Define node requirements\nconst NODE_REQUIREMENTS = {\n store: 3,\n lightPush: 3,\n filter: 3,\n};\n\n// Bootstrap node using DNS Discovery\nconst node = await createLightNode({\n libp2p: {\n peerDiscovery: [wakuDnsDiscovery([enrTree], NODE_REQUIREMENTS)],\n },\n});\n'})}),"\n",(0,r.jsxs)(n.p,{children:["For example, consider a node that uses the ",(0,r.jsx)(n.code,{children:"waku v2.prod"})," and ",(0,r.jsx)(n.code,{children:"waku v2.test"})," ",(0,r.jsx)(n.code,{children:"ENR"})," trees for ",(0,r.jsx)(n.code,{children:"DNS Discovery"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { enrTree } from "@waku/dns-discovery";\n\n// Bootstrap node using DNS Discovery\nconst node = await createLightNode({\n libp2p: {\n peerDiscovery: [\n wakuDnsDiscovery([enrTree["PROD"], enrTree["TEST"]], NODE_REQUIREMENTS),\n ],\n },\n});\n'})}),"\n",(0,r.jsx)(n.h2,{id:"configure-dns-discovery-and-static-peers",children:"Configure DNS discovery and static peers"}),"\n",(0,r.jsxs)(n.p,{children:["You can also bootstrap your node using ",(0,r.jsx)(n.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"})," and ",(0,r.jsx)(n.a,{href:"/learn/concepts/static-peers",children:"Static Peers"})," simultaneously:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\nimport { bootstrap } from "@libp2p/bootstrap";\nimport { enrTree, wakuDnsDiscovery } from "@waku/dns-discovery";\n\n// Define the list of static peers to bootstrap\nconst peers = [\n "/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H",\n "/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ",\n];\n\n// Define node requirements\nconst NODE_REQUIREMENTS = {\n store: 3,\n lightPush: 3,\n filter: 3,\n};\n\n// Bootstrap node using DNS Discovery and static peers\nconst node = await createLightNode({\n libp2p: {\n bootstrapPeers: peers,\n peerDiscovery: [wakuDnsDiscovery([enrTree["PROD"]], NODE_REQUIREMENTS)],\n },\n});\n'})}),"\n",(0,r.jsx)(n.h2,{id:"retrieving-connected-peers",children:"Retrieving connected peers"}),"\n",(0,r.jsxs)(n.p,{children:["You can retrieve the array of peers connected to a node using the ",(0,r.jsx)(n.code,{children:"libp2p.getPeers()"})," function within the ",(0,r.jsx)(n.code,{children:"@waku/sdk"})," package:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:'import { createLightNode } from "@waku/sdk";\n\nconst node = await createLightNode({ defaultBootstrap: true });\nawait node.waitForPeers();\n\n// Retrieve array of peers connected to the node\nconsole.log(node.libp2p.getPeers());\n'})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}}}]); \ No newline at end of file diff --git a/assets/js/2821.86a1cfcc.js b/assets/js/2821.86a1cfcc.js new file mode 100644 index 0000000..c2356be --- /dev/null +++ b/assets/js/2821.86a1cfcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2821],{21152:(e,t,a)=>{a.d(t,{P:()=>r});var l=a(67633),s=a(40797),r=(0,s.K2)((e,t,a,r)=>{e.attr("class",a);const{width:o,height:c,x:d,y:p}=n(e,t);(0,l.a$)(e,c,o,r);const h=i(d,p,o,c,t);e.attr("viewBox",h),s.Rm.debug(`viewBox configured: ${h} with padding: ${t}`)},"setupViewPortForSVG"),n=(0,s.K2)((e,t)=>{const a=e.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:a.width+2*t,height:a.height+2*t,x:a.x,y:a.y}},"calculateDimensionsWithPadding"),i=(0,s.K2)((e,t,a,l,s)=>`${e-s} ${t-s} ${a} ${l}`,"createViewBox")},25871:(e,t,a)=>{function l(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}a.d(t,{S:()=>l}),(0,a(40797).K2)(l,"populateCommonDb")},82821:(e,t,a)=>{a.d(t,{diagram:()=>v});var l=a(73590),s=a(21152),r=a(32387),n=a(25871),i=a(13226),o=a(67633),c=a(40797),d=a(78731),p=a(70451),h=class{constructor(){this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.setAccTitle=o.SV,this.getAccTitle=o.iN,this.setDiagramTitle=o.ke,this.getDiagramTitle=o.ab,this.getAccDescription=o.m7,this.setAccDescription=o.EI}static{(0,c.K2)(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){const e=o.UI,t=(0,o.zj)();return(0,i.$t)({...e.treemap,...t.treemap??{}})}addNode(e,t){this.nodes.push(e),this.levels.set(e,t),0===t&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,t){const a=this.classes.get(e)??{id:e,styles:[],textStyles:[]},l=t.replace(/\\,/g,"\xa7\xa7\xa7").replace(/,/g,";").replace(/\xa7\xa7\xa7/g,",").split(";");l&&l.forEach(e=>{(0,r.KX)(e)&&(a?.textStyles?a.textStyles.push(e):a.textStyles=[e]),a?.styles?a.styles.push(e):a.styles=[e]}),this.classes.set(e,a)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){(0,o.IU)(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}};function m(e){if(!e.length)return[];const t=[],a=[];return e.forEach(e=>{const l={name:e.name,children:"Leaf"===e.type?void 0:[]};for(l.classSelector=e?.classSelector,e?.cssCompiledStyles&&(l.cssCompiledStyles=[e.cssCompiledStyles]),"Leaf"===e.type&&void 0!==e.value&&(l.value=e.value);a.length>0&&a[a.length-1].level>=e.level;)a.pop();if(0===a.length)t.push(l);else{const e=a[a.length-1].node;e.children?e.children.push(l):e.children=[l]}"Leaf"!==e.type&&a.push({node:l,level:e.level})}),t}(0,c.K2)(m,"buildHierarchy");var y=(0,c.K2)((e,t)=>{(0,n.S)(e,t);const a=[];for(const r of e.TreemapRows??[])"ClassDefStatement"===r.$type&&t.addClass(r.className??"",r.styleText??"");for(const r of e.TreemapRows??[]){const e=r.item;if(!e)continue;const l=r.indent?parseInt(r.indent):0,s=u(e),n=e.classSelector?t.getStylesForClass(e.classSelector):[],i=n.length>0?n.join(";"):void 0,o={level:l,name:s,type:e.$type,value:e.value,classSelector:e.classSelector,cssCompiledStyles:i};a.push(o)}const l=m(a),s=(0,c.K2)((e,a)=>{for(const l of e)t.addNode(l,a),l.children&&l.children.length>0&&s(l.children,a+1)},"addNodesRecursively");s(l,0)},"populate"),u=(0,c.K2)(e=>e.name?String(e.name):"","getItemName"),f={parser:{yy:void 0},parse:(0,c.K2)(async e=>{try{const t=d.qg,a=await t("treemap",e);c.Rm.debug("Treemap AST:",a);const l=f.parser?.yy;if(!(l instanceof h))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");y(a,l)}catch(t){throw c.Rm.error("Error parsing treemap:",t),t}},"parse")},g=10,S={draw:(0,c.K2)((e,t,a,n)=>{const i=n.db,d=i.getConfig(),h=d.padding??10,m=i.getDiagramTitle(),y=i.getRoot(),{themeVariables:u}=(0,o.zj)();if(!y)return;const f=m?30:0,S=(0,l.D)(t),x=d.nodeWidth?d.nodeWidth*g:960,b=d.nodeHeight?d.nodeHeight*g:500,v=x,$=b+f;let w;S.attr("viewBox",`0 0 ${v} ${$}`),(0,o.a$)(S,$,v,d.useMaxWidth);try{const e=d.valueFormat||",";if("$0,0"===e)w=(0,c.K2)(e=>"$"+(0,p.GPZ)(",")(e),"valueFormat");else if(e.startsWith("$")&&e.includes(",")){const t=/\.\d+/.exec(e),a=t?t[0]:"";w=(0,c.K2)(e=>"$"+(0,p.GPZ)(","+a)(e),"valueFormat")}else if(e.startsWith("$")){const t=e.substring(1);w=(0,c.K2)(e=>"$"+(0,p.GPZ)(t||"")(e),"valueFormat")}else w=(0,p.GPZ)(e)}catch(G){c.Rm.error("Error creating format function:",G),w=(0,p.GPZ)(",")}const C=(0,p.UMr)().range(["transparent",u.cScale0,u.cScale1,u.cScale2,u.cScale3,u.cScale4,u.cScale5,u.cScale6,u.cScale7,u.cScale8,u.cScale9,u.cScale10,u.cScale11]),k=(0,p.UMr)().range(["transparent",u.cScalePeer0,u.cScalePeer1,u.cScalePeer2,u.cScalePeer3,u.cScalePeer4,u.cScalePeer5,u.cScalePeer6,u.cScalePeer7,u.cScalePeer8,u.cScalePeer9,u.cScalePeer10,u.cScalePeer11]),L=(0,p.UMr)().range([u.cScaleLabel0,u.cScaleLabel1,u.cScaleLabel2,u.cScaleLabel3,u.cScaleLabel4,u.cScaleLabel5,u.cScaleLabel6,u.cScaleLabel7,u.cScaleLabel8,u.cScaleLabel9,u.cScaleLabel10,u.cScaleLabel11]);m&&S.append("text").attr("x",v/2).attr("y",f/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(m);const T=S.append("g").attr("transform",`translate(0, ${f})`).attr("class","treemapContainer"),M=(0,p.Sk5)(y).sum(e=>e.value??0).sort((e,t)=>(t.value??0)-(e.value??0)),P=(0,p.hkb)().size([x,b]).paddingTop(e=>e.children&&e.children.length>0?35:0).paddingInner(h).paddingLeft(e=>e.children&&e.children.length>0?g:0).paddingRight(e=>e.children&&e.children.length>0?g:0).paddingBottom(e=>e.children&&e.children.length>0?g:0).round(!0)(M),z=P.descendants().filter(e=>e.children&&e.children.length>0),F=T.selectAll(".treemapSection").data(z).enter().append("g").attr("class","treemapSection").attr("transform",e=>`translate(${e.x0},${e.y0})`);F.append("rect").attr("width",e=>e.x1-e.x0).attr("height",25).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",e=>0===e.depth?"display: none;":""),F.append("clipPath").attr("id",(e,a)=>`clip-section-${t}-${a}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-12)).attr("height",25),F.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class",(e,t)=>`treemapSection section${t}`).attr("fill",e=>C(e.data.name)).attr("fill-opacity",.6).attr("stroke",e=>k(e.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",e=>{if(0===e.depth)return"display: none;";const t=(0,r.GX)({cssCompiledStyles:e.data.cssCompiledStyles});return t.nodeStyles+";"+t.borderStyles.join(";")}),F.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",12.5).attr("dominant-baseline","middle").text(e=>0===e.depth?"":e.data.name).attr("font-weight","bold").attr("style",e=>{if(0===e.depth)return"display: none;";return"dominant-baseline: middle; font-size: 12px; fill:"+L(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"+(0,r.GX)({cssCompiledStyles:e.data.cssCompiledStyles}).labelStyles.replace("color:","fill:")}).each(function(e){if(0===e.depth)return;const t=(0,p.Ltv)(this),a=e.data.name;t.text(a);const l=e.x1-e.x0;let s;if(!1!==d.showValues&&e.value){s=l-10-30-10-6}else{s=l-6-6}const r=Math.max(15,s),n=t.node();if(n.getComputedTextLength()>r){const e="...";let l=a;for(;l.length>0;){if(l=a.substring(0,l.length-1),0===l.length){t.text(e),n.getComputedTextLength()>r&&t.text("");break}if(t.text(l+e),n.getComputedTextLength()<=r)break}}}),!1!==d.showValues&&F.append("text").attr("class","treemapSectionValue").attr("x",e=>e.x1-e.x0-10).attr("y",12.5).attr("text-anchor","end").attr("dominant-baseline","middle").text(e=>e.value?w(e.value):"").attr("font-style","italic").attr("style",e=>{if(0===e.depth)return"display: none;";return"text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+L(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"+(0,r.GX)({cssCompiledStyles:e.data.cssCompiledStyles}).labelStyles.replace("color:","fill:")});const K=P.leaves(),D=T.selectAll(".treemapLeafGroup").data(K).enter().append("g").attr("class",(e,t)=>`treemapNode treemapLeafGroup leaf${t}${e.data.classSelector?` ${e.data.classSelector}`:""}x`).attr("transform",e=>`translate(${e.x0},${e.y0})`);D.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class","treemapLeaf").attr("fill",e=>e.parent?C(e.parent.data.name):C(e.data.name)).attr("style",e=>(0,r.GX)({cssCompiledStyles:e.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",e=>e.parent?C(e.parent.data.name):C(e.data.name)).attr("stroke-width",3),D.append("clipPath").attr("id",(e,a)=>`clip-${t}-${a}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-4)).attr("height",e=>Math.max(0,e.y1-e.y0-4));if(D.append("text").attr("class","treemapLabel").attr("x",e=>(e.x1-e.x0)/2).attr("y",e=>(e.y1-e.y0)/2).attr("style",e=>"text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+L(e.data.name)+";"+(0,r.GX)({cssCompiledStyles:e.data.cssCompiledStyles}).labelStyles.replace("color:","fill:")).attr("clip-path",(e,a)=>`url(#clip-${t}-${a})`).text(e=>e.data.name).each(function(e){const t=(0,p.Ltv)(this),a=e.x1-e.x0,l=e.y1-e.y0,s=t.node(),r=a-8,n=l-8;if(r<10||n<10)return void t.style("display","none");let i=parseInt(t.style("font-size"),10);for(;s.getComputedTextLength()>r&&i>8;)i--,t.style("font-size",`${i}px`);let o=Math.max(6,Math.min(28,Math.round(.6*i))),c=i+2+o;for(;c>n&&i>8&&(i--,o=Math.max(6,Math.min(28,Math.round(.6*i))),!(o<6&&8===i));)t.style("font-size",`${i}px`),c=i+2+o;t.style("font-size",`${i}px`),(s.getComputedTextLength()>r||i<8||n(e.x1-e.x0)/2).attr("y",function(e){return(e.y1-e.y0)/2}).attr("style",e=>"text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+L(e.data.name)+";"+(0,r.GX)({cssCompiledStyles:e.data.cssCompiledStyles}).labelStyles.replace("color:","fill:")).attr("clip-path",(e,a)=>`url(#clip-${t}-${a})`).text(e=>e.value?w(e.value):"").each(function(e){const t=(0,p.Ltv)(this),a=this.parentNode;if(!a)return void t.style("display","none");const l=(0,p.Ltv)(a).select(".treemapLabel");if(l.empty()||"none"===l.style("display"))return void t.style("display","none");const s=parseFloat(l.style("font-size")),r=Math.max(6,Math.min(28,Math.round(.6*s)));t.style("font-size",`${r}px`);const n=(e.y1-e.y0)/2+s/2+2;t.attr("y",n);const i=e.x1-e.x0,o=e.y1-e.y0-4,c=i-8;t.node().getComputedTextLength()>c||n+r>o||r<6?t.style("display","none"):t.style("display",null)})}const N=d.diagramPadding??8;(0,s.P)(S,N,"flowchart",d?.useMaxWidth||!1)},"draw"),getClasses:(0,c.K2)(function(e,t){return t.db.getClasses()},"getClasses")},x={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelColor:"black",labelFontSize:"12px",valueFontSize:"10px",valueColor:"black",titleColor:"black",titleFontSize:"14px"},b=(0,c.K2)(({treemap:e}={})=>{const t=(0,i.$t)(x,e);return`\n .treemapNode.section {\n stroke: ${t.sectionStrokeColor};\n stroke-width: ${t.sectionStrokeWidth};\n fill: ${t.sectionFillColor};\n }\n .treemapNode.leaf {\n stroke: ${t.leafStrokeColor};\n stroke-width: ${t.leafStrokeWidth};\n fill: ${t.leafFillColor};\n }\n .treemapLabel {\n fill: ${t.labelColor};\n font-size: ${t.labelFontSize};\n }\n .treemapValue {\n fill: ${t.valueColor};\n font-size: ${t.valueFontSize};\n }\n .treemapTitle {\n fill: ${t.titleColor};\n font-size: ${t.titleFontSize};\n }\n `},"getStyles"),v={parser:f,get db(){return new h},renderer:S,styles:b}}}]); \ No newline at end of file diff --git a/assets/js/2822.a8981788.js b/assets/js/2822.a8981788.js deleted file mode 100644 index d4d50c6..0000000 --- a/assets/js/2822.a8981788.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2822],{24651:(t,e,s)=>{s.d(e,{o:()=>i});var i=(0,s(41750).K2)(()=>"\n /* Font Awesome icon styling - consolidated */\n .label-icon {\n display: inline-block;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n \n .node .label-icon path {\n fill: currentColor;\n stroke: revert;\n stroke-width: revert;\n }\n","getIconStyles")},44540:(t,e,s)=>{s.d(e,{A:()=>r});var i=s(41750),n=s(70451),r=(0,i.K2)((t,e)=>{let s;"sandbox"===e&&(s=(0,n.Ltv)("#i"+t));return("sandbox"===e?(0,n.Ltv)(s.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id="${t}"]`)},"getDiagramElement")},72822:(t,e,s)=>{s.d(e,{diagram:()=>D});var i=s(24651),n=s(29026),r=s(44540),a=s(98833),u=s(45020),o=(s(51789),s(30070),s(66906)),l=(s(28823),s(55683),s(68506),s(46792)),c=s(41750),h=s(70451),d=s(25582),p=s(75937),g=class{constructor(){this.vertexCounter=0,this.config=(0,c.D7)(),this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCount=-1,this.posCrossRef=[],this.funs=[],this.setAccTitle=c.SV,this.setAccDescription=c.EI,this.setDiagramTitle=c.ke,this.getAccTitle=c.iN,this.getAccDescription=c.m7,this.getDiagramTitle=c.ab,this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{(0,c.K2)(this,"FlowDB")}sanitizeText(t){return c.Y2.sanitizeText(t,this.config)}lookUpDomId(t){for(const e of this.vertices.values())if(e.id===t)return e.domId;return t}addVertex(t,e,s,i,r,a,u={},l){if(!t||0===t.trim().length)return;let h;if(void 0!==l){let t;t=l.includes("\n")?l+"\n":"{\n"+l+"\n}",h=(0,n.H)(t,{schema:n.r})}const d=this.edges.find(e=>e.id===t);if(d){const t=h;return void 0!==t?.animate&&(d.animate=t.animate),void(void 0!==t?.animation&&(d.animation=t.animation))}let p,g=this.vertices.get(t);if(void 0===g&&(g={id:t,labelType:"text",domId:"flowchart-"+t+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(t,g)),this.vertexCounter++,void 0!==e?(this.config=(0,c.D7)(),p=this.sanitizeText(e.text.trim()),g.labelType=e.type,p.startsWith('"')&&p.endsWith('"')&&(p=p.substring(1,p.length-1)),g.text=p):void 0===g.text&&(g.text=t),void 0!==s&&(g.type=s),null!=i&&i.forEach(t=>{g.styles.push(t)}),null!=r&&r.forEach(t=>{g.classes.push(t)}),void 0!==a&&(g.dir=a),void 0===g.props?g.props=u:void 0!==u&&Object.assign(g.props,u),void 0!==h){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!(0,o.aP)(h.shape))throw new Error(`No such shape: ${h.shape}.`);g.type=h?.shape}h?.label&&(g.text=h?.label),h?.icon&&(g.icon=h?.icon,h.label?.trim()||g.text!==t||(g.text="")),h?.form&&(g.form=h?.form),h?.pos&&(g.pos=h?.pos),h?.img&&(g.img=h?.img,h.label?.trim()||g.text!==t||(g.text="")),h?.constraint&&(g.constraint=h.constraint),h.w&&(g.assetWidth=Number(h.w)),h.h&&(g.assetHeight=Number(h.h))}}addSingleLink(t,e,s,i){const n={start:t,end:e,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};c.Rm.info("abc78 Got edge...",n);const r=s.text;if(void 0!==r&&(n.text=this.sanitizeText(r.text.trim()),n.text.startsWith('"')&&n.text.endsWith('"')&&(n.text=n.text.substring(1,n.text.length-1)),n.labelType=r.type),void 0!==s&&(n.type=s.type,n.stroke=s.stroke,n.length=s.length>10?10:s.length),i&&!this.edges.some(t=>t.id===i))n.id=i,n.isUserDefinedId=!0;else{const t=this.edges.filter(t=>t.start===n.start&&t.end===n.end);0===t.length?n.id=(0,l.rY)(n.start,n.end,{counter:0,prefix:"L"}):n.id=(0,l.rY)(n.start,n.end,{counter:t.length+1,prefix:"L"})}if(!(this.edges.length<(this.config.maxEdges??500)))throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`);c.Rm.info("Pushing edge..."),this.edges.push(n)}isLinkData(t){return null!==t&&"object"==typeof t&&"id"in t&&"string"==typeof t.id}addLink(t,e,s){const i=this.isLinkData(s)?s.id.replace("@",""):void 0;c.Rm.info("addLink",t,e,i);for(const n of t)for(const r of e){const a=n===t[t.length-1],u=r===e[0];a&&u?this.addSingleLink(n,r,s,i):this.addSingleLink(n,r,s,void 0)}}updateLinkInterpolate(t,e){t.forEach(t=>{"default"===t?this.edges.defaultInterpolate=e:this.edges[t].interpolate=e})}updateLink(t,e){t.forEach(t=>{if("number"==typeof t&&t>=this.edges.length)throw new Error(`The index ${t} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);"default"===t?this.edges.defaultStyle=e:(this.edges[t].style=e,(this.edges[t]?.style?.length??0)>0&&!this.edges[t]?.style?.some(t=>t?.startsWith("fill"))&&this.edges[t]?.style?.push("fill:none"))})}addClass(t,e){const s=e.join().replace(/\\,/g,"\xa7\xa7\xa7").replace(/,/g,";").replace(/\xa7\xa7\xa7/g,",").split(";");t.split(",").forEach(t=>{let e=this.classes.get(t);void 0===e&&(e={id:t,styles:[],textStyles:[]},this.classes.set(t,e)),null!=s&&s.forEach(t=>{if(/color/.exec(t)){const s=t.replace("fill","bgFill");e.textStyles.push(s)}e.styles.push(t)})})}setDirection(t){this.direction=t,/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),"TD"===this.direction&&(this.direction="TB")}setClass(t,e){for(const s of t.split(",")){const t=this.vertices.get(s);t&&t.classes.push(e);const i=this.edges.find(t=>t.id===s);i&&i.classes.push(e);const n=this.subGraphLookup.get(s);n&&n.classes.push(e)}}setTooltip(t,e){if(void 0!==e){e=this.sanitizeText(e);for(const s of t.split(","))this.tooltips.set("gen-1"===this.version?this.lookUpDomId(s):s,e)}}setClickFun(t,e,s){const i=this.lookUpDomId(t);if("loose"!==(0,c.D7)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t{const t=document.querySelector(`[id="${i}"]`);null!==t&&t.addEventListener("click",()=>{l._K.runFunc(e,...n)},!1)}))}setLink(t,e,s){t.split(",").forEach(t=>{const i=this.vertices.get(t);void 0!==i&&(i.link=l._K.formatUrl(e,this.config),i.linkTarget=s)}),this.setClass(t,"clickable")}getTooltip(t){return this.tooltips.get(t)}setClickEvent(t,e,s){t.split(",").forEach(t=>{this.setClickFun(t,e,s)}),this.setClass(t,"clickable")}bindFunctions(t){this.funs.forEach(e=>{e(t)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(t){let e=(0,h.Ltv)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,h.Ltv)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,h.Ltv)(t).select("svg").selectAll("g.node").on("mouseover",t=>{const s=(0,h.Ltv)(t.currentTarget);if(null===s.attr("title"))return;const i=t.currentTarget?.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(s.attr("title")).style("left",window.scrollX+i.left+(i.right-i.left)/2+"px").style("top",window.scrollY+i.bottom+"px"),e.html(e.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",t=>{e.transition().duration(500).style("opacity",0);(0,h.Ltv)(t.currentTarget).classed("hover",!1)})}clear(t="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=t,this.config=(0,c.D7)(),(0,c.IU)()}setGen(t){this.version=t||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(t,e,s){let i=t.text.trim(),n=s.text;t===s&&/\s/.exec(s.text)&&(i=void 0);const r=(0,c.K2)(t=>{const e={boolean:{},number:{},string:{}},s=[];let i;return{nodeList:t.filter(function(t){const n=typeof t;return t.stmt&&"dir"===t.stmt?(i=t.value,!1):""!==t.trim()&&(n in e?!e[n].hasOwnProperty(t)&&(e[n][t]=!0):!s.includes(t)&&s.push(t))}),dir:i}},"uniq")(e.flat()),a=r.nodeList;let u=r.dir;const o=(0,c.D7)().flowchart??{};if(u=u??(o.inheritDir?this.getDirection()??(0,c.D7)().direction??void 0:void 0),"gen-1"===this.version)for(let c=0;c2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=e,this.subGraphs[e].id===t)return{result:!0,count:0};let i=0,n=1;for(;i=0){const s=this.indexNodes2(t,e);if(s.result)return{result:!0,count:n+s.count};n+=s.count}i+=1}return{result:!1,count:n}}getDepthFirstPos(t){return this.posCrossRef[t]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return!!this.firstGraphFlag&&(this.firstGraphFlag=!1,!0)}destructStartLink(t){let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let i="normal";return e.includes("=")&&(i="thick"),e.includes(".")&&(i="dotted"),{type:s,stroke:i}}countChar(t,e){const s=e.length;let i=0;for(let n=0;n":i="arrow_point",e.startsWith("<")&&(i="double_"+i,s=s.slice(1));break;case"o":i="arrow_circle",e.startsWith("o")&&(i="double_"+i,s=s.slice(1))}let n="normal",r=s.length-1;s.startsWith("=")&&(n="thick"),s.startsWith("~")&&(n="invisible");const a=this.countChar(".",s);return a&&(n="dotted",r=a),{type:i,stroke:n,length:r}}destructLink(t,e){const s=this.destructEndLink(t);let i;if(e){if(i=this.destructStartLink(e),i.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===i.type)i.type=s.type;else{if(i.type!==s.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return"double_arrow"===i.type&&(i.type="double_arrow_point"),i.length=s.length,i}return s}exists(t,e){for(const s of t)if(s.nodes.includes(e))return!0;return!1}makeUniq(t,e){const s=[];return t.nodes.forEach((i,n)=>{this.exists(e,i)||s.push(t.nodes[n])}),{nodes:s}}getTypeFromVertex(t){if(t.img)return"imageSquare";if(t.icon)return"circle"===t.form?"iconCircle":"square"===t.form?"iconSquare":"rounded"===t.form?"iconRounded":"icon";switch(t.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return t.type}}findNode(t,e){return t.find(t=>t.id===e)}destructEdgeType(t){let e="none",s="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":s=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":e=t.replace("double_",""),s=e}return{arrowTypeStart:e,arrowTypeEnd:s}}addNodeFromVertex(t,e,s,i,n,r){const a=s.get(t.id),u=i.get(t.id)??!1,o=this.findNode(e,t.id);if(o)o.cssStyles=t.styles,o.cssCompiledStyles=this.getCompiledStyles(t.classes),o.cssClasses=t.classes.join(" ");else{const s={id:t.id,label:t.text,labelStyle:"",parentId:a,padding:n.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),dir:t.dir,domId:t.domId,look:r,link:t.link,linkTarget:t.linkTarget,tooltip:this.getTooltip(t.id),icon:t.icon,pos:t.pos,img:t.img,assetWidth:t.assetWidth,assetHeight:t.assetHeight,constraint:t.constraint};u?e.push({...s,isGroup:!0,shape:"rect"}):e.push({...s,isGroup:!1,shape:this.getTypeFromVertex(t)})}}getCompiledStyles(t){let e=[];for(const s of t){const t=this.classes.get(s);t?.styles&&(e=[...e,...t.styles??[]].map(t=>t.trim())),t?.textStyles&&(e=[...e,...t.textStyles??[]].map(t=>t.trim()))}return e}getData(){const t=(0,c.D7)(),e=[],s=[],i=this.getSubGraphs(),n=new Map,r=new Map;for(let u=i.length-1;u>=0;u--){const t=i[u];t.nodes.length>0&&r.set(t.id,!0);for(const e of t.nodes)n.set(e,t.id)}for(let u=i.length-1;u>=0;u--){const s=i[u];e.push({id:s.id,label:s.title,labelStyle:"",parentId:n.get(s.id),padding:8,cssCompiledStyles:this.getCompiledStyles(s.classes),cssClasses:s.classes.join(" "),shape:"rect",dir:s.dir,isGroup:!0,look:t.look})}this.getVertices().forEach(s=>{this.addNodeFromVertex(s,e,n,r,t,t.look||"classic")});const a=this.getEdges();return a.forEach((e,i)=>{const{arrowTypeStart:n,arrowTypeEnd:r}=this.destructEdgeType(e.type),u=[...a.defaultStyle??[]];e.style&&u.push(...e.style);const o={id:(0,l.rY)(e.start,e.end,{counter:i,prefix:"L"},e.id),isUserDefinedId:e.isUserDefinedId,start:e.start,end:e.end,type:e.type??"normal",label:e.text,labelpos:"c",thickness:e.stroke,minlen:e.length,classes:"invisible"===e?.stroke?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:"invisible"===e?.stroke||"arrow_open"===e?.type?"none":n,arrowTypeEnd:"invisible"===e?.stroke||"arrow_open"===e?.type?"none":r,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(e.classes),labelStyle:u,style:u,pattern:e.stroke,look:t.look,animate:e.animate,animation:e.animation,curve:e.interpolate||this.edges.defaultInterpolate||t.flowchart?.curve};s.push(o)}),{nodes:e,edges:s,other:{},config:t}}defaultConfig(){return c.ME.flowchart}},A={getClasses:(0,c.K2)(function(t,e){return e.db.getClasses()},"getClasses"),draw:(0,c.K2)(async function(t,e,s,i){c.Rm.info("REF0:"),c.Rm.info("Drawing state diagram (v2)",e);const{securityLevel:n,flowchart:o,layout:d}=(0,c.D7)();let p;"sandbox"===n&&(p=(0,h.Ltv)("#i"+e));const g="sandbox"===n?p.nodes()[0].contentDocument:document;c.Rm.debug("Before getData: ");const A=i.db.getData();c.Rm.debug("Data: ",A);const b=(0,r.A)(e,n),y=i.db.getDirection();A.type=i.type,A.layoutAlgorithm=(0,u.q7)(d),"dagre"===A.layoutAlgorithm&&"elk"===d&&c.Rm.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),A.direction=y,A.nodeSpacing=o?.nodeSpacing||50,A.rankSpacing=o?.rankSpacing||50,A.markers=["point","circle","cross"],A.diagramId=e,c.Rm.debug("REF1:",A),await(0,u.XX)(A,b);const k=A.config.flowchart?.diagramPadding??8;l._K.insertTitle(b,"flowchartTitleText",o?.titleTopMargin||0,i.db.getDiagramTitle()),(0,a.P)(b,k,"flowchart",o?.useMaxWidth||!1);for(const r of A.nodes){const t=(0,h.Ltv)(`#${e} [id="${r.id}"]`);if(!t||!r.link)continue;const s=g.createElementNS("http://www.w3.org/2000/svg","a");s.setAttributeNS("http://www.w3.org/2000/svg","class",r.cssClasses),s.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===n?s.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):r.linkTarget&&s.setAttributeNS("http://www.w3.org/2000/svg","target",r.linkTarget);const i=t.insert(function(){return s},":first-child"),a=t.select(".label-container");a&&i.append(function(){return a.node()});const u=t.select(".label");u&&i.append(function(){return u.node()})}},"draw")},b=function(){var t=(0,c.K2)(function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},"o"),e=[1,4],s=[1,3],i=[1,5],n=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],r=[2,2],a=[1,13],u=[1,14],o=[1,15],l=[1,16],h=[1,23],d=[1,25],p=[1,26],g=[1,27],A=[1,49],b=[1,48],y=[1,29],k=[1,30],f=[1,31],m=[1,32],E=[1,33],D=[1,44],C=[1,46],x=[1,42],T=[1,47],S=[1,43],F=[1,50],_=[1,45],v=[1,51],B=[1,52],w=[1,34],L=[1,35],$=[1,36],I=[1,37],R=[1,57],N=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],P=[1,61],K=[1,60],G=[1,62],O=[8,9,11,75,77,78],V=[1,78],M=[1,91],U=[1,96],W=[1,95],Y=[1,92],j=[1,88],z=[1,94],X=[1,90],H=[1,97],q=[1,93],Q=[1,98],Z=[1,89],J=[8,9,10,11,40,75,77,78],tt=[8,9,10,11,40,46,75,77,78],et=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],st=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],it=[44,60,89,102,105,106,109,111,114,115,116],nt=[1,121],rt=[1,122],at=[1,124],ut=[1,123],ot=[44,60,62,74,89,102,105,106,109,111,114,115,116],lt=[1,133],ct=[1,147],ht=[1,148],dt=[1,149],pt=[1,150],gt=[1,135],At=[1,137],bt=[1,141],yt=[1,142],kt=[1,143],ft=[1,144],mt=[1,145],Et=[1,146],Dt=[1,151],Ct=[1,152],xt=[1,131],Tt=[1,132],St=[1,139],Ft=[1,134],_t=[1,138],vt=[1,136],Bt=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],wt=[1,154],Lt=[1,156],$t=[8,9,11],It=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],Rt=[1,176],Nt=[1,172],Pt=[1,173],Kt=[1,177],Gt=[1,174],Ot=[1,175],Vt=[77,116,119],Mt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],Ut=[10,106],Wt=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],Yt=[1,247],jt=[1,245],zt=[1,249],Xt=[1,243],Ht=[1,244],qt=[1,246],Qt=[1,248],Zt=[1,250],Jt=[1,268],te=[8,9,11,106],ee=[8,9,10,11,60,84,105,106,109,110,111,112],se={trace:(0,c.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:(0,c.K2)(function(t,e,s,i,n,r,a){var u=r.length-1;switch(n){case 2:case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 3:(!Array.isArray(r[u])||r[u].length>0)&&r[u-1].push(r[u]),this.$=r[u-1];break;case 4:case 183:case 44:case 54:case 76:case 181:this.$=r[u];break;case 11:i.setDirection("TB"),this.$="TB";break;case 12:i.setDirection(r[u-1]),this.$=r[u-1];break;case 27:this.$=r[u-1].nodes;break;case 33:this.$=i.addSubGraph(r[u-6],r[u-1],r[u-4]);break;case 34:this.$=i.addSubGraph(r[u-3],r[u-1],r[u-3]);break;case 35:this.$=i.addSubGraph(void 0,r[u-1],void 0);break;case 37:this.$=r[u].trim(),i.setAccTitle(this.$);break;case 38:case 39:this.$=r[u].trim(),i.setAccDescription(this.$);break;case 43:case 133:this.$=r[u-1]+r[u];break;case 45:i.addVertex(r[u-1][r[u-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,r[u]),i.addLink(r[u-3].stmt,r[u-1],r[u-2]),this.$={stmt:r[u-1],nodes:r[u-1].concat(r[u-3].nodes)};break;case 46:i.addLink(r[u-2].stmt,r[u],r[u-1]),this.$={stmt:r[u],nodes:r[u].concat(r[u-2].nodes)};break;case 47:i.addLink(r[u-3].stmt,r[u-1],r[u-2]),this.$={stmt:r[u-1],nodes:r[u-1].concat(r[u-3].nodes)};break;case 48:this.$={stmt:r[u-1],nodes:r[u-1]};break;case 49:i.addVertex(r[u-1][r[u-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,r[u]),this.$={stmt:r[u-1],nodes:r[u-1],shapeData:r[u]};break;case 50:this.$={stmt:r[u],nodes:r[u]};break;case 51:case 128:case 130:this.$=[r[u]];break;case 52:i.addVertex(r[u-5][r[u-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,r[u-4]),this.$=r[u-5].concat(r[u]);break;case 53:this.$=r[u-4].concat(r[u]);break;case 55:this.$=r[u-2],i.setClass(r[u-2],r[u]);break;case 56:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"square");break;case 57:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"doublecircle");break;case 58:this.$=r[u-5],i.addVertex(r[u-5],r[u-2],"circle");break;case 59:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"ellipse");break;case 60:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"stadium");break;case 61:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"subroutine");break;case 62:this.$=r[u-7],i.addVertex(r[u-7],r[u-1],"rect",void 0,void 0,void 0,Object.fromEntries([[r[u-5],r[u-3]]]));break;case 63:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"cylinder");break;case 64:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"round");break;case 65:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"diamond");break;case 66:this.$=r[u-5],i.addVertex(r[u-5],r[u-2],"hexagon");break;case 67:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"odd");break;case 68:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"trapezoid");break;case 69:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"inv_trapezoid");break;case 70:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"lean_right");break;case 71:this.$=r[u-3],i.addVertex(r[u-3],r[u-1],"lean_left");break;case 72:this.$=r[u],i.addVertex(r[u]);break;case 73:r[u-1].text=r[u],this.$=r[u-1];break;case 74:case 75:r[u-2].text=r[u-1],this.$=r[u-2];break;case 77:var o=i.destructLink(r[u],r[u-2]);this.$={type:o.type,stroke:o.stroke,length:o.length,text:r[u-1]};break;case 78:o=i.destructLink(r[u],r[u-2]);this.$={type:o.type,stroke:o.stroke,length:o.length,text:r[u-1],id:r[u-3]};break;case 79:case 86:case 101:case 103:this.$={text:r[u],type:"text"};break;case 80:case 87:case 102:this.$={text:r[u-1].text+""+r[u],type:r[u-1].type};break;case 81:case 88:this.$={text:r[u],type:"string"};break;case 82:case 89:case 104:this.$={text:r[u],type:"markdown"};break;case 83:o=i.destructLink(r[u]);this.$={type:o.type,stroke:o.stroke,length:o.length};break;case 84:o=i.destructLink(r[u]);this.$={type:o.type,stroke:o.stroke,length:o.length,id:r[u-1]};break;case 85:this.$=r[u-1];break;case 105:this.$=r[u-4],i.addClass(r[u-2],r[u]);break;case 106:this.$=r[u-4],i.setClass(r[u-2],r[u]);break;case 107:case 115:this.$=r[u-1],i.setClickEvent(r[u-1],r[u]);break;case 108:case 116:this.$=r[u-3],i.setClickEvent(r[u-3],r[u-2]),i.setTooltip(r[u-3],r[u]);break;case 109:this.$=r[u-2],i.setClickEvent(r[u-2],r[u-1],r[u]);break;case 110:this.$=r[u-4],i.setClickEvent(r[u-4],r[u-3],r[u-2]),i.setTooltip(r[u-4],r[u]);break;case 111:this.$=r[u-2],i.setLink(r[u-2],r[u]);break;case 112:this.$=r[u-4],i.setLink(r[u-4],r[u-2]),i.setTooltip(r[u-4],r[u]);break;case 113:this.$=r[u-4],i.setLink(r[u-4],r[u-2],r[u]);break;case 114:this.$=r[u-6],i.setLink(r[u-6],r[u-4],r[u]),i.setTooltip(r[u-6],r[u-2]);break;case 117:this.$=r[u-1],i.setLink(r[u-1],r[u]);break;case 118:this.$=r[u-3],i.setLink(r[u-3],r[u-2]),i.setTooltip(r[u-3],r[u]);break;case 119:this.$=r[u-3],i.setLink(r[u-3],r[u-2],r[u]);break;case 120:this.$=r[u-5],i.setLink(r[u-5],r[u-4],r[u]),i.setTooltip(r[u-5],r[u-2]);break;case 121:this.$=r[u-4],i.addVertex(r[u-2],void 0,void 0,r[u]);break;case 122:this.$=r[u-4],i.updateLink([r[u-2]],r[u]);break;case 123:this.$=r[u-4],i.updateLink(r[u-2],r[u]);break;case 124:this.$=r[u-8],i.updateLinkInterpolate([r[u-6]],r[u-2]),i.updateLink([r[u-6]],r[u]);break;case 125:this.$=r[u-8],i.updateLinkInterpolate(r[u-6],r[u-2]),i.updateLink(r[u-6],r[u]);break;case 126:this.$=r[u-6],i.updateLinkInterpolate([r[u-4]],r[u]);break;case 127:this.$=r[u-6],i.updateLinkInterpolate(r[u-4],r[u]);break;case 129:case 131:r[u-2].push(r[u]),this.$=r[u-2];break;case 182:case 184:this.$=r[u-1]+""+r[u];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"}}},"anonymous"),table:[{3:1,4:2,9:e,10:s,12:i},{1:[3]},t(n,r,{5:6}),{4:7,9:e,10:s,12:i},{4:8,9:e,10:s,12:i},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:h,33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},t(n,[2,9]),t(n,[2,10]),t(n,[2,11]),{8:[1,54],9:[1,55],10:R,15:53,18:56},t(N,[2,3]),t(N,[2,4]),t(N,[2,5]),t(N,[2,6]),t(N,[2,7]),t(N,[2,8]),{8:P,9:K,11:G,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:P,9:K,11:G,21:67},{8:P,9:K,11:G,21:68},{8:P,9:K,11:G,21:69},{8:P,9:K,11:G,21:70},{8:P,9:K,11:G,21:71},{8:P,9:K,10:[1,72],11:G,21:73},t(N,[2,36]),{35:[1,74]},{37:[1,75]},t(N,[2,39]),t(O,[2,50],{18:76,39:77,10:R,40:V}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:M,44:U,60:W,80:[1,86],89:Y,95:[1,83],97:[1,84],101:85,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z,120:87},t(N,[2,185]),t(N,[2,186]),t(N,[2,187]),t(N,[2,188]),t(J,[2,51]),t(J,[2,54],{46:[1,99]}),t(tt,[2,72],{113:112,29:[1,100],44:A,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:b,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:D,102:C,105:x,106:T,109:S,111:F,114:_,115:v,116:B}),t(et,[2,181]),t(et,[2,142]),t(et,[2,143]),t(et,[2,144]),t(et,[2,145]),t(et,[2,146]),t(et,[2,147]),t(et,[2,148]),t(et,[2,149]),t(et,[2,150]),t(et,[2,151]),t(et,[2,152]),t(n,[2,12]),t(n,[2,18]),t(n,[2,19]),{9:[1,113]},t(st,[2,26],{18:114,10:R}),t(N,[2,27]),{42:115,43:38,44:A,45:39,47:40,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(it,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:nt,81:rt,116:at,119:ut},{75:[1,125],77:[1,126]},t(ot,[2,83]),t(N,[2,28]),t(N,[2,29]),t(N,[2,30]),t(N,[2,31]),t(N,[2,32]),{10:lt,12:ct,14:ht,27:dt,28:127,32:pt,44:gt,60:At,75:bt,80:[1,129],81:[1,130],83:140,84:yt,85:kt,86:ft,87:mt,88:Et,89:Dt,90:Ct,91:128,105:xt,109:Tt,111:St,114:Ft,115:_t,116:vt},t(Bt,r,{5:153}),t(N,[2,37]),t(N,[2,38]),t(O,[2,48],{44:wt}),t(O,[2,49],{18:155,10:R,40:Lt}),t(J,[2,44]),{44:A,47:157,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{102:[1,158],103:159,105:[1,160]},{44:A,47:161,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{44:A,47:162,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t($t,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t($t,[2,115],{120:167,10:[1,166],14:M,44:U,60:W,89:Y,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z}),t($t,[2,117],{10:[1,168]}),t(It,[2,183]),t(It,[2,170]),t(It,[2,171]),t(It,[2,172]),t(It,[2,173]),t(It,[2,174]),t(It,[2,175]),t(It,[2,176]),t(It,[2,177]),t(It,[2,178]),t(It,[2,179]),t(It,[2,180]),{44:A,47:169,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{30:170,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:178,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:180,50:[1,179],67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:181,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:182,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:183,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{109:[1,184]},{30:185,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:186,65:[1,187],67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:188,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:189,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{30:190,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},t(et,[2,182]),t(n,[2,20]),t(st,[2,25]),t(O,[2,46],{39:191,18:192,10:R,40:V}),t(it,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{77:[1,196],79:197,116:at,119:ut},t(Vt,[2,79]),t(Vt,[2,81]),t(Vt,[2,82]),t(Vt,[2,168]),t(Vt,[2,169]),{76:198,79:120,80:nt,81:rt,116:at,119:ut},t(ot,[2,84]),{8:P,9:K,10:lt,11:G,12:ct,14:ht,21:200,27:dt,29:[1,199],32:pt,44:gt,60:At,75:bt,83:140,84:yt,85:kt,86:ft,87:mt,88:Et,89:Dt,90:Ct,91:201,105:xt,109:Tt,111:St,114:Ft,115:_t,116:vt},t(Mt,[2,101]),t(Mt,[2,103]),t(Mt,[2,104]),t(Mt,[2,157]),t(Mt,[2,158]),t(Mt,[2,159]),t(Mt,[2,160]),t(Mt,[2,161]),t(Mt,[2,162]),t(Mt,[2,163]),t(Mt,[2,164]),t(Mt,[2,165]),t(Mt,[2,166]),t(Mt,[2,167]),t(Mt,[2,90]),t(Mt,[2,91]),t(Mt,[2,92]),t(Mt,[2,93]),t(Mt,[2,94]),t(Mt,[2,95]),t(Mt,[2,96]),t(Mt,[2,97]),t(Mt,[2,98]),t(Mt,[2,99]),t(Mt,[2,100]),{6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:h,32:[1,202],33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},{10:R,18:203},{44:[1,204]},t(J,[2,43]),{10:[1,205],44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:112,114:_,115:v,116:B},{10:[1,206]},{10:[1,207],106:[1,208]},t(Ut,[2,128]),{10:[1,209],44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:112,114:_,115:v,116:B},{10:[1,210],44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:112,114:_,115:v,116:B},{80:[1,211]},t($t,[2,109],{10:[1,212]}),t($t,[2,111],{10:[1,213]}),{80:[1,214]},t(It,[2,184]),{80:[1,215],98:[1,216]},t(J,[2,55],{113:112,44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,114:_,115:v,116:B}),{31:[1,217],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(Wt,[2,86]),t(Wt,[2,88]),t(Wt,[2,89]),t(Wt,[2,153]),t(Wt,[2,154]),t(Wt,[2,155]),t(Wt,[2,156]),{49:[1,219],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{30:220,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{51:[1,221],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{53:[1,222],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{55:[1,223],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{57:[1,224],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{60:[1,225]},{64:[1,226],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{66:[1,227],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{30:228,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},{31:[1,229],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{67:Rt,69:[1,230],71:[1,231],82:218,116:Kt,117:Gt,118:Ot},{67:Rt,69:[1,233],71:[1,232],82:218,116:Kt,117:Gt,118:Ot},t(O,[2,45],{18:155,10:R,40:Lt}),t(O,[2,47],{44:wt}),t(it,[2,75]),t(it,[2,74]),{62:[1,234],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(it,[2,77]),t(Vt,[2,80]),{77:[1,235],79:197,116:at,119:ut},{30:236,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},t(Bt,r,{5:237}),t(Mt,[2,102]),t(N,[2,35]),{43:238,44:A,45:39,47:40,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},{10:R,18:239},{10:Yt,60:jt,84:zt,92:240,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{10:Yt,60:jt,84:zt,92:251,104:[1,252],105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{10:Yt,60:jt,84:zt,92:253,104:[1,254],105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{105:[1,255]},{10:Yt,60:jt,84:zt,92:256,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{44:A,47:257,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t($t,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t($t,[2,116]),t($t,[2,118],{10:[1,261]}),t($t,[2,119]),t(tt,[2,56]),t(Wt,[2,87]),t(tt,[2,57]),{51:[1,262],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(tt,[2,64]),t(tt,[2,59]),t(tt,[2,60]),t(tt,[2,61]),{109:[1,263]},t(tt,[2,63]),t(tt,[2,65]),{66:[1,264],67:Rt,82:218,116:Kt,117:Gt,118:Ot},t(tt,[2,67]),t(tt,[2,68]),t(tt,[2,70]),t(tt,[2,69]),t(tt,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(it,[2,78]),{31:[1,265],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:h,32:[1,266],33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},t(J,[2,53]),{43:267,44:A,45:39,47:40,60:b,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B},t($t,[2,121],{106:Jt}),t(te,[2,130],{108:269,10:Yt,60:jt,84:zt,105:Xt,109:Ht,110:qt,111:Qt,112:Zt}),t(ee,[2,132]),t(ee,[2,134]),t(ee,[2,135]),t(ee,[2,136]),t(ee,[2,137]),t(ee,[2,138]),t(ee,[2,139]),t(ee,[2,140]),t(ee,[2,141]),t($t,[2,122],{106:Jt}),{10:[1,270]},t($t,[2,123],{106:Jt}),{10:[1,271]},t(Ut,[2,129]),t($t,[2,105],{106:Jt}),t($t,[2,106],{113:112,44:A,60:b,89:D,102:C,105:x,106:T,109:S,111:F,114:_,115:v,116:B}),t($t,[2,110]),t($t,[2,112],{10:[1,272]}),t($t,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:P,9:K,11:G,21:277},t(N,[2,34]),t(J,[2,52]),{10:Yt,60:jt,84:zt,105:Xt,107:278,108:242,109:Ht,110:qt,111:Qt,112:Zt},t(ee,[2,133]),{14:M,44:U,60:W,89:Y,101:279,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z,120:87},{14:M,44:U,60:W,89:Y,101:280,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z,120:87},{98:[1,281]},t($t,[2,120]),t(tt,[2,58]),{30:282,67:Rt,80:Nt,81:Pt,82:171,116:Kt,117:Gt,118:Ot},t(tt,[2,66]),t(Bt,r,{5:283}),t(te,[2,131],{108:269,10:Yt,60:jt,84:zt,105:Xt,109:Ht,110:qt,111:Qt,112:Zt}),t($t,[2,126],{120:167,10:[1,284],14:M,44:U,60:W,89:Y,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z}),t($t,[2,127],{120:167,10:[1,285],14:M,44:U,60:W,89:Y,105:j,106:z,109:X,111:H,114:q,115:Q,116:Z}),t($t,[2,114]),{31:[1,286],67:Rt,82:218,116:Kt,117:Gt,118:Ot},{6:11,7:12,8:a,9:u,10:o,11:l,20:17,22:18,23:19,24:20,25:21,26:22,27:h,32:[1,287],33:24,34:d,36:p,38:g,42:28,43:38,44:A,45:39,47:40,60:b,84:y,85:k,86:f,87:m,88:E,89:D,102:C,105:x,106:T,109:S,111:F,113:41,114:_,115:v,116:B,121:w,122:L,123:$,124:I},{10:Yt,60:jt,84:zt,92:288,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},{10:Yt,60:jt,84:zt,92:289,105:Xt,107:241,108:242,109:Ht,110:qt,111:Qt,112:Zt},t(tt,[2,62]),t(N,[2,33]),t($t,[2,124],{106:Jt}),t($t,[2,125],{106:Jt})],defaultActions:{},parseError:(0,c.K2)(function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},"parseError"),parse:(0,c.K2)(function(t){var e=this,s=[0],i=[],n=[null],r=[],a=this.table,u="",o=0,l=0,h=0,d=r.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(g.yy[A]=this.yy[A]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var b=p.yylloc;r.push(b);var y=p.options&&p.options.ranges;function k(){var t;return"number"!=typeof(t=i.pop()||p.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,c.K2)(function(t){s.length=s.length-2*t,n.length=n.length-t,r.length=r.length-t},"popStack"),(0,c.K2)(k,"lex");for(var f,m,E,D,C,x,T,S,F,_={};;){if(E=s[s.length-1],this.defaultActions[E]?D=this.defaultActions[E]:(null==f&&(f=k()),D=a[E]&&a[E][f]),void 0===D||!D.length||!D[0]){var v="";for(x in F=[],a[E])this.terminals_[x]&&x>2&&F.push("'"+this.terminals_[x]+"'");v=p.showPosition?"Parse error on line "+(o+1)+":\n"+p.showPosition()+"\nExpecting "+F.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(v,{text:p.match,token:this.terminals_[f]||f,line:p.yylineno,loc:b,expected:F})}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+f);switch(D[0]){case 1:s.push(f),n.push(p.yytext),r.push(p.yylloc),s.push(D[1]),f=null,m?(f=m,m=null):(l=p.yyleng,u=p.yytext,o=p.yylineno,b=p.yylloc,h>0&&h--);break;case 2:if(T=this.productions_[D[1]][1],_.$=n[n.length-T],_._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},y&&(_._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(C=this.performAction.apply(_,[u,l,o,g.yy,D[1],n,r].concat(d))))return C;T&&(s=s.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),s.push(this.productions_[D[1]][0]),n.push(_.$),r.push(_._$),S=a[s[s.length-2]][s[s.length-1]],s.push(S);break;case 3:return!0}}return!0},"parse")},ie=function(){return{EOF:1,parseError:(0,c.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,c.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,c.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,c.K2)(function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,c.K2)(function(){return this._more=!0,this},"more"),reject:(0,c.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,c.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,c.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,c.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,c.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,c.K2)(function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},"test_match"),next:(0,c.K2)(function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,c.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,c.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,c.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,c.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,c.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,c.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,c.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:(0,c.K2)(function(t,e,s,i){switch(s){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 12:case 14:case 17:case 20:case 23:case 33:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),e.yytext="",40;case 8:return this.pushState("shapeDataStr"),40;case 9:return this.popState(),40;case 10:const s=/\n\s*/g;return e.yytext=e.yytext.replace(s,"
    "),40;case 11:return 40;case 13:this.begin("callbackname");break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 18:return 96;case 19:return"MD_STR";case 21:this.begin("md_string");break;case 22:return"STR";case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 34:return 88;case 35:case 36:case 37:return t.lex.firstGraph()&&this.begin("dir"),12;case 38:return 27;case 39:return 32;case 40:case 41:case 42:case 43:return 98;case 44:return this.popState(),13;case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:case 54:return this.popState(),14;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:case 102:return 111;case 62:return 46;case 63:return 60;case 64:case 103:return 44;case 65:return 8;case 66:return 106;case 67:case 101:return 115;case 68:case 71:case 74:return this.popState(),77;case 69:return this.pushState("edgeText"),75;case 70:case 73:case 76:return 119;case 72:return this.pushState("thickEdgeText"),75;case 75:return this.pushState("dottedEdgeText"),75;case 77:return 77;case 78:return this.popState(),53;case 79:case 115:return"TEXT";case 80:return this.pushState("ellipseText"),52;case 81:return this.popState(),55;case 82:return this.pushState("text"),54;case 83:return this.popState(),57;case 84:return this.pushState("text"),56;case 85:return 58;case 86:return this.pushState("text"),67;case 87:return this.popState(),64;case 88:return this.pushState("text"),63;case 89:return this.popState(),49;case 90:return this.pushState("text"),48;case 91:return this.popState(),69;case 92:return this.popState(),71;case 93:return 117;case 94:return this.pushState("trapText"),68;case 95:return this.pushState("trapText"),70;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;case 108:return this.pushState("text"),62;case 109:return this.popState(),51;case 110:return this.pushState("text"),50;case 111:return this.popState(),31;case 112:return this.pushState("text"),29;case 113:return this.popState(),66;case 114:return this.pushState("text"),65;case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}}}();function ne(){this.yy={}}return se.lexer=ie,(0,c.K2)(ne,"Parser"),ne.prototype=se,se.Parser=ne,new ne}();b.parser=b;var y=b,k=Object.assign({},y);k.parse=t=>{const e=t.replace(/}\s*\n/g,"}\n");return y.parse(e)};var f=k,m=(0,c.K2)((t,e)=>{const s=p.A,i=s(t,"r"),n=s(t,"g"),r=s(t,"b");return d.A(i,n,r,e)},"fade"),E=(0,c.K2)(t=>`.label {\n font-family: ${t.fontFamily};\n color: ${t.nodeTextColor||t.textColor};\n }\n .cluster-label text {\n fill: ${t.titleColor};\n }\n .cluster-label span {\n color: ${t.titleColor};\n }\n .cluster-label span p {\n background-color: transparent;\n }\n\n .label text,span {\n fill: ${t.nodeTextColor||t.textColor};\n color: ${t.nodeTextColor||t.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .rough-node .label,.node .label, .image-shape .label, .icon-shape .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n\n .root .anchor path {\n fill: ${t.lineColor} !important;\n stroke-width: 0;\n stroke: ${t.lineColor};\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n p {\n background-color: ${t.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${m(t.edgeLabelBackground,.5)};\n // background-color:\n }\n\n .cluster rect {\n fill: ${t.clusterBkg};\n stroke: ${t.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n .cluster span {\n color: ${t.titleColor};\n }\n /* .cluster div {\n color: ${t.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${t.fontFamily};\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n\n rect.text {\n fill: none;\n stroke-width: 0;\n }\n\n .icon-shape, .image-shape {\n background-color: ${t.edgeLabelBackground};\n p {\n background-color: ${t.edgeLabelBackground};\n padding: 2px;\n }\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n }\n ${(0,i.o)()}\n`,"getStyles"),D={parser:f,get db(){return new g},renderer:A,styles:E,init:(0,c.K2)(t=>{t.flowchart||(t.flowchart={}),t.layout&&(0,c.XV)({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,(0,c.XV)({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}},75937:(t,e,s)=>{s.d(e,{A:()=>r});var i=s(72453),n=s(74886);const r=(t,e)=>i.A.lang.round(n.A.parse(t)[e])},98833:(t,e,s)=>{s.d(e,{P:()=>n});var i=s(41750),n=(0,i.K2)((t,e,s,n)=>{t.attr("class",s);const{width:u,height:o,x:l,y:c}=r(t,e);(0,i.a$)(t,o,u,n);const h=a(l,c,u,o,e);t.attr("viewBox",h),i.Rm.debug(`viewBox configured: ${h} with padding: ${e}`)},"setupViewPortForSVG"),r=(0,i.K2)((t,e)=>{const s=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:s.width+2*e,height:s.height+2*e,x:s.x,y:s.y}},"calculateDimensionsWithPadding"),a=(0,i.K2)((t,e,s,i,n)=>`${t-n} ${e-n} ${s} ${i}`,"createViewBox")}}]); \ No newline at end of file diff --git a/assets/js/291.386c4e4d.js b/assets/js/291.386c4e4d.js new file mode 100644 index 0000000..a70b4f7 --- /dev/null +++ b/assets/js/291.386c4e4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[291],{50291:(t,e,n)=>{n.d(e,{diagram:()=>Y});var i=n(67633),s=n(40797),r=n(70451),a=n(3219),o=n(78041),c=n(75263),l=function(){var t=(0,s.K2)(function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},"o"),e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],i=[1,10],r=[1,11],a=[1,12],o=[1,13],c=[1,16],l=[1,17],h={trace:(0,s.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:(0,s.K2)(function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 15:i.addTask(r[o],0,""),this.$=r[o];break;case 16:i.addEvent(r[o].substr(2)),this.$=r[o]}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:r,16:a,17:o,18:14,19:15,20:c,21:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:n,12:i,14:r,16:a,17:o,18:14,19:15,20:c,21:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:(0,s.K2)(function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},"parseError"),parse:(0,s.K2)(function(t){var e=this,n=[0],i=[],r=[null],a=[],o=this.table,c="",l=0,h=0,d=0,u=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var f=p.yylloc;a.push(f);var m=p.options&&p.options.ranges;function x(){var t;return"number"!=typeof(t=i.pop()||p.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,s.K2)(function(t){n.length=n.length-2*t,r.length=r.length-t,a.length=a.length-t},"popStack"),(0,s.K2)(x,"lex");for(var b,k,_,w,v,K,S,$,E,T={};;){if(_=n[n.length-1],this.defaultActions[_]?w=this.defaultActions[_]:(null==b&&(b=x()),w=o[_]&&o[_][b]),void 0===w||!w.length||!w[0]){var I="";for(K in E=[],o[_])this.terminals_[K]&&K>2&&E.push("'"+this.terminals_[K]+"'");I=p.showPosition?"Parse error on line "+(l+1)+":\n"+p.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(I,{text:p.match,token:this.terminals_[b]||b,line:p.yylineno,loc:f,expected:E})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+b);switch(w[0]){case 1:n.push(b),r.push(p.yytext),a.push(p.yylloc),n.push(w[1]),b=null,k?(b=k,k=null):(h=p.yyleng,c=p.yytext,l=p.yylineno,f=p.yylloc,d>0&&d--);break;case 2:if(S=this.productions_[w[1]][1],T.$=r[r.length-S],T._$={first_line:a[a.length-(S||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(S||1)].first_column,last_column:a[a.length-1].last_column},m&&(T._$.range=[a[a.length-(S||1)].range[0],a[a.length-1].range[1]]),void 0!==(v=this.performAction.apply(T,[c,h,l,y.yy,w[1],r,a].concat(u))))return v;S&&(n=n.slice(0,-1*S*2),r=r.slice(0,-1*S),a=a.slice(0,-1*S)),n.push(this.productions_[w[1]][0]),r.push(T.$),a.push(T._$),$=o[n[n.length-2]][n[n.length-1]],n.push($);break;case 3:return!0}}return!0},"parse")},d=function(){return{EOF:1,parseError:(0,s.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,s.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,s.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,s.K2)(function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,s.K2)(function(){return this._more=!0,this},"more"),reject:(0,s.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,s.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,s.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,s.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,s.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,s.K2)(function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},"test_match"),next:(0,s.K2)(function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,s.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,s.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,s.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,s.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,s.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,s.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,s.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,s.K2)(function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s(?:[^:\n]|:(?!\s))+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}}}();function u(){this.yy={}}return h.lexer=d,(0,s.K2)(u,"Parser"),u.prototype=h,h.Parser=u,new u}();l.parser=l;var h=l,d={};(0,s.VA)(d,{addEvent:()=>v,addSection:()=>b,addTask:()=>w,addTaskOrg:()=>K,clear:()=>x,default:()=>$,getCommonDb:()=>m,getSections:()=>k,getTasks:()=>_});var u="",p=0,y=[],g=[],f=[],m=(0,s.K2)(()=>i.Wt,"getCommonDb"),x=(0,s.K2)(function(){y.length=0,g.length=0,u="",f.length=0,(0,i.IU)()},"clear"),b=(0,s.K2)(function(t){u=t,y.push(t)},"addSection"),k=(0,s.K2)(function(){return y},"getSections"),_=(0,s.K2)(function(){let t=S();let e=0;for(;!t&&e<100;)t=S(),e++;return g.push(...f),g},"getTasks"),w=(0,s.K2)(function(t,e,n){const i={id:p++,section:u,type:u,task:t,score:e||0,events:n?[n]:[]};f.push(i)},"addTask"),v=(0,s.K2)(function(t){f.find(t=>t.id===p-1).events.push(t)},"addEvent"),K=(0,s.K2)(function(t){const e={section:u,type:u,description:t,task:t,classes:[]};g.push(e)},"addTaskOrg"),S=(0,s.K2)(function(){const t=(0,s.K2)(function(t){return f[t].processed},"compileTask");let e=!0;for(const[n,i]of f.entries())t(n),e=e&&i.processed;return e},"compileTasks"),$={clear:x,getCommonDb:m,addSection:b,getSections:k,getTasks:_,addTask:w,addTaskOrg:K,addEvent:v},E=(0,s.K2)(function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},"drawRect"),T=(0,s.K2)(function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),a=t.append("g");function o(t){const i=(0,r.JLW)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function c(t){const i=(0,r.JLW)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}function l(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),a.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),(0,s.K2)(o,"smile"),(0,s.K2)(c,"sad"),(0,s.K2)(l,"ambivalent"),e.score>3?o(a):e.score<3?c(a):l(a),i},"drawFace"),I=(0,s.K2)(function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},"drawCircle"),R=(0,s.K2)(function(t,e){const n=e.text.replace(//gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const s=i.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),i},"drawText"),A=(0,s.K2)(function(t,e){function n(t,e,n,i,s){return t+","+e+" "+(t+n)+","+e+" "+(t+n)+","+(e+i-s)+" "+(t+n-1.2*s)+","+(e+i)+" "+t+","+(e+i)}(0,s.K2)(n,"genPoints");const i=t.append("polygon");i.attr("points",n(e.x,e.y,50,20,7)),i.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,R(t,e)},"drawLabel"),L=(0,s.K2)(function(t,e,n){const i=t.append("g"),s=H();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width,s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,E(i,s),O(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},"drawSection"),M=-1,C=(0,s.K2)(function(t,e,n){const i=e.x+n.width/2,s=t.append("g");M++;s.append("line").attr("id","task"+M).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),T(s,{cx:i,cy:300+30*(5-e.score),score:e.score});const r=H();r.x=e.x,r.y=e.y,r.fill=e.fill,r.width=n.width,r.height=n.height,r.class="task task-type-"+e.num,r.rx=3,r.ry=3,E(s,r),O(n)(e.task,s,r.x,r.y,r.width,r.height,{class:"task"},n,e.colour)},"drawTask"),N=(0,s.K2)(function(t,e){E(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),P=(0,s.K2)(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),H=(0,s.K2)(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),O=function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(//gi);for(let p=0;p)/).reverse(),s=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let r=0;re||"
    "===t)&&(s.pop(),c.text(s.join(" ").trim()),s="
    "===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))})}(0,s.K2)(D,"wrap");var z=(0,s.K2)(function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(D,e.width).node().getBBox(),l=i.fontSize?.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),B(a,e,s,i),e},"drawNode"),W=(0,s.K2)(function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(D,e.width).node().getBBox(),r=n.fontSize?.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},"getVirtualNodeHeight"),B=(0,s.K2)(function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),F={drawRect:E,drawCircle:I,drawSection:L,drawText:R,drawLabel:A,drawTask:C,drawBackgroundRect:N,getTextObj:P,getNoteRect:H,initGraphics:j,drawNode:z,getVirtualNodeHeight:W},V=(0,s.K2)(function(t,e,n,a){const o=(0,i.D7)(),c=o.timeline?.leftMargin??50;s.Rm.debug("timeline",a.db);const l=o.securityLevel;let h;"sandbox"===l&&(h=(0,r.Ltv)("#i"+e));const d=("sandbox"===l?(0,r.Ltv)(h.nodes()[0].contentDocument.body):(0,r.Ltv)("body")).select("#"+e);d.append("g");const u=a.db.getTasks(),p=a.db.getCommonDb().getDiagramTitle();s.Rm.debug("task",u),F.initGraphics(d);const y=a.db.getSections();s.Rm.debug("sections",y);let g=0,f=0,m=0,x=0,b=50+c,k=50;x=50;let _=0,w=!0;y.forEach(function(t){const e={number:_,descr:t,section:_,width:150,padding:20,maxHeight:g},n=F.getVirtualNodeHeight(d,e,o);s.Rm.debug("sectionHeight before draw",n),g=Math.max(g,n+20)});let v=0,K=0;s.Rm.debug("tasks.length",u.length);for(const[i,r]of u.entries()){const t={number:i,descr:r,section:r.section,width:150,padding:20,maxHeight:f},e=F.getVirtualNodeHeight(d,t,o);s.Rm.debug("taskHeight before draw",e),f=Math.max(f,e+20),v=Math.max(v,r.events.length);let n=0;for(const i of r.events){const t={descr:i,section:r.section,number:r.section,width:150,padding:20,maxHeight:50};n+=F.getVirtualNodeHeight(d,t,o)}r.events.length>0&&(n+=10*(r.events.length-1)),K=Math.max(K,n)}s.Rm.debug("maxSectionHeight before draw",g),s.Rm.debug("maxTaskHeight before draw",f),y&&y.length>0?y.forEach(t=>{const e=u.filter(e=>e.section===t),n={number:_,descr:t,section:_,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:g};s.Rm.debug("sectionNode",n);const i=d.append("g"),r=F.drawNode(i,n,_,o);s.Rm.debug("sectionNode output",r),i.attr("transform",`translate(${b}, 50)`),k+=g+50,e.length>0&&G(d,e,_,b,k,f,o,v,K,g,!1),b+=200*Math.max(e.length,1),k=50,_++}):(w=!1,G(d,u,_,b,k,f,o,v,K,g,!0));const S=d.node().getBBox();s.Rm.debug("bounds",S),p&&d.append("text").text(p).attr("x",S.width/2-c).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),m=w?g+f+150:f+100;d.append("g").attr("class","lineWrapper").append("line").attr("x1",c).attr("y1",m).attr("x2",S.width+3*c).attr("y2",m).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.ot)(void 0,d,o.timeline?.padding??50,o.timeline?.useMaxWidth??!1)},"draw"),G=(0,s.K2)(function(t,e,n,i,r,a,o,c,l,h,d){for(const u of e){const e={descr:u.task,section:n,number:n,width:150,padding:20,maxHeight:a};s.Rm.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),h=F.drawNode(c,e,n,o).height;if(s.Rm.debug("taskHeight after draw",h),c.attr("transform",`translate(${i}, ${r})`),a=Math.max(a,h),u.events){const e=t.append("g").attr("class","lineWrapper");let s=a;r+=100,s+=U(t,u.events,n,i,r,o),r-=100,e.append("line").attr("x1",i+95).attr("y1",r+a).attr("x2",i+95).attr("y2",r+a+100+l+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}i+=200,d&&!o.timeline?.disableMulticolor&&n++}r-=10},"drawTasks"),U=(0,s.K2)(function(t,e,n,i,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};s.Rm.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=F.drawNode(c,e,n,a).height;o+=h,c.attr("transform",`translate(${i}, ${r})`),r=r+10+h}return r=c,o},"drawEvents"),q={setConf:(0,s.K2)(()=>{},"setConf"),draw:V},J=(0,s.K2)(t=>{let e="";for(let n=0;n`\n .edge {\n stroke-width: 3;\n }\n ${J(t)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${t.git0};\n }\n .section-root text {\n fill: ${t.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`,"getStyles")}}}]); \ No newline at end of file diff --git a/assets/js/2f51beae.bdd30749.js b/assets/js/2f51beae.bdd30749.js new file mode 100644 index 0000000..746fd95 --- /dev/null +++ b/assets/js/2f51beae.bdd30749.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4448],{28453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>c});var s=i(96540);const r={},o=s.createContext(r);function t(e){const n=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(o.Provider,{value:n},e.children)}},83039:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});const s=JSON.parse('{"id":"learn/concepts/discv5","title":"Discv5","description":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.","source":"@site/docs/learn/concepts/discv5.md","sourceDirName":"learn/concepts","slug":"/learn/concepts/discv5","permalink":"/learn/concepts/discv5","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/concepts/discv5.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Discv5","hide_table_of_contents":true,"displayed_sidebar":"learn"},"sidebar":"learn","previous":{"title":"DNS Discovery","permalink":"/learn/concepts/dns-discovery"},"next":{"title":"Peer Exchange","permalink":"/learn/concepts/peer-exchange"}}');var r=i(74848),o=i(28453);function t(e){const n={li:"li",mermaid:"mermaid",ol:"ol",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.mermaid,{value:"sequenceDiagram\n Alice->>DNS Server: (1) Execute DNS Discovery\n DNS Server--\x3e>Alice: (2) Bob's connection details (UDP + TCP)\n activate Alice\n Alice->>Bob: (3) Execute Discv5 over UDP\n Bob--\x3e>Alice: (4) ENRs (UDP + TCP): Carol, David, Erin\n Alice->>Alice: (5) Decode ENRs\n Alice->>Carol: (6) Execute Discv5 over UDP\n Carol--\x3e>Alice: (7) ENRs (UDP + TCP): Frank, Gwen, Harry\n Alice->>Alice: (8) Decode ENRs\n deactivate Alice\n Alice->>Alice: (9) Select peers to dial\n Alice->>David: (10) Libp2p dial (TCP)\n Alice->>Frank: (10) Libp2p dial (TCP)\n Alice->>Gwen: (10) Libp2p dial (TCP)"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"DNS Discovery protocol is executed."}),"\n",(0,r.jsx)(n.li,{children:"Alice retrieves Bob's ENR (Ethereum Node Record) from DNS Server."}),"\n",(0,r.jsx)(n.li,{children:"Alice executes the Discv5 protocol with Bob using UDP connection details from ENR."}),"\n",(0,r.jsx)(n.li,{children:"Bob returns Carol's, David's and Erin's ENRs to Alice."}),"\n",(0,r.jsx)(n.li,{children:"Alice decodes ENRs and extracts the details of Carol, David, and Erin's TCP and UDP connections."}),"\n",(0,r.jsx)(n.li,{children:"Alice executes the Discv5 protocol with Carol using UDP connection details from ENR."}),"\n",(0,r.jsx)(n.li,{children:"Carol returns Frank's, Gwen's and Harry's ENRs to Alice."}),"\n",(0,r.jsx)(n.li,{children:"Alice decodes ENRs and extracts Frank's, Gwen's and Harry's TCP and UDP connection details."}),"\n",(0,r.jsx)(n.li,{children:"Alice selects to dial David, Frank and Gwen."}),"\n",(0,r.jsx)(n.li,{children:"Alice dials David, Frank and Gwen over libp2p using TCP connection details from ENRs."}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(t,{...e})}):t(e)}const a={title:"Discv5",hide_table_of_contents:!0,displayed_sidebar:"learn"},l=void 0,d={},p=[{value:"Pros",id:"pros",level:4},{value:"Cons",id:"cons",level:4},{value:"Overview",id:"overview",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Discv5"})," is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a ",(0,r.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Distributed_hash_table",children:"Distributed Hash Table (DHT)"})," for storing ",(0,r.jsx)(n.code,{children:"ENR"})," records, providing resistance to censorship. ",(0,r.jsx)(n.code,{children:"Discv5"})," offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the ",(0,r.jsx)(n.a,{href:"https://rfc.vac.dev/waku/standards/core/33/discv5",children:"Discv5"})," specification to learn more."]}),"\n",(0,r.jsx)(n.h4,{id:"pros",children:"Pros"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Decentralised with random sampling from a global view."}),"\n",(0,r.jsx)(n.li,{children:"Continuously researched and improved."}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"cons",children:"Cons"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Requires lots of connections and involves frequent churn."}),"\n",(0,r.jsx)(n.li,{children:"Relies on User Datagram Protocol (UDP), which is not supported in web browsers."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n","\n",(0,r.jsx)(c,{})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}}}]); \ No newline at end of file diff --git a/assets/js/2f51beae.f6dae88a.js b/assets/js/2f51beae.f6dae88a.js deleted file mode 100644 index 70f8e28..0000000 --- a/assets/js/2f51beae.f6dae88a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4448],{28453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>c});var s=i(96540);const r={},o=s.createContext(r);function t(e){const n=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(o.Provider,{value:n},e.children)}},83039:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});const s=JSON.parse('{"id":"learn/concepts/discv5","title":"Discv5","description":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.","source":"@site/docs/learn/concepts/discv5.md","sourceDirName":"learn/concepts","slug":"/learn/concepts/discv5","permalink":"/learn/concepts/discv5","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/concepts/discv5.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Discv5","hide_table_of_contents":true},"sidebar":"learn","previous":{"title":"DNS Discovery","permalink":"/learn/concepts/dns-discovery"},"next":{"title":"Peer Exchange","permalink":"/learn/concepts/peer-exchange"}}');var r=i(74848),o=i(28453);function t(e){const n={li:"li",mermaid:"mermaid",ol:"ol",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.mermaid,{value:"sequenceDiagram\n Alice->>DNS Server: (1) Execute DNS Discovery\n DNS Server--\x3e>Alice: (2) Bob's connection details (UDP + TCP)\n activate Alice\n Alice->>Bob: (3) Execute Discv5 over UDP\n Bob--\x3e>Alice: (4) ENRs (UDP + TCP): Carol, David, Erin\n Alice->>Alice: (5) Decode ENRs\n Alice->>Carol: (6) Execute Discv5 over UDP\n Carol--\x3e>Alice: (7) ENRs (UDP + TCP): Frank, Gwen, Harry\n Alice->>Alice: (8) Decode ENRs\n deactivate Alice\n Alice->>Alice: (9) Select peers to dial\n Alice->>David: (10) Libp2p dial (TCP)\n Alice->>Frank: (10) Libp2p dial (TCP)\n Alice->>Gwen: (10) Libp2p dial (TCP)"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"DNS Discovery protocol is executed."}),"\n",(0,r.jsx)(n.li,{children:"Alice retrieves Bob's ENR (Ethereum Node Record) from DNS Server."}),"\n",(0,r.jsx)(n.li,{children:"Alice executes the Discv5 protocol with Bob using UDP connection details from ENR."}),"\n",(0,r.jsx)(n.li,{children:"Bob returns Carol's, David's and Erin's ENRs to Alice."}),"\n",(0,r.jsx)(n.li,{children:"Alice decodes ENRs and extracts the details of Carol, David, and Erin's TCP and UDP connections."}),"\n",(0,r.jsx)(n.li,{children:"Alice executes the Discv5 protocol with Carol using UDP connection details from ENR."}),"\n",(0,r.jsx)(n.li,{children:"Carol returns Frank's, Gwen's and Harry's ENRs to Alice."}),"\n",(0,r.jsx)(n.li,{children:"Alice decodes ENRs and extracts Frank's, Gwen's and Harry's TCP and UDP connection details."}),"\n",(0,r.jsx)(n.li,{children:"Alice selects to dial David, Frank and Gwen."}),"\n",(0,r.jsx)(n.li,{children:"Alice dials David, Frank and Gwen over libp2p using TCP connection details from ENRs."}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(t,{...e})}):t(e)}const a={title:"Discv5",hide_table_of_contents:!0},l=void 0,d={},p=[{value:"Pros",id:"pros",level:4},{value:"Cons",id:"cons",level:4},{value:"Overview",id:"overview",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Discv5"})," is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a ",(0,r.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Distributed_hash_table",children:"Distributed Hash Table (DHT)"})," for storing ",(0,r.jsx)(n.code,{children:"ENR"})," records, providing resistance to censorship. ",(0,r.jsx)(n.code,{children:"Discv5"})," offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the ",(0,r.jsx)(n.a,{href:"https://rfc.vac.dev/waku/standards/core/33/discv5",children:"Discv5"})," specification to learn more."]}),"\n",(0,r.jsx)(n.h4,{id:"pros",children:"Pros"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Decentralised with random sampling from a global view."}),"\n",(0,r.jsx)(n.li,{children:"Continuously researched and improved."}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"cons",children:"Cons"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Requires lots of connections and involves frequent churn."}),"\n",(0,r.jsx)(n.li,{children:"Relies on User Datagram Protocol (UDP), which is not supported in web browsers."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n","\n",(0,r.jsx)(c,{})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}}}]); \ No newline at end of file diff --git a/assets/js/309e91a3.3dd6071e.js b/assets/js/309e91a3.3dd6071e.js new file mode 100644 index 0000000..8c19b37 --- /dev/null +++ b/assets/js/309e91a3.3dd6071e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[5766],{28453:(e,n,o)=>{o.d(n,{R:()=>d,x:()=>c});var s=o(96540);const i={},r=s.createContext(i);function d(e){const n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),s.createElement(r.Provider,{value:n},e.children)}},99919:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>t,contentTitle:()=>c,default:()=>h,frontMatter:()=>d,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"run-node/configure-discovery","title":"Configure Peer Discovery","description":"This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network.","source":"@site/docs/run-node/configure-discovery.md","sourceDirName":"run-node","slug":"/run-node/configure-discovery","permalink":"/run-node/configure-discovery","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/run-node/configure-discovery.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Configure Peer Discovery","hide_table_of_contents":true,"displayed_sidebar":"runNode"},"sidebar":"runNode","previous":{"title":"Build Nwaku from Source","permalink":"/run-node/build-source"},"next":{"title":"Find Your Node Address","permalink":"/run-node/find-node-address"}}');var i=o(74848),r=o(28453);const d={title:"Configure Peer Discovery",hide_table_of_contents:!0,displayed_sidebar:"runNode"},c=void 0,t={},l=[{value:"Configure static peers",id:"configure-static-peers",level:2},{value:"Configure DNS discovery",id:"configure-dns-discovery",level:2},{value:"Configure Discv5",id:"configure-discv5",level:2},{value:"Configure peer exchange",id:"configure-peer-exchange",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["This guide provides detailed steps to configure a ",(0,i.jsx)(n.code,{children:"nwaku"})," node to discover and connect with peers in the Waku Network."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["You can configure a ",(0,i.jsx)(n.code,{children:"nwaku"})," node to use multiple peer discovery mechanisms simultaneously."]})}),"\n",(0,i.jsx)(n.h2,{id:"configure-static-peers",children:"Configure static peers"}),"\n",(0,i.jsxs)(n.p,{children:["You can provide ",(0,i.jsx)(n.a,{href:"/learn/concepts/static-peers",children:"static peers"})," to a ",(0,i.jsx)(n.code,{children:"nwaku"})," node during startup using the ",(0,i.jsx)(n.code,{children:"staticnode"})," configuration option. To connect to multiple peers on startup, repeat the ",(0,i.jsx)(n.code,{children:"staticnode"})," option:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --staticnode=[PEER MULTIADDR 1] \\\n --staticnode=[PEER MULTIADDR 2]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["For example, consider a ",(0,i.jsx)(n.code,{children:"nwaku"})," node that connects to two static peers on the same local host (IP: ",(0,i.jsx)(n.code,{children:"0.0.0.0"}),") using TCP ports ",(0,i.jsx)(n.code,{children:"60002"})," and ",(0,i.jsx)(n.code,{children:"60003"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --staticnode=/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \\\n --staticnode=/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ\n"})}),"\n",(0,i.jsx)(n.h2,{id:"configure-dns-discovery",children:"Configure DNS discovery"}),"\n",(0,i.jsxs)(n.p,{children:["To enable ",(0,i.jsx)(n.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"})," in a ",(0,i.jsx)(n.code,{children:"nwaku"})," node, use the following configuration options:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dns-discovery"}),": Enables ",(0,i.jsx)(n.code,{children:"DNS Discovery"})," on the node (disabled by default)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dns-discovery-url"}),": URL for DNS node list in the format ",(0,i.jsx)(n.code,{children:"enrtree://@"})," where ",(0,i.jsx)(n.code,{children:""})," is the fully qualified domain name and ",(0,i.jsx)(n.code,{children:""})," is the base32 encoding of the compressed 32-byte public key that signed the list at that location."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dns-discovery-name-server"})," (optional): DNS name server IPs to query. You can repeat this option to provide multiple DNS name servers."]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --dns-discovery=true \\\n --dns-discovery-url=enrtree://[PUBLIC KEY]@[DOMAIN NAME] \\\n --dns-discovery-name-server=[DNS NAME SERVER IP]\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["If you omit the ",(0,i.jsx)(n.code,{children:"dns-discovery-name-server"})," option, ",(0,i.jsx)(n.code,{children:"nwaku"})," will attempt to use the CloudFlare servers ",(0,i.jsx)(n.code,{children:"1.1.1.1"})," and ",(0,i.jsx)(n.code,{children:"1.0.0.1"}),"."]})}),"\n",(0,i.jsxs)(n.p,{children:["For example, consider a ",(0,i.jsx)(n.code,{children:"nwaku"})," node that enables ",(0,i.jsx)(n.code,{children:"DNS Discovery"}),", connects to a DNS node list, and queries the IPs ",(0,i.jsx)(n.code,{children:"8.8.8.8"})," and ",(0,i.jsx)(n.code,{children:"8.8.4.4"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --dns-discovery=true \\\n --dns-discovery-url=enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im \\\n --dns-discovery-name-server=8.8.8.8 \\\n --dns-discovery-name-server=8.8.4.4\n"})}),"\n",(0,i.jsx)(n.h2,{id:"configure-discv5",children:"Configure Discv5"}),"\n",(0,i.jsxs)(n.p,{children:["To enable ",(0,i.jsx)(n.a,{href:"/learn/concepts/discv5",children:"Discv5"})," in a ",(0,i.jsx)(n.code,{children:"nwaku"})," node, use the following configuration options:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"discv5-discovery"}),": Enables ",(0,i.jsx)(n.code,{children:"Discv5"})," on the node (disabled by default)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"discv5-bootstrap-node"}),": ENR for ",(0,i.jsx)(n.code,{children:"Discv5"})," routing table bootstrap node. You can repeat this option to provide multiple bootstrap entries."]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --discv5-discovery=true \\\n --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 1] \\\n --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 2]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["For example, consider a ",(0,i.jsx)(n.code,{children:"nwaku"})," node that enables ",(0,i.jsx)(n.code,{children:"Discv5"})," and bootstraps its routing table using a static ",(0,i.jsx)(n.code,{children:"ENR"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --discv5-discovery=true \\\n --discv5-bootstrap-node=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["When Discv5 is enabled and used with ",(0,i.jsx)(n.a,{href:"#configure-dns-discovery",children:"DNS Discovery"}),", the ",(0,i.jsx)(n.code,{children:"nwaku"})," node will attempt to bootstrap the Discv5 routing table by extracting ",(0,i.jsx)(n.code,{children:"ENRs"})," from peers discovered through DNS."]})}),"\n",(0,i.jsx)(n.h2,{id:"configure-peer-exchange",children:"Configure peer exchange"}),"\n",(0,i.jsxs)(n.p,{children:["To enable ",(0,i.jsx)(n.a,{href:"/learn/concepts/peer-exchange",children:"Peer Exchange"})," in a ",(0,i.jsx)(n.code,{children:"nwaku"})," node, use the following configuration options:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"peer-exchange"}),": Enables ",(0,i.jsx)(n.code,{children:"Peer Exchange"})," on the node as a responder (disabled by default)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"peer-exchange-node"})," (optional): Multiaddr for bootstrap node with the peer exchange protocol enabled."]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"./build/wakunode2 \\\n --peer-exchange=true \\\n --peer-exchange-node=[PEER MULTIADDR WITH EXCHANGE ENABLED]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["For example, consider two ",(0,i.jsx)(n.code,{children:"nwaku"})," nodes configured as a ",(0,i.jsx)(n.code,{children:"server"})," (peer exchange responder node) and ",(0,i.jsx)(n.code,{children:"client"})," (node using peer exchange) on the same local host (IP: ",(0,i.jsx)(n.code,{children:"0.0.0.0"}),"):"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",metastring:'title="Server: Nwaku Node with Peer Exchange Enabled"',children:"./build/wakunode2 --peer-exchange=true\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",metastring:'title="Client: Nwaku Node Bootstrapping with Peer Exchange"',children:"./build/wakunode2 \\\n --tcp-port=30305 \\\n --ports-shift=1 \\\n --peer-exchange-node=/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmLCe6zVqCS6KMqqRbbhyoJjfYZGr1Q3thTSbyKzibQkFR\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"nwaku"})," provides a ",(0,i.jsx)(n.a,{href:"/run-node/config-options#relay-config",children:(0,i.jsx)(n.code,{children:"relay-peer-exchange"})})," option via ",(0,i.jsx)(n.code,{children:"libp2p"})," for peer exchange, allowing network growth through neighbouring nodes. However, this feature can compromise security and network robustness, so we recommend only using it in high-trust environments."]})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}}}]); \ No newline at end of file diff --git a/assets/js/310.002b7a42.js b/assets/js/310.002b7a42.js deleted file mode 100644 index 67a7418..0000000 --- a/assets/js/310.002b7a42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[310],{20310:(e,r,s)=>{s.d(r,{diagram:()=>t});var a=s(98379),u=(s(24651),s(44540),s(98833),s(45020),s(51789),s(30070),s(66906),s(28823),s(55683),s(68506),s(46792),s(41750)),t={parser:a._$,get db(){return new a.NM},renderer:a.Lh,styles:a.tM,init:(0,u.K2)(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]); \ No newline at end of file diff --git a/assets/js/3488.2c50c090.js b/assets/js/3488.2c50c090.js new file mode 100644 index 0000000..955c006 --- /dev/null +++ b/assets/js/3488.2c50c090.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[3488],{93488:(e,a,r)=>{r.d(a,{diagram:()=>p});var t=r(42467),n=r(73590),s=r(67633),i=r(40797),d=r(78731),o={parse:(0,i.K2)(async e=>{const a=await(0,d.qg)("info",e);i.Rm.debug(a)},"parse")},g={version:t.n.version+""},p={parser:o,db:{getVersion:(0,i.K2)(()=>g.version,"getVersion")},renderer:{draw:(0,i.K2)((e,a,r)=>{i.Rm.debug("rendering info diagram\n"+e);const t=(0,n.D)(a);(0,s.a$)(t,100,400,!0);t.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw")}}}}]); \ No newline at end of file diff --git a/assets/js/3736.49fedb0c.js b/assets/js/3736.49fedb0c.js deleted file mode 100644 index 7507dd4..0000000 --- a/assets/js/3736.49fedb0c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[3736],{53736:(t,e,n)=>{n.d(e,{diagram:()=>J});var i=n(41750),s=n(70451),r=n(3219),a=n(78041),o=n(75263),c=function(){var t=(0,i.K2)(function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},"o"),e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],s=[1,10],r=[1,11],a=[1,12],o=[1,13],c=[1,16],l=[1,17],h={trace:(0,i.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:(0,i.K2)(function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 15:i.addTask(r[o],0,""),this.$=r[o];break;case 16:i.addEvent(r[o].substr(2)),this.$=r[o]}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:s,14:r,16:a,17:o,18:14,19:15,20:c,21:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:n,12:s,14:r,16:a,17:o,18:14,19:15,20:c,21:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:(0,i.K2)(function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},"parseError"),parse:(0,i.K2)(function(t){var e=this,n=[0],s=[],r=[null],a=[],o=this.table,c="",l=0,h=0,d=0,u=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var f=p.yylloc;a.push(f);var m=p.options&&p.options.ranges;function x(){var t;return"number"!=typeof(t=s.pop()||p.lex()||1)&&(t instanceof Array&&(t=(s=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,i.K2)(function(t){n.length=n.length-2*t,r.length=r.length-t,a.length=a.length-t},"popStack"),(0,i.K2)(x,"lex");for(var b,k,_,w,v,K,S,$,E,T={};;){if(_=n[n.length-1],this.defaultActions[_]?w=this.defaultActions[_]:(null==b&&(b=x()),w=o[_]&&o[_][b]),void 0===w||!w.length||!w[0]){var I="";for(K in E=[],o[_])this.terminals_[K]&&K>2&&E.push("'"+this.terminals_[K]+"'");I=p.showPosition?"Parse error on line "+(l+1)+":\n"+p.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(I,{text:p.match,token:this.terminals_[b]||b,line:p.yylineno,loc:f,expected:E})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+b);switch(w[0]){case 1:n.push(b),r.push(p.yytext),a.push(p.yylloc),n.push(w[1]),b=null,k?(b=k,k=null):(h=p.yyleng,c=p.yytext,l=p.yylineno,f=p.yylloc,d>0&&d--);break;case 2:if(S=this.productions_[w[1]][1],T.$=r[r.length-S],T._$={first_line:a[a.length-(S||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(S||1)].first_column,last_column:a[a.length-1].last_column},m&&(T._$.range=[a[a.length-(S||1)].range[0],a[a.length-1].range[1]]),void 0!==(v=this.performAction.apply(T,[c,h,l,y.yy,w[1],r,a].concat(u))))return v;S&&(n=n.slice(0,-1*S*2),r=r.slice(0,-1*S),a=a.slice(0,-1*S)),n.push(this.productions_[w[1]][0]),r.push(T.$),a.push(T._$),$=o[n[n.length-2]][n[n.length-1]],n.push($);break;case 3:return!0}}return!0},"parse")},d=function(){return{EOF:1,parseError:(0,i.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,i.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,i.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,i.K2)(function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,i.K2)(function(){return this._more=!0,this},"more"),reject:(0,i.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,i.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,i.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,i.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,i.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,i.K2)(function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},"test_match"),next:(0,i.K2)(function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,i.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,i.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,i.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,i.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,i.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,i.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,i.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,i.K2)(function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s(?:[^:\n]|:(?!\s))+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}}}();function u(){this.yy={}}return h.lexer=d,(0,i.K2)(u,"Parser"),u.prototype=h,h.Parser=u,new u}();c.parser=c;var l=c,h={};(0,i.VA)(h,{addEvent:()=>w,addSection:()=>x,addTask:()=>_,addTaskOrg:()=>v,clear:()=>m,default:()=>S,getCommonDb:()=>f,getSections:()=>b,getTasks:()=>k});var d="",u=0,p=[],y=[],g=[],f=(0,i.K2)(()=>i.Wt,"getCommonDb"),m=(0,i.K2)(function(){p.length=0,y.length=0,d="",g.length=0,(0,i.IU)()},"clear"),x=(0,i.K2)(function(t){d=t,p.push(t)},"addSection"),b=(0,i.K2)(function(){return p},"getSections"),k=(0,i.K2)(function(){let t=K();let e=0;for(;!t&&e<100;)t=K(),e++;return y.push(...g),y},"getTasks"),_=(0,i.K2)(function(t,e,n){const i={id:u++,section:d,type:d,task:t,score:e||0,events:n?[n]:[]};g.push(i)},"addTask"),w=(0,i.K2)(function(t){g.find(t=>t.id===u-1).events.push(t)},"addEvent"),v=(0,i.K2)(function(t){const e={section:d,type:d,description:t,task:t,classes:[]};y.push(e)},"addTaskOrg"),K=(0,i.K2)(function(){const t=(0,i.K2)(function(t){return g[t].processed},"compileTask");let e=!0;for(const[n,i]of g.entries())t(n),e=e&&i.processed;return e},"compileTasks"),S={clear:m,getCommonDb:f,addSection:x,getSections:b,getTasks:k,addTask:_,addTaskOrg:v,addEvent:w},$=(0,i.K2)(function(t,e){const n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},"drawRect"),E=(0,i.K2)(function(t,e){const n=15,r=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),a=t.append("g");function o(t){const i=(0,s.JLW)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function c(t){const i=(0,s.JLW)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}function l(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),a.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),(0,i.K2)(o,"smile"),(0,i.K2)(c,"sad"),(0,i.K2)(l,"ambivalent"),e.score>3?o(a):e.score<3?c(a):l(a),r},"drawFace"),T=(0,i.K2)(function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},"drawCircle"),I=(0,i.K2)(function(t,e){const n=e.text.replace(//gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const s=i.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),i},"drawText"),R=(0,i.K2)(function(t,e){function n(t,e,n,i,s){return t+","+e+" "+(t+n)+","+e+" "+(t+n)+","+(e+i-s)+" "+(t+n-1.2*s)+","+(e+i)+" "+t+","+(e+i)}(0,i.K2)(n,"genPoints");const s=t.append("polygon");s.attr("points",n(e.x,e.y,50,20,7)),s.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,I(t,e)},"drawLabel"),A=(0,i.K2)(function(t,e,n){const i=t.append("g"),s=P();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width,s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,$(i,s),H(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},"drawSection"),L=-1,M=(0,i.K2)(function(t,e,n){const i=e.x+n.width/2,s=t.append("g");L++;s.append("line").attr("id","task"+L).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),E(s,{cx:i,cy:300+30*(5-e.score),score:e.score});const r=P();r.x=e.x,r.y=e.y,r.fill=e.fill,r.width=n.width,r.height=n.height,r.class="task task-type-"+e.num,r.rx=3,r.ry=3,$(s,r),H(n)(e.task,s,r.x,r.y,r.width,r.height,{class:"task"},n,e.colour)},"drawTask"),C=(0,i.K2)(function(t,e){$(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),N=(0,i.K2)(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),P=(0,i.K2)(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),H=function(){function t(t,e,n,i,r,a,o,c){s(e.append("text").attr("x",n+r/2).attr("y",i+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,i,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:d}=c,u=t.split(//gi);for(let p=0;p)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),c=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;se||"
    "===t)&&(r.pop(),c.text(r.join(" ").trim()),r="
    "===t?[""]:[t],c=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))})}(0,i.K2)(j,"wrap");var D=(0,i.K2)(function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),c=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(j,e.width).node().getBBox(),l=i.fontSize?.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=c.height+1.1*l*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),W(a,e,s,i),e},"drawNode"),z=(0,i.K2)(function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(j,e.width).node().getBBox(),r=n.fontSize?.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},"getVirtualNodeHeight"),W=(0,i.K2)(function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},"defaultBkg"),B={drawRect:$,drawCircle:T,drawSection:A,drawText:I,drawLabel:R,drawTask:M,drawBackgroundRect:C,getTextObj:N,getNoteRect:P,initGraphics:O,drawNode:D,getVirtualNodeHeight:z},F=(0,i.K2)(function(t,e,n,r){const a=(0,i.D7)(),o=a.timeline?.leftMargin??50;i.Rm.debug("timeline",r.db);const c=a.securityLevel;let l;"sandbox"===c&&(l=(0,s.Ltv)("#i"+e));const h=("sandbox"===c?(0,s.Ltv)(l.nodes()[0].contentDocument.body):(0,s.Ltv)("body")).select("#"+e);h.append("g");const d=r.db.getTasks(),u=r.db.getCommonDb().getDiagramTitle();i.Rm.debug("task",d),B.initGraphics(h);const p=r.db.getSections();i.Rm.debug("sections",p);let y=0,g=0,f=0,m=0,x=50+o,b=50;m=50;let k=0,_=!0;p.forEach(function(t){const e={number:k,descr:t,section:k,width:150,padding:20,maxHeight:y},n=B.getVirtualNodeHeight(h,e,a);i.Rm.debug("sectionHeight before draw",n),y=Math.max(y,n+20)});let w=0,v=0;i.Rm.debug("tasks.length",d.length);for(const[s,S]of d.entries()){const t={number:s,descr:S,section:S.section,width:150,padding:20,maxHeight:g},e=B.getVirtualNodeHeight(h,t,a);i.Rm.debug("taskHeight before draw",e),g=Math.max(g,e+20),w=Math.max(w,S.events.length);let n=0;for(const i of S.events){const t={descr:i,section:S.section,number:S.section,width:150,padding:20,maxHeight:50};n+=B.getVirtualNodeHeight(h,t,a)}S.events.length>0&&(n+=10*(S.events.length-1)),v=Math.max(v,n)}i.Rm.debug("maxSectionHeight before draw",y),i.Rm.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(t=>{const e=d.filter(e=>e.section===t),n={number:k,descr:t,section:k,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:y};i.Rm.debug("sectionNode",n);const s=h.append("g"),r=B.drawNode(s,n,k,a);i.Rm.debug("sectionNode output",r),s.attr("transform",`translate(${x}, 50)`),b+=y+50,e.length>0&&V(h,e,k,x,b,g,a,w,v,y,!1),x+=200*Math.max(e.length,1),b=50,k++}):(_=!1,V(h,d,k,x,b,g,a,w,v,y,!0));const K=h.node().getBBox();i.Rm.debug("bounds",K),u&&h.append("text").text(u).attr("x",K.width/2-o).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),f=_?y+g+150:g+100;h.append("g").attr("class","lineWrapper").append("line").attr("x1",o).attr("y1",f).attr("x2",K.width+3*o).attr("y2",f).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.ot)(void 0,h,a.timeline?.padding??50,a.timeline?.useMaxWidth??!1)},"draw"),V=(0,i.K2)(function(t,e,n,s,r,a,o,c,l,h,d){for(const u of e){const e={descr:u.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.Rm.debug("taskNode",e);const c=t.append("g").attr("class","taskWrapper"),h=B.drawNode(c,e,n,o).height;if(i.Rm.debug("taskHeight after draw",h),c.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,h),u.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=G(t,u.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+100+l+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!o.timeline?.disableMulticolor&&n++}r-=10},"drawTasks"),G=(0,i.K2)(function(t,e,n,s,r,a){let o=0;const c=r;r+=100;for(const l of e){const e={descr:l,section:n,number:n,width:150,padding:20,maxHeight:50};i.Rm.debug("eventNode",e);const c=t.append("g").attr("class","eventWrapper"),h=B.drawNode(c,e,n,a).height;o+=h,c.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=c,o},"drawEvents"),U={setConf:(0,i.K2)(()=>{},"setConf"),draw:F},q=(0,i.K2)(t=>{let e="";for(let n=0;n`\n .edge {\n stroke-width: 3;\n }\n ${q(t)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${t.git0};\n }\n .section-root text {\n fill: ${t.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`,"getStyles")}}}]); \ No newline at end of file diff --git a/assets/js/375.d9a4328c.js b/assets/js/375.d9a4328c.js deleted file mode 100644 index 7530cc5..0000000 --- a/assets/js/375.d9a4328c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[375],{50487:(t,e,a)=>{function r(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>r}),(0,a(41750).K2)(r,"populateCommonDb")},60375:(t,e,a)=>{a.d(e,{diagram:()=>x});var r=a(50487),n=a(46792),o=a(74505),i=a(41750),l=a(78731),s={packet:[]},c=structuredClone(s),d=i.UI.packet,b=(0,i.K2)(()=>{const t=(0,n.$t)({...d,...(0,i.zj)().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),k=(0,i.K2)(()=>c.packet,"getPacket"),p={pushWord:(0,i.K2)(t=>{t.length>0&&c.packet.push(t)},"pushWord"),getPacket:k,getConfig:b,clear:(0,i.K2)(()=>{(0,i.IU)(),c=structuredClone(s)},"clear"),setAccTitle:i.SV,getAccTitle:i.iN,setDiagramTitle:i.ke,getDiagramTitle:i.ab,getAccDescription:i.m7,setAccDescription:i.EI},h=(0,i.K2)(t=>{(0,r.S)(t,p);let e=-1,a=[],n=1;const{bitsPerRow:o}=p.getConfig();for(let{start:r,end:l,bits:s,label:c}of t.blocks){if(void 0!==r&&void 0!==l&&l{if(void 0===t.start)throw new Error("start should have been set during first phase");if(void 0===t.end)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*a)return[t,void 0];const r=e*a-1,n=e*a;return[{start:t.start,end:r,label:t.label,bits:r-t.start},{start:n,end:t.end,label:t.label,bits:t.end-n}]},"getNextFittingBlock"),u={parse:(0,i.K2)(async t=>{const e=await(0,l.qg)("packet",t);i.Rm.debug(e),h(e)},"parse")},f=(0,i.K2)((t,e,a,r)=>{const n=r.db,l=n.getConfig(),{rowHeight:s,paddingY:c,bitWidth:d,bitsPerRow:b}=l,k=n.getPacket(),p=n.getDiagramTitle(),h=s+c,g=h*(k.length+1)-(p?0:s),u=d*b+2,f=(0,o.D)(e);f.attr("viewbox",`0 0 ${u} ${g}`),(0,i.a$)(f,g,u,l.useMaxWidth);for(const[o,i]of k.entries())w(f,i,o,l);f.append("text").text(p).attr("x",u/2).attr("y",g-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),w=(0,i.K2)((t,e,a,{rowHeight:r,paddingX:n,paddingY:o,bitWidth:i,bitsPerRow:l,showBits:s})=>{const c=t.append("g"),d=a*(r+o)+o;for(const b of e){const t=b.start%l*i+1,e=(b.end-b.start+1)*i-n;if(c.append("rect").attr("x",t).attr("y",d).attr("width",e).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",t+e/2).attr("y",d+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(b.label),!s)continue;const a=b.end===b.start,o=d-2;c.append("text").attr("x",t+(a?e/2:0)).attr("y",o).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",a?"middle":"start").text(b.start),a||c.append("text").attr("x",t+e).attr("y",o).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(b.end)}},"drawWord"),$={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},x={parser:u,db:p,renderer:{draw:f},styles:(0,i.K2)(({packet:t}={})=>{const e=(0,n.$t)($,t);return`\n\t.packetByte {\n\t\tfont-size: ${e.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${e.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${e.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${e.labelColor};\n\t\tfont-size: ${e.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${e.titleColor};\n\t\tfont-size: ${e.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${e.blockStrokeColor};\n\t\tstroke-width: ${e.blockStrokeWidth};\n\t\tfill: ${e.blockFillColor};\n\t}\n\t`},"styles")}}}]); \ No newline at end of file diff --git a/assets/js/3815.0758eb2f.js b/assets/js/3815.0758eb2f.js new file mode 100644 index 0000000..3dc38e8 --- /dev/null +++ b/assets/js/3815.0758eb2f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[3815],{53815:(e,r,s)=>{s.d(r,{diagram:()=>t});var a=s(71746),u=(s(52501),s(89625),s(21152),s(10045),s(5164),s(28698),s(5894),s(63245),s(32387),s(30092),s(13226),s(67633),s(40797)),t={parser:a._$,get db(){return new a.NM},renderer:a.Lh,styles:a.tM,init:(0,u.K2)(e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]); \ No newline at end of file diff --git a/assets/js/3b240eda.0ecd4c67.js b/assets/js/3b240eda.0ecd4c67.js deleted file mode 100644 index b708e30..0000000 --- a/assets/js/3b240eda.0ecd4c67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[3650],{4865:(e,t,s)=>{s.d(t,{A:()=>h});var n=s(96540),a=s(34164),r=s(23104),i=s(47751),o=s(92303);const c={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var d=s(74848);function l({className:e,block:t,selectedValue:s,selectValue:n,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),u=e=>{const t=e.currentTarget,a=o.indexOf(t),r=i[a].value;r!==s&&(l(t),n(r))},p=e=>{let t=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const s=o.indexOf(e.currentTarget)+1;t=o[s]??o[0];break}case"ArrowLeft":{const s=o.indexOf(e.currentTarget)-1;t=o[s]??o[o.length-1];break}}t?.focus()};return(0,d.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":t},e),children:i.map(({value:e,label:t,attributes:n})=>(0,d.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{o.push(e)},onKeyDown:p,onClick:u,...n,className:(0,a.A)("tabs__item",c.tabItem,n?.className,{"tabs__item--active":s===e}),children:t??e},e))})}function u({lazy:e,children:t,selectedValue:s}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===s);return e?(0,n.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,d.jsx)("div",{className:"margin-top--md",children:r.map((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==s}))})}function p(e){const t=(0,i.u)(e);return(0,d.jsxs)("div",{className:(0,a.A)("tabs-container",c.tabList),children:[(0,d.jsx)(l,{...t,...e}),(0,d.jsx)(u,{...t,...e})]})}function h(e){const t=(0,o.default)();return(0,d.jsx)(p,{...e,children:(0,i.v)(e.children)},String(t))}},7112:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>c,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"guides/js-waku/use-waku-react","title":"Build React DApps Using @waku/react","description":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","source":"@site/docs/guides/js-waku/use-waku-react.md","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/use-waku-react","permalink":"/guides/js-waku/use-waku-react","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/use-waku-react.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Build React DApps Using @waku/react","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Encrypt, Decrypt, and Sign Your Messages","permalink":"/guides/js-waku/message-encryption"},"next":{"title":"Scaffold DApps Using @waku/create-app","permalink":"/guides/js-waku/use-waku-create-app"}}');var a=s(74848),r=s(28453),i=s(4865),o=s(19365);const c={title:"Build React DApps Using @waku/react",hide_table_of_contents:!0},d=void 0,l={},u=[{value:"Install the dependencies",id:"install-the-dependencies",level:2},{value:"Initialise the Waku provider",id:"initialise-the-waku-provider",level:2},{value:"Build the application interface",id:"build-the-application-interface",level:2},{value:"Send messages using light push",id:"send-messages-using-light-push",level:2},{value:"Receive messages using filter",id:"receive-messages-using-filter",level:2},{value:"Retrieve messages using store",id:"retrieve-messages-using-store",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.admonition,{type:"caution",children:(0,a.jsxs)(t.p,{children:["Currently, the JavaScript Waku SDK (",(0,a.jsx)(t.code,{children:"@waku/sdk"}),") is ",(0,a.jsx)(t.strong,{children:"NOT compatible"})," with React Native. We plan to add support for React Native in the future."]})}),"\n",(0,a.jsxs)(t.p,{children:["The ",(0,a.jsx)(t.a,{href:"https://www.npmjs.com/package/@waku/react",children:"@waku/react"})," package provides components and UI adapters to integrate ",(0,a.jsx)(t.code,{children:"@waku/sdk"})," into React applications effortlessly. This guide provides detailed steps for using ",(0,a.jsx)(t.code,{children:"@waku/react"})," in your project."]}),"\n",(0,a.jsx)(t.h2,{id:"install-the-dependencies",children:"Install the dependencies"}),"\n",(0,a.jsxs)(t.p,{children:["First, set up a project using any ",(0,a.jsx)(t.a,{href:"https://react.dev/learn/start-a-new-react-project",children:"production-grade React framework"})," or an existing React application. For this guide, we will create a boilerplate using ",(0,a.jsx)(t.a,{href:"https://vitejs.dev/guide/",children:"ViteJS"}),":"]}),"\n","\n",(0,a.jsxs)(i.A,{groupId:"package-manager",children:[(0,a.jsx)(o.A,{value:"npm",label:"NPM",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-shell",children:"npm create vite@latest [PROJECT DIRECTORY] -- --template react\n"})})}),(0,a.jsx)(o.A,{value:"yarn",label:"Yarn",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-shell",children:"yarn create vite [PROJECT DIRECTORY] --template react\n"})})})]}),"\n",(0,a.jsxs)(t.p,{children:["Next, install the required packages for integrating ",(0,a.jsx)(t.code,{children:"@waku/sdk"})," using your preferred package manager:"]}),"\n",(0,a.jsxs)(i.A,{groupId:"package-manager",children:[(0,a.jsx)(o.A,{value:"npm",label:"NPM",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-shell",children:"npm install @waku/react @waku/sdk protobufjs\n"})})}),(0,a.jsx)(o.A,{value:"yarn",label:"Yarn",children:(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-shell",children:"yarn add @waku/react @waku/sdk protobufjs\n"})})})]}),"\n",(0,a.jsx)(t.h2,{id:"initialise-the-waku-provider",children:"Initialise the Waku provider"}),"\n",(0,a.jsxs)(t.p,{children:["In the ",(0,a.jsx)(t.code,{children:"main.jsx"})," file, which serves as the entry point for a React app, we will set up the ",(0,a.jsx)(t.code,{children:"LightNodeProvider"})," ",(0,a.jsx)(t.a,{href:"https://react.dev/reference/react/createContext#provider",children:"context provider"})," to wrap the entire application within the Waku provider. Import the following on top of your file:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="src/main.jsx"',children:"import { LightNodeProvider } from \"@waku/react\";\n\n// Set the Light Node options\nconst NODE_OPTIONS = { defaultBootstrap: true };\n\nReactDOM.createRoot(document.getElementById('root')).render(\n // Use the Light Node context provider\n \n \n \n \n ,\n)\n"})}),"\n",(0,a.jsxs)(t.p,{children:["Next, create and start a ",(0,a.jsx)(t.a,{href:"/learn/glossary#light-node",children:"Light Node"})," using the ",(0,a.jsx)(t.code,{children:"useWaku()"})," function within the ",(0,a.jsx)(t.code,{children:"App.jsx"})," file:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="src/App.jsx"',children:'import { useWaku } from "@waku/react";\n\nfunction App() {\n\t// Create and start a Light Node\n\tconst { node, error, isLoading } = useWaku();\n\n\t// "node" is the created Light Node\n\t// "error" captures any error that occurs during node creation\n\t// "isLoading" indicates whether the node is still being created\n}\n'})}),"\n",(0,a.jsx)(t.h2,{id:"build-the-application-interface",children:"Build the application interface"}),"\n",(0,a.jsxs)(t.p,{children:["Let's build a user interface for sending messages and viewing past messages, modify the ",(0,a.jsx)(t.code,{children:"App.jsx"})," file with the following code block:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="src/App.jsx"',children:'import { useState, useEffect } from \'react\';\nimport { useWaku } from "@waku/react";\nimport { createEncoder, createDecoder } from "@waku/sdk";\nimport protobuf from \'protobufjs\';\nimport \'./App.css\'\n\nfunction App() {\n\tconst [inputMessage, setInputMessage] = useState("");\n\tconst [messages, setMessages] = useState([]);\n\n\t// Update the inputMessage state as the user input changes\n\tconst handleInputChange = (e) => {\n\t\tsetInputMessage(e.target.value);\n\t};\n\n\t// Create and start a Light Node\n\tconst { node, error, isLoading } = useWaku();\n\n\t// Create a message encoder and decoder\n\tconst contentTopic = "/waku-react-guide/1/chat/proto";\n\tconst encoder = createEncoder({ contentTopic });\n\tconst decoder = createDecoder(contentTopic);\n\n\t// Create a message structure using Protobuf\n\tconst DataPacket = new protobuf.Type("DataPacket")\n\t\t.add(new protobuf.Field("timestamp", 1, "uint64"))\n\t\t.add(new protobuf.Field("message", 2, "string"));\n\n\t// Send the message using Light Push\n\tconst sendMessage = async () => {}\n\n\treturn (\n\t\t<>\n\t\t\t
    \n\t\t\t\t

    Waku React Demo

    \n\t\t\t\t
    \n\t\t\t\t\t{messages.map((message, index) => (\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{new Date(message.timestamp).toUTCString()}\n\t\t\t\t\t\t\t
    {message.message}
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t))}\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t)\n}\n\nexport default App\n'})}),"\n",(0,a.jsx)(t.admonition,{type:"info",children:(0,a.jsxs)(t.p,{children:["In the code above, we also created a message ",(0,a.jsx)(t.code,{children:"encoder"})," and ",(0,a.jsx)(t.code,{children:"decoder"})," using the ",(0,a.jsx)(t.code,{children:"createEncoder()"})," and ",(0,a.jsx)(t.code,{children:"createDecoder()"})," functions, along with the application ",(0,a.jsx)(t.a,{href:"/guides/js-waku/#message-structure",children:"message structure"})," with Protobuf."]})}),"\n",(0,a.jsxs)(t.p,{children:["Next, modify the ",(0,a.jsx)(t.code,{children:"App.css"})," file with the following code block:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-css",metastring:'title="src/App.css"',children:"#root {\n\tmargin: 0 auto;\n}\n\n.chat-interface {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100vh;\n\tborder: 1px solid #ccc;\n}\n\n.chat-body {\n\tflex-grow: 1;\n\toverflow-y: auto;\n\tpadding: 10px;\n}\n\n.message-text {\n\tbackground-color: #f1f1f1;\n\tcolor: #000;\n\tpadding: 10px;\n\tmargin-bottom: 10px;\n}\n\n.chat-footer {\n\tdisplay: flex;\n\tpadding: 10px;\n\tbackground-color: #f1f1f1;\n\talign-items: center;\n}\n\n#message-input {\n\tflex-grow: 1;\n\tborder-radius: 4px;\n\tpadding: 10px;\n\tmargin-right: 10px;\n}\n\n.send-button {\n\tbackground-color: #007bff;\n\tborder-radius: 4px;\n}\n"})}),"\n",(0,a.jsx)(t.h2,{id:"send-messages-using-light-push",children:"Send messages using light push"}),"\n",(0,a.jsxs)(t.p,{children:["To send messages in our application, we need to modify the ",(0,a.jsx)(t.code,{children:"sendMessage()"})," function to serialize user input into our Protobuf structure and ",(0,a.jsx)(t.a,{href:"/guides/js-waku/light-send-receive#send-messages-using-light-push",children:"push it to the network"})," using the ",(0,a.jsx)(t.code,{children:"useLightPush()"})," function:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="src/App.jsx"',children:'import { useLightPush } from "@waku/react";\n\nfunction App() {\n\t// Bind push method to a node and encoder\n\tconst { push } = useLightPush({ node, encoder });\n\n\t// Send the message using Light Push\n\tconst sendMessage = async () => {\n\t\tif (!push || inputMessage.length === 0) return;\n\n\t\t// Create a new message object\n\t\tconst timestamp = Date.now();\n\t\tconst protoMessage = DataPacket.create({\n\t\t\ttimestamp: timestamp,\n\t\t\tmessage: inputMessage\n\t\t});\n\n\t\t// Serialise the message and push to the network\n\t\tconst payload = DataPacket.encode(protoMessage).finish();\n\t\tconst { recipients, errors } = await push({ payload, timestamp });\n\n\t\t// Check for errors\n\t\tif (errors.length === 0) {\n\t\t\tsetInputMessage("");\n\t\t\tconsole.log("MESSAGE PUSHED");\n\t\t} else {\n\t\t\tconsole.log(errors);\n\t\t}\n\t};\n}\n'})}),"\n",(0,a.jsx)(t.h2,{id:"receive-messages-using-filter",children:"Receive messages using filter"}),"\n",(0,a.jsxs)(t.p,{children:["To display messages in our application, we need to use the ",(0,a.jsx)(t.code,{children:"useFilterMessages()"})," function to create a ",(0,a.jsx)(t.a,{href:"/guides/js-waku/light-send-receive/#receive-messages-using-filter",children:"Filter subscription"}),", receive incoming messages, and render them in our interface:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="src/App.jsx"',children:'import { useFilterMessages } from "@waku/react";\n\nfunction App() {\n\t// Receive messages from Filter subscription\n\tconst { messages: filterMessages } = useFilterMessages({ node, decoder });\n\n\t// Render the list of messages\n\tuseEffect(() => {\n\t\tsetMessages(filterMessages.map((wakuMessage) => {\n\t\t\tif (!wakuMessage.payload) return;\n\t\t\treturn DataPacket.decode(wakuMessage.payload);\n\t\t}));\n\t}, [filterMessages]);\n}\n'})}),"\n",(0,a.jsx)(t.h2,{id:"retrieve-messages-using-store",children:"Retrieve messages using store"}),"\n",(0,a.jsxs)(t.p,{children:["To display messages from the past, we need to retrieve them from the ",(0,a.jsx)(t.a,{href:"/guides/js-waku/store-retrieve-messages",children:"Store protocol"})," using the ",(0,a.jsx)(t.code,{children:"useStoreMessages()"})," function when our application initialises and then render them alongside newly received messages:"]}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",metastring:'title="src/App.jsx"',children:'import { useFilterMessages, useStoreMessages } from "@waku/react";\n\nfunction App() {\n\t// Query Store peers for past messages\n\tconst { messages: storeMessages } = useStoreMessages({ node, decoder });\n\n\t// Receive messages from Filter subscription\n\tconst { messages: filterMessages } = useFilterMessages({ node, decoder });\n\n\t// Render both past and new messages\n\tuseEffect(() => {\n\t\tconst allMessages = storeMessages.concat(filterMessages);\n\t\tsetMessages(allMessages.map((wakuMessage) => {\n\t\t\tif (!wakuMessage.payload) return;\n\t\t\treturn DataPacket.decode(wakuMessage.payload);\n\t\t}));\n\t}, [filterMessages, storeMessages]);\n}\n'})}),"\n",(0,a.jsx)(t.p,{children:"You can also configure a specific Store peer when creating the node, which is useful when running your own Store node or using a specific node in the network:"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-js",children:'const node = await createLightNode({ \n defaultBootstrap: true,\n store: {\n peer: "/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm..." // multiaddr or PeerId of your Store node\n }\n});\n'})}),"\n",(0,a.jsx)(t.p,{children:"If the specified Store peer is not available, the node will fall back to using random Store peers in the network."}),"\n",(0,a.jsx)(t.admonition,{type:"info",children:(0,a.jsxs)(t.p,{children:["To explore the available Store query options, have a look at the ",(0,a.jsx)(t.a,{href:"/guides/js-waku/store-retrieve-messages#store-query-options",children:"Retrieve Messages Using Store Protocol"})," guide."]})}),"\n",(0,a.jsx)(t.admonition,{type:"tip",children:(0,a.jsxs)(t.p,{children:["You have successfully integrated ",(0,a.jsx)(t.code,{children:"@waku/sdk"})," into a React application using the ",(0,a.jsx)(t.code,{children:"@waku/react"})," package. Have a look at the ",(0,a.jsx)(t.a,{href:"https://github.com/waku-org/js-waku-examples/tree/master/examples/web-chat",children:"web-chat"})," example for a working demo and the ",(0,a.jsx)(t.a,{href:"https://blog.waku.org/2024-01-22-tictactoe-tutorial/",children:"Building a Tic-Tac-Toe Game with Waku"})," tutorial to learn more."]})})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},19365:(e,t,s)=>{s.d(t,{A:()=>i});s(96540);var n=s(34164);const a={tabItem:"tabItem_Ymn6"};var r=s(74848);function i({children:e,hidden:t,className:s}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.A)(a.tabItem,s),hidden:t,children:e})}},28453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>o});var n=s(96540);const a={},r=n.createContext(a);function i(e){const t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fbcf129.a734b8ea.js b/assets/js/3fbcf129.a734b8ea.js deleted file mode 100644 index a3135cd..0000000 --- a/assets/js/3fbcf129.a734b8ea.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[9665],{23830:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>h,contentTitle:()=>r,default:()=>l,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"research/research-and-studies/message-propagation","title":"Message Propagation Times With Waku-RLN","description":"TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it\'s affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.","source":"@site/docs/research/research-and-studies/message-propagation.md","sourceDirName":"research/research-and-studies","slug":"/research/research-and-studies/message-propagation","permalink":"/research/research-and-studies/message-propagation","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/research/research-and-studies/message-propagation.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Message Propagation Times With Waku-RLN"},"sidebar":"research","previous":{"title":"Maximum Bandwidth for Global Adoption","permalink":"/research/research-and-studies/maximum-bandwidth"},"next":{"title":"RLN Key Benchmarks","permalink":"/research/research-and-studies/rln-key-benchmarks"}}');var n=i(74848),a=i(28453);const o={title:"Message Propagation Times With Waku-RLN"},r=void 0,h={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Theory",id:"theory",level:2},{value:"Simulations",id:"simulations",level:2},{value:"Results",id:"results",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"TLDR"}),": We present the results of 1000 ",(0,n.jsx)(s.code,{children:"nwaku"})," nodes running ",(0,n.jsx)(s.code,{children:"rln"})," using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it's affected by i) rln and ii) message size in a real environment. We observe that for messages of ",(0,n.jsx)(s.code,{children:"10kB"})," the average end-to-end propagation delay is ",(0,n.jsx)(s.code,{children:"508 ms"}),". We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. ",(0,n.jsx)(s.code,{children:"500kB"}),". See simulation parameters."]}),"\n",(0,n.jsx)(s.h2,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsxs)(s.p,{children:["Waku uses ",(0,n.jsx)(s.a,{href:"https://rfc.vac.dev/spec/11/",children:"relay"})," as a routing protocol, which is an adaptation of ",(0,n.jsx)(s.a,{href:"https://arxiv.org/pdf/2007.02754.pdf",children:"gossipsub"}),". It routes messages following a publisher/subscriber architecture, where nodes can publish messages or subscribe to topics. If message ",(0,n.jsx)(s.code,{children:"m"})," is published to topic ",(0,n.jsx)(s.code,{children:"t"}),", all ",(0,n.jsx)(s.code,{children:"i"})," nodes ",(0,n.jsx)(s.code,{children:"n_1...n_i"})," subscribed to ",(0,n.jsx)(s.code,{children:"t"})," will get ",(0,n.jsx)(s.code,{children:"m"}),". The ",(0,n.jsx)(s.code,{children:"relay"})," protocol ensures that every node gets the messages of the topics it is subscribed to."]}),"\n",(0,n.jsxs)(s.p,{children:["However, since ",(0,n.jsx)(s.code,{children:"relay"})," works in a decentralized manner, all nodes contribute to the gossiping of a message, until it has successfully reached all the interested nodes (subscribed to it). This means that a message can travel multiple hops until it reaches all nodes. The amount of hops determines the ",(0,n.jsx)(s.strong,{children:"message propagation time"}),", which is measured as the ",(0,n.jsx)(s.strong,{children:"time difference of when the node published the message and when another node received"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"This issue aims to go from theory to practice, by i) understanding message propagation times in theory and ii) presenting nwaku simulation results in an end-to-end setup with rln, with real message propagation times"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"theory",children:"Theory"}),"\n",(0,n.jsxs)(s.p,{children:["Let's start with ",(0,n.jsx)(s.strong,{children:"message propagation times in theory"}),". On a high level, it depends on:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["The gossipsub ",(0,n.jsx)(s.a,{href:"https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.0.md#parameters",children:"configuration"}),", being ",(0,n.jsx)(s.code,{children:"D"})," one of the most important parameters. This sets the hops that a message will travel to reach all nodes. Higher ",(0,n.jsx)(s.code,{children:"D"}),", less hops, less delay. Note that a higher ",(0,n.jsx)(s.code,{children:"D"})," implies more bandwidth consumption."]}),"\n",(0,n.jsx)(s.li,{children:"The node. Different nodes will see different propagation times, because a message can travel different paths. A node connected directly to the publisher (1 hop) will see lower propagation times than other nodes further away."}),"\n",(0,n.jsx)(s.li,{children:"Individual propagation times. Since a message can travel multiple hops to reach its destination, each hop adds a contribution to the overall message propagation time. This individual propagation time depends on the characteristics on the nodes involved in the connections."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["In a D-regular graph, like the one formed by waku nodes around a topic, the maximum amount of hops that a message can travel to reach all nodes can be calculated as ",(0,n.jsx)(s.code,{children:"ceil(log(total_nodes)/log(D))"}),". For example, with log(1000)/log(6) = 3.85 = 4. So in a network with 1000 nodes and ",(0,n.jsx)(s.code,{children:"D=6"}),", no matter which node publishes the message, in 4 hops it will reach all the nodes."]}),"\n",(0,n.jsxs)(s.p,{children:["Notice the ",(0,n.jsx)(s.strong,{children:'"worst case"'})," since some nodes might be directly connected to the publisher, so they will get the message in just 1 hop."]}),"\n",(0,n.jsx)(s.p,{children:"But how long does it take to jump each hop? It depends on:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"The latency between nodes. Can be measured as the time to respond to a ping."}),"\n",(0,n.jsx)(s.li,{children:"The size of the messages. The bigger the message, the more time it takes to transmit."}),"\n",(0,n.jsx)(s.li,{children:"Nodes bandwidth. Sender upload bandwidth and receiver download bandwidth. More important when using big message sizes."}),"\n",(0,n.jsxs)(s.li,{children:["Message validation time. When each node receives a message, it applies some validation to decide if the message is further gossiped or not. In the case of waku, this is RLN (",(0,n.jsx)(s.a,{href:"https://arxiv.org/pdf/2207.00116.pdf",children:"paper"}),", ",(0,n.jsx)(s.a,{href:"https://rfc.vac.dev/spec/32/",children:"rfc"}),")"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Assuming a message ",(0,n.jsx)(s.code,{children:"m"})," that travels 4 hops from node ",(0,n.jsx)(s.code,{children:"n1"})," (publisher) to ",(0,n.jsx)(s.code,{children:"n5"})," (subscriber) we can calculate the message propagation time ",(0,n.jsx)(s.code,{children:"mpt=ipt_1+ipt_2+ipt_3+ipt_4"})," where ",(0,n.jsx)(s.code,{children:"ipt"})," is the individual propagation time between each node in the chain."]}),"\n",(0,n.jsxs)(s.p,{children:["However, specific message propagation times are useless, we need average times under specific conditions. And ",(0,n.jsx)(s.strong,{children:"for this, we need simulations"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"simulations",children:"Simulations"}),"\n",(0,n.jsxs)(s.p,{children:["Using ",(0,n.jsx)(s.a,{href:"https://shadow.github.io/docs/guide/shadow.html",children:"shadow"})," simulator, we have developed a ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/research/tree/master/rln-delay-simulations",children:"tool"})," that allows to simulate message propagation delays of ",(0,n.jsx)(s.code,{children:"nwaku"})," (using a slightly modified ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/nwaku/compare/master...simulations",children:"branch"}),", mainly to instrument it with tools to measure the times + starting from an already connected mesh. Thanks ",(0,n.jsx)(s.a,{href:"https://github.com/menduist",children:"@Menduist"})," for the help. Note that running this simulation requires a significant amount of resources, done with 256 GB of RAM."]}),"\n",(0,n.jsxs)(s.p,{children:["The configuration of the simulation is (see ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/research/blob/master/rln-delay-simulations/shadow.yaml",children:"config"}),"):"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"latency=100ms"}),". Average latency in our current waku network. Thanks ",(0,n.jsx)(s.a,{href:"https://github.com/vpavlin",children:"@vpavlin"})," for the measurements. See ",(0,n.jsx)(s.a,{href:"https://grafana.infra.status.im/d/b819dbfe-acb6-4086-8736-578ca148d7cd/waku-networkmonitor-v2?orgId=1&refresh=30s&viewPanel=12",children:"this"})," for live data."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"down_bandwidth=83Mbps"}),", ",(0,n.jsx)(s.code,{children:"up_bandwidth=38Mbps"}),". As shown in ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/research/issues/31",children:"Table 2"})," that's the worldwide median speed."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"D=6"}),", which is the current ",(0,n.jsx)(s.code,{children:"nwaku"})," ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/nwaku/blob/v0.21.0/waku/waku_relay/protocol.nim#L73-L78",children:"configuration"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"nodes=1000"}),". Amount of nodes used in the simulation"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"nwaku"})," was used with a minor ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/nwaku/compare/master...simulations",children:"modification"})]}),"\n",(0,n.jsxs)(s.li,{children:["A total of ",(0,n.jsx)(s.code,{children:"10"})," messages were published, that led to ",(0,n.jsx)(s.code,{children:"9990"})," received messages."]}),"\n",(0,n.jsxs)(s.li,{children:["Since ",(0,n.jsx)(s.code,{children:"shadow"})," ",(0,n.jsx)(s.strong,{children:"doesn't take into account CPU times"})," (",(0,n.jsx)(s.a,{href:"https://github.com/shadow/shadow/discussions/1675#discussioncomment-7342812",children:"by now"}),"), we simulate it with ",(0,n.jsx)(s.code,{children:"sleepAsync"})," as per ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/research/issues/23",children:"https://github.com/waku-org/research/issues/23"})," findings. ",(0,n.jsx)(s.code,{children:"0.012 seconds"})," for proof verification and ",(0,n.jsx)(s.code,{children:"0.15 seconds"})," for proof generation."]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"results",children:"Results"}),"\n",(0,n.jsxs)(s.p,{children:["The following figure shows the ",(0,n.jsx)(s.strong,{children:"message propagation time with real simulations"}),", showing the distribution in a network with the above configuration with three different message sizes: ",(0,n.jsx)(s.code,{children:"10kB"}),", ",(0,n.jsx)(s.code,{children:"100kB"}),", ",(0,n.jsx)(s.code,{children:"500kB"}),". Note that the whiskers indicate the best/worst values and the box contains P25 to P75 values. Average ",(0,n.jsx)(s.code,{children:"mu"})," and P95 are also shown. Raw data ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/research/tree/master/rln-delay-simulations/raw",children:"here"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"message-latency-distribution",src:i(95134).A+"",width:"2400",height:"1800"})}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Important note"}),". The first messages sent in the simulations are omitted, since they show an abnormal propagation delay that doesn't reflect reality. This is due to how flow control works in TCP, where right after connection, the sender node has no idea of the \"bandwidth\" of the receiver node, so it will start sending packages at a lower rate. This translates into high transmission times, and it's more pronounced when dealing with big message sizes."]}),"\n",(0,n.jsxs)(s.p,{children:["In other words, in a 100Mpbs link, 100Mbits won't be sent in 1 second, or at least not a the beginning, when the node is slowly increasing the rate until based on ACK/NACK ratio. For more information about this, this is explained in ",(0,n.jsx)(s.a,{href:"https://www.youtube.com/watch?v=vb_wjh_nAmo",children:"here"}),"."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Conclusions:"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Using small messages ",(0,n.jsx)(s.code,{children:"10kB"})," the ",(0,n.jsxs)(s.strong,{children:["average propagation delay is ",(0,n.jsx)(s.code,{children:"508 ms"})]}),", quite reasonable for applications using waku. The variance is acceptable, with 95% of the messages arriving in ",(0,n.jsx)(s.code,{children:"<627 ms"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["When using a size of ",(0,n.jsx)(s.code,{children:"10kB"})," we can see that the best case propagation delay is ",(0,n.jsx)(s.code,{children:"263 ms"}),". This corresponds to the nodes that are just 1 hop from the publisher. The proof generation time ",(0,n.jsx)(s.code,{children:"0.15 seconds"})," affects the most, where the rest is the inter-node latency and the transmission of the message itself."]}),"\n",(0,n.jsxs)(s.li,{children:["We can see that the ",(0,n.jsx)(s.strong,{children:"message propagation delay increases with big messages"}),", ",(0,n.jsx)(s.code,{children:"100kB"})," and ",(0,n.jsx)(s.code,{children:"500kB"}),". So its ",(0,n.jsx)(s.strong,{children:"probably not a good idea to use waku for such big messages"}),". Note that these simulations had 1000 nodes, so if we scale it to 10000 or beyond, propagation times would be worse."]}),"\n",(0,n.jsx)(s.li,{children:"Best case propagation time (lower part of the whisker) is quite similar in all cases. This is because it corresponds to the node that is just 1 hop away from the publisher."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Future work"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Current waku ",(0,n.jsx)(s.code,{children:"D"})," ",(0,n.jsx)(s.a,{href:"https://github.com/waku-org/nwaku/blob/v0.21.0/waku/waku_relay/protocol.nim#L73-L78",children:"values"})," (average of 6 ranging from 4 to 12) have a huge impact on the bandwidth that a node consumes. Are we willing to lower D in order to reduce bandwidth but increase message propagation times?"]}),"\n",(0,n.jsxs)(s.li,{children:["Since ",(0,n.jsx)(s.code,{children:"shadow"})," doesn't take CPU time into account, it's currently simulated for rln, which should be the biggest bottleneck. Once ",(0,n.jsx)(s.code,{children:"shadow"})," has ",(0,n.jsx)(s.a,{href:"https://github.com/shadow/shadow/discussions/1675#discussioncomment-7342812",children:"this feature"})," times would be more accurate."]}),"\n"]})]})}function l(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,s,i)=>{i.d(s,{R:()=>o,x:()=>r});var t=i(96540);const n={},a=t.createContext(n);function o(e){const s=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(a.Provider,{value:s},e.children)}},95134:(e,s,i)=>{i.d(s,{A:()=>t});const t=i.p+"assets/images/message-latencies-distribution-3371680debde538ccb37052f55074c49.png"}}]); \ No newline at end of file diff --git a/assets/js/406e0176.80c37701.js b/assets/js/406e0176.80c37701.js deleted file mode 100644 index 975d325..0000000 --- a/assets/js/406e0176.80c37701.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[3922],{4865:(e,n,t)=>{t.d(n,{A:()=>x});var s=t(96540),i=t(34164),r=t(23104),o=t(47751),d=t(92303);const a={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var c=t(74848);function l({className:e,block:n,selectedValue:t,selectValue:s,tabValues:o}){const d=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),h=e=>{const n=e.currentTarget,i=d.indexOf(n),r=o[i].value;r!==t&&(l(n),s(r))},u=e=>{let n=null;switch(e.key){case"Enter":h(e);break;case"ArrowRight":{const t=d.indexOf(e.currentTarget)+1;n=d[t]??d[0];break}case"ArrowLeft":{const t=d.indexOf(e.currentTarget)-1;n=d[t]??d[d.length-1];break}}n?.focus()};return(0,c.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:s})=>(0,c.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{d.push(e)},onKeyDown:u,onClick:h,...s,className:(0,i.A)("tabs__item",a.tabItem,s?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function h({lazy:e,children:n,selectedValue:t}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===t);return e?(0,s.cloneElement)(e,{className:(0,i.A)("margin-top--md",e.props.className)}):null}return(0,c.jsx)("div",{className:"margin-top--md",children:r.map((e,n)=>(0,s.cloneElement)(e,{key:n,hidden:e.props.value!==t}))})}function u(e){const n=(0,o.u)(e);return(0,c.jsxs)("div",{className:(0,i.A)("tabs-container",a.tabList),children:[(0,c.jsx)(l,{...n,...e}),(0,c.jsx)(h,{...n,...e})]})}function x(e){const n=(0,d.default)();return(0,c.jsx)(u,{...e,children:(0,o.v)(e.children)},String(n))}},19365:(e,n,t)=>{t.d(n,{A:()=>o});t(96540);var s=t(34164);const i={tabItem:"tabItem_Ymn6"};var r=t(74848);function o({children:e,hidden:n,className:t}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,s.A)(i.tabItem,t),hidden:n,children:e})}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>d});var s=t(96540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}},60338:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>a,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"guides/nwaku/run-node","title":"Run a Nwaku Node","description":"Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources.","source":"@site/docs/guides/nwaku/run-node.md","sourceDirName":"guides/nwaku","slug":"/guides/nwaku/run-node","permalink":"/guides/nwaku/run-node","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/nwaku/run-node.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Run a Nwaku Node","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Introduction to Waku","permalink":"/"},"next":{"title":"Run Nwaku with Docker Compose","permalink":"/guides/nwaku/run-docker-compose"}}');var i=t(74848),r=t(28453),o=t(4865),d=t(19365);const a={title:"Run a Nwaku Node",hide_table_of_contents:!0},c=void 0,l={},h=[{value:"Get the node binary",id:"get-the-node-binary",level:2},{value:"Run nwaku in Docker (recommended)",id:"run-nwaku-in-docker-recommended",level:4},{value:"Download the binary",id:"download-the-binary",level:4},{value:"Build the binary",id:"build-the-binary",level:4},{value:"Run the node",id:"run-the-node",level:2},{value:"Bootstrap the node",id:"bootstrap-the-node",level:2},{value:"Interact with the node",id:"interact-with-the-node",level:2},{value:"Check the node health status",id:"check-the-node-health-status",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",img:"img",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the ",(0,i.jsx)(n.a,{href:"/learn/concepts/protocols",children:"protocols"})," they want to support based on their needs, motivations, and available resources."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"waku architecture",src:t(84720).A+"",width:"1376",height:"1083"})}),"\n",(0,i.jsxs)(n.p,{children:["This guide provides detailed steps to download, build, configure, and connect a ",(0,i.jsx)(n.code,{children:"nwaku"})," node to the Waku Network. It also includes interacting with the node and finding its addresses."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["We recommend running a ",(0,i.jsx)(n.code,{children:"nwaku"})," node with at least 2GB of RAM, especially if ",(0,i.jsx)(n.code,{children:"WSS"})," is enabled. If running just a ",(0,i.jsx)(n.code,{children:"Relay"})," node, 0.5GB of RAM is sufficient."]})}),"\n",(0,i.jsx)(n.h2,{id:"get-the-node-binary",children:"Get the node binary"}),"\n",(0,i.jsxs)(n.p,{children:["To run a node, you must have the ",(0,i.jsx)(n.code,{children:"nwaku"})," binary. Nwaku provides multiple options for running a node:"]}),"\n",(0,i.jsx)(n.h4,{id:"run-nwaku-in-docker-recommended",children:"Run nwaku in Docker (recommended)"}),"\n",(0,i.jsxs)(n.p,{children:["We recommend ",(0,i.jsx)(n.a,{href:"/guides/nwaku/run-docker-compose",children:"using Docker Compose"})," to run a node because it's the simplest and fastest way to configure and run one:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Documentation"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Docker Compose"}),(0,i.jsxs)(n.td,{children:["Run a ",(0,i.jsx)(n.code,{children:"nwaku"})," node with Docker Compose"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/run-docker-compose",children:"Run Nwaku with Docker Compose"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Docker Container"}),(0,i.jsxs)(n.td,{children:["Run a ",(0,i.jsx)(n.code,{children:"nwaku"})," node in a Docker Container"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/run-docker",children:"Run Nwaku in a Docker Container"})})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"download-the-binary",children:"Download the binary"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Documentation"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Precompiled Binary"}),(0,i.jsxs)(n.td,{children:["Download a precompiled binary of the ",(0,i.jsx)(n.code,{children:"nwaku"})," node"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"https://github.com/waku-org/nwaku/tags",children:"Download Nwaku Binary"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Nightly Release"}),(0,i.jsxs)(n.td,{children:["Try the latest ",(0,i.jsx)(n.code,{children:"nwaku"})," updates without compiling the binaries"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"https://github.com/waku-org/nwaku/releases/tag/nightly",children:"Download Nightly Release"})})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"build-the-binary",children:"Build the binary"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Documentation"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Build from Source"}),(0,i.jsxs)(n.td,{children:["Build the node from the ",(0,i.jsx)(n.a,{href:"https://github.com/waku-org/nwaku",children:"nwaku source code"})]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/build-source",children:"Build Nwaku from Source"})})]})})]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["You can run the ",(0,i.jsx)(n.code,{children:"nwaku"})," binaries and Docker images on cloud service providers like ",(0,i.jsx)(n.a,{href:"https://cloud.google.com/",children:"Google Cloud"}),", ",(0,i.jsx)(n.a,{href:"https://azure.microsoft.com/",children:"Microsoft Azure"}),", ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/",children:"Amazon Web Services"}),", and ",(0,i.jsx)(n.a,{href:"https://www.digitalocean.com/",children:"DigitalOcean"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"run-the-node",children:"Run the node"}),"\n",(0,i.jsxs)(n.p,{children:["Once you have gotten the ",(0,i.jsx)(n.code,{children:"nwaku"})," binary, run it using the ",(0,i.jsx)(n.a,{href:"/guides/nwaku/config-methods#default-configuration-values",children:"default configuration"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"# Run the Docker Compose\ndocker-compose up -d\n\n# Run the standalone binary\n./build/wakunode2\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["To learn how to customise the configuration of a ",(0,i.jsx)(n.code,{children:"nwaku"})," node, have a look at the ",(0,i.jsx)(n.a,{href:"/guides/nwaku/config-methods",children:"Node Configuration Methods"})," and ",(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-nwaku",children:"Node Configuration Examples"})," guides."]})}),"\n",(0,i.jsx)(n.h2,{id:"bootstrap-the-node",children:"Bootstrap the node"}),"\n",(0,i.jsxs)(n.p,{children:["To join the Waku Network, nodes must ",(0,i.jsx)(n.a,{href:"/learn/glossary#bootstrapping",children:"bootstrap"})," for an entry point before discovering more peers. Nwaku provides multiple ",(0,i.jsx)(n.a,{href:"/learn/concepts/peer-discovery",children:"peer discovery"})," mechanisms:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{children:"Description"}),(0,i.jsx)(n.th,{children:"Documentation"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Static Peers"}),(0,i.jsxs)(n.td,{children:["Configure the bootstrap nodes that ",(0,i.jsx)(n.code,{children:"nwaku"})," should establish connections upon startup"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-discovery#configure-static-peers",children:"Configure Static Peers"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"DNS Discovery"}),(0,i.jsxs)(n.td,{children:["Enable ",(0,i.jsx)(n.code,{children:"nwaku"})," to bootstrap nodes using the ",(0,i.jsx)(n.a,{href:"/learn/concepts/dns-discovery",children:"DNS Discovery"})," mechanism"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-discovery#configure-dns-discovery",children:"Configure DNS Discovery"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Discv5"}),(0,i.jsxs)(n.td,{children:["Enable ",(0,i.jsx)(n.code,{children:"nwaku"})," to discover peers using the ",(0,i.jsx)(n.a,{href:"/learn/concepts/discv5",children:"Discv5"})," mechanism"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-discovery#configure-discv5",children:"Configure Discv5"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Peer Exchange"}),(0,i.jsxs)(n.td,{children:["Enable ",(0,i.jsx)(n.a,{href:"/learn/concepts/peer-exchange",children:"Peer Exchange"})," protocol for light nodes to request peers from your ",(0,i.jsx)(n.code,{children:"nwaku"})," node"]}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-discovery#configure-peer-exchange",children:"Configure Peer Exchange"})})]})]})]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["We suggest ",(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-nwaku#configure-websocket-transport",children:"configuring WebSocket transport"})," for your node to enable support and serving of browser peers using ",(0,i.jsx)(n.a,{href:"/guides/js-waku/",children:"@waku/sdk"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"interact-with-the-node",children:"Interact with the node"}),"\n",(0,i.jsxs)(n.p,{children:["You can interact with a running ",(0,i.jsx)(n.code,{children:"nwaku"})," node through the ",(0,i.jsx)(n.a,{href:"https://waku-org.github.io/waku-rest-api/",children:"REST API"}),", such as querying the node information using the ",(0,i.jsx)(n.a,{href:"https://waku-org.github.io/waku-rest-api/#get-/debug/v1/info",children:"Get node info"})," endpoint:"]}),"\n","\n",(0,i.jsxs)(o.A,{children:[(0,i.jsx)(d.A,{value:"request",label:"Request",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"curl --location 'http://127.0.0.1:8645/debug/v1/info' \\\n--header 'Accept: application/json'\n"})})}),(0,i.jsx)(d.A,{value:"response",label:"Response",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "listenAddresses": [\n "/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmUbPquFQqje3jiqoB5YoiUbBya59NB4qqEzeiTNGHeA6w"\n ],\n "enrUri": "enr:-Iu4QCQZXZDb_JsYmLoYor0F5E_95HbIywgO_wgx2rIdDbmCJZkTzmlCr0wmMzV47lgik_tVwww5mIng90Ris83TisMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQPszztG-Ev52ZB7tk0jF8s6Md4KvyY_rhzNZokaaB_ABIN0Y3CC6mCFd2FrdTIB"\n}\n'})})})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"listenAddresses"})," field stores the node's listening addresses, while the ",(0,i.jsx)(n.code,{children:"enrUri"})," field stores the discoverable ",(0,i.jsx)(n.code,{children:"ENR"})," URI for peer discovery."]})}),"\n",(0,i.jsx)(n.h2,{id:"check-the-node-health-status",children:"Check the node health status"}),"\n",(0,i.jsxs)(n.p,{children:["You can check the health status of the node by calling the ",(0,i.jsx)(n.a,{href:"https://waku-org.github.io/waku-rest-api/#get-/health",children:"Get node health status"})," endpoint of the ",(0,i.jsx)(n.a,{href:"https://waku-org.github.io/waku-rest-api/",children:"REST API"}),":"]}),"\n",(0,i.jsxs)(o.A,{children:[(0,i.jsx)(d.A,{value:"request",label:"Request",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"curl --location 'http://127.0.0.1:8645/health' \\\n--header 'Accept: text/plain'\n"})})}),(0,i.jsx)(d.A,{value:"response",label:"Response",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-txt",children:"Node is healthy\n"})})})]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["If you encounter issues running your node or require assistance with anything, please visit the ",(0,i.jsx)(n.a,{href:"https://discord.com/channels/1110799176264056863/1216748184592711691",children:"#node-help channel"})," on our Discord."]})}),"\n",(0,i.jsx)(n.admonition,{title:"Congratulations!",type:"tip",children:(0,i.jsxs)(n.p,{children:["You have successfully started, configured, and connected a ",(0,i.jsx)(n.code,{children:"nwaku"})," node to the Waku Network. Have a look at the ",(0,i.jsx)(n.a,{href:"/guides/nwaku/configure-nwaku",children:"Node Configuration Examples"})," guide to learn how to configure ",(0,i.jsx)(n.code,{children:"nwaku"})," for different use cases."]})})]})}function x(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},84720:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/architecture-c96184127d80feae83e3f85471c5112a.png"}}]); \ No newline at end of file diff --git a/assets/js/41a4e09e.bf585062.js b/assets/js/41a4e09e.bf585062.js new file mode 100644 index 0000000..5855e6f --- /dev/null +++ b/assets/js/41a4e09e.bf585062.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1304],{28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(96540);const r={},a=o.createContext(r);function s(e){const t=o.useContext(a);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(a.Provider,{value:t},e.children)}},96573:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"learn/waku-vs-libp2p","title":"Comparing Waku and libp2p","description":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","source":"@site/docs/learn/waku-vs-libp2p.md","sourceDirName":"learn","slug":"/learn/waku-vs-libp2p","permalink":"/learn/waku-vs-libp2p","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/waku-vs-libp2p.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Comparing Waku and libp2p","hide_table_of_contents":true,"displayed_sidebar":"learn"},"sidebar":"learn","previous":{"title":"RLN Key Benchmarks","permalink":"/learn/research/research-and-studies/rln-key-benchmarks"},"next":{"title":"Glossary","permalink":"/learn/glossary"}}');var r=n(74848),a=n(28453);const s={title:"Comparing Waku and libp2p",hide_table_of_contents:!0,displayed_sidebar:"learn"},i=void 0,l={},c=[{value:"Waku as a service network",id:"waku-as-a-service-network",level:2},{value:"Waku as a turnkey solution",id:"waku-as-a-turnkey-solution",level:2},{value:"Economic spam protection",id:"economic-spam-protection",level:2}];function p(e){const t={a:"a",h2:"h2",p:"p",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting."}),"\n",(0,r.jsx)(t.h2,{id:"waku-as-a-service-network",children:"Waku as a service network"}),"\n",(0,r.jsxs)(t.p,{children:["Waku intends to incentivise mechanisms to run nodes, but it is not part of libp2p's scope. Additionally, users or developers do not have to deploy their infrastructure as a prerequisite to use Waku. It is a service network. However, you are encouraged to ",(0,r.jsx)(t.a,{href:"/run-node",children:"run a node"})," to support and decentralise the network."]}),"\n",(0,r.jsx)(t.h2,{id:"waku-as-a-turnkey-solution",children:"Waku as a turnkey solution"}),"\n",(0,r.jsx)(t.p,{children:"Waku includes various protocols covering the following domains: privacy preservation, censorship resistance, and platform agnosticism, allowing it to run on any platform or environment."}),"\n",(0,r.jsxs)(t.p,{children:["Waku provides out-of-the-box protocols to enable mostly offline/resource-limited devices, ",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#store",children:"Store"}),"/",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#light-push",children:"Light Push"}),"/",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#filter",children:"Filter"})," caters to those use cases."]}),"\n",(0,r.jsx)(t.h2,{id:"economic-spam-protection",children:"Economic spam protection"}),"\n",(0,r.jsxs)(t.p,{children:["libp2p does not have strong spam protection guarantees, ",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#rln-relay",children:"RLN Relay"})," is a protocol being developed by the Waku team towards this goal."]})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/41a4e09e.d73d93a0.js b/assets/js/41a4e09e.d73d93a0.js deleted file mode 100644 index 64469d4..0000000 --- a/assets/js/41a4e09e.d73d93a0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[1304],{28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(96540);const r={},a=o.createContext(r);function s(e){const t=o.useContext(a);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(a.Provider,{value:t},e.children)}},96573:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"learn/waku-vs-libp2p","title":"Comparing Waku and libp2p","description":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","source":"@site/docs/learn/waku-vs-libp2p.md","sourceDirName":"learn","slug":"/learn/waku-vs-libp2p","permalink":"/learn/waku-vs-libp2p","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/learn/waku-vs-libp2p.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"Comparing Waku and libp2p","hide_table_of_contents":true},"sidebar":"learn","previous":{"title":"Research","permalink":"/learn/research"},"next":{"title":"Glossary","permalink":"/learn/glossary"}}');var r=n(74848),a=n(28453);const s={title:"Comparing Waku and libp2p",hide_table_of_contents:!0},i=void 0,l={},c=[{value:"Waku as a service network",id:"waku-as-a-service-network",level:2},{value:"Waku as a turnkey solution",id:"waku-as-a-turnkey-solution",level:2},{value:"Economic spam protection",id:"economic-spam-protection",level:2}];function p(e){const t={a:"a",h2:"h2",p:"p",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting."}),"\n",(0,r.jsx)(t.h2,{id:"waku-as-a-service-network",children:"Waku as a service network"}),"\n",(0,r.jsxs)(t.p,{children:["Waku intends to incentivise mechanisms to run nodes, but it is not part of libp2p's scope. Additionally, users or developers do not have to deploy their infrastructure as a prerequisite to use Waku. It is a service network. However, you are encouraged to ",(0,r.jsx)(t.a,{href:"/#run-a-waku-node",children:"run a node"})," to support and decentralise the network."]}),"\n",(0,r.jsx)(t.h2,{id:"waku-as-a-turnkey-solution",children:"Waku as a turnkey solution"}),"\n",(0,r.jsx)(t.p,{children:"Waku includes various protocols covering the following domains: privacy preservation, censorship resistance, and platform agnosticism, allowing it to run on any platform or environment."}),"\n",(0,r.jsxs)(t.p,{children:["Waku provides out-of-the-box protocols to enable mostly offline/resource-limited devices, ",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#store",children:"Store"}),"/",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#light-push",children:"Light Push"}),"/",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#filter",children:"Filter"})," caters to those use cases."]}),"\n",(0,r.jsx)(t.h2,{id:"economic-spam-protection",children:"Economic spam protection"}),"\n",(0,r.jsxs)(t.p,{children:["libp2p does not have strong spam protection guarantees, ",(0,r.jsx)(t.a,{href:"/learn/concepts/protocols#rln-relay",children:"RLN Relay"})," is a protocol being developed by the Waku team towards this goal."]})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/4379.6b9808a5.js b/assets/js/4379.6b9808a5.js new file mode 100644 index 0000000..d1dc728 --- /dev/null +++ b/assets/js/4379.6b9808a5.js @@ -0,0 +1 @@ +(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4379],{64379:(t,e,n)=>{"use strict";n.d(e,{diagram:()=>It});var i=n(13226),s=n(67633),r=n(40797),a=n(16750),o=n(74353),c=n(68313),l=n(90445),d=n(97375),u=n(70451),h=function(){var t=(0,r.K2)(function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],n=[1,26],i=[1,27],s=[1,28],a=[1,29],o=[1,30],c=[1,31],l=[1,32],d=[1,33],u=[1,34],h=[1,9],f=[1,10],y=[1,11],k=[1,12],m=[1,13],p=[1,14],g=[1,15],b=[1,16],v=[1,19],T=[1,20],x=[1,21],w=[1,22],_=[1,23],D=[1,25],$=[1,35],C={trace:(0,r.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:(0,r.K2)(function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setWeekday("monday");break;case 9:i.setWeekday("tuesday");break;case 10:i.setWeekday("wednesday");break;case 11:i.setWeekday("thursday");break;case 12:i.setWeekday("friday");break;case 13:i.setWeekday("saturday");break;case 14:i.setWeekday("sunday");break;case 15:i.setWeekend("friday");break;case 16:i.setWeekend("saturday");break;case 17:i.setDateFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 18:i.enableInclusiveEndDates(),this.$=r[o].substr(18);break;case 19:i.TopAxis(),this.$=r[o].substr(8);break;case 20:i.setAxisFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 21:i.setTickInterval(r[o].substr(13)),this.$=r[o].substr(13);break;case 22:i.setExcludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 23:i.setIncludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 24:i.setTodayMarker(r[o].substr(12)),this.$=r[o].substr(12);break;case 27:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 28:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 29:case 30:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 31:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 33:i.addTask(r[o-1],r[o]),this.$="task";break;case 34:this.$=r[o-1],i.setClickEvent(r[o-1],r[o],null);break;case 35:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],r[o]);break;case 36:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],null),i.setLink(r[o-2],r[o]);break;case 37:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-2],r[o-1]),i.setLink(r[o-3],r[o]);break;case 38:this.$=r[o-2],i.setClickEvent(r[o-2],r[o],null),i.setLink(r[o-2],r[o-1]);break;case 39:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-1],r[o]),i.setLink(r[o-3],r[o-2]);break;case 40:this.$=r[o-1],i.setLink(r[o-1],r[o]);break;case 41:case 47:this.$=r[o-1]+" "+r[o];break;case 42:case 43:case 45:this.$=r[o-2]+" "+r[o-1]+" "+r[o];break;case 44:case 46:this.$=r[o-3]+" "+r[o-2]+" "+r[o-1]+" "+r[o]}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:i,14:s,15:a,16:o,17:c,18:l,19:18,20:d,21:u,22:h,23:f,24:y,25:k,26:m,27:p,28:g,29:b,30:v,31:T,33:x,35:w,36:_,37:24,38:D,40:$},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:n,13:i,14:s,15:a,16:o,17:c,18:l,19:18,20:d,21:u,22:h,23:f,24:y,25:k,26:m,27:p,28:g,29:b,30:v,31:T,33:x,35:w,36:_,37:24,38:D,40:$},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:(0,r.K2)(function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},"parseError"),parse:(0,r.K2)(function(t){var e=this,n=[0],i=[],s=[null],a=[],o=this.table,c="",l=0,d=0,u=0,h=a.slice.call(arguments,1),f=Object.create(this.lexer),y={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(y.yy[k]=this.yy[k]);f.setInput(t,y.yy),y.yy.lexer=f,y.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var m=f.yylloc;a.push(m);var p=f.options&&f.options.ranges;function g(){var t;return"number"!=typeof(t=i.pop()||f.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,r.K2)(function(t){n.length=n.length-2*t,s.length=s.length-t,a.length=a.length-t},"popStack"),(0,r.K2)(g,"lex");for(var b,v,T,x,w,_,D,$,C,S={};;){if(T=n[n.length-1],this.defaultActions[T]?x=this.defaultActions[T]:(null==b&&(b=g()),x=o[T]&&o[T][b]),void 0===x||!x.length||!x[0]){var K="";for(_ in C=[],o[T])this.terminals_[_]&&_>2&&C.push("'"+this.terminals_[_]+"'");K=f.showPosition?"Parse error on line "+(l+1)+":\n"+f.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(K,{text:f.match,token:this.terminals_[b]||b,line:f.yylineno,loc:m,expected:C})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+T+", token: "+b);switch(x[0]){case 1:n.push(b),s.push(f.yytext),a.push(f.yylloc),n.push(x[1]),b=null,v?(b=v,v=null):(d=f.yyleng,c=f.yytext,l=f.yylineno,m=f.yylloc,u>0&&u--);break;case 2:if(D=this.productions_[x[1]][1],S.$=s[s.length-D],S._$={first_line:a[a.length-(D||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(D||1)].first_column,last_column:a[a.length-1].last_column},p&&(S._$.range=[a[a.length-(D||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[c,d,l,y.yy,x[1],s,a].concat(h))))return w;D&&(n=n.slice(0,-1*D*2),s=s.slice(0,-1*D),a=a.slice(0,-1*D)),n.push(this.productions_[x[1]][0]),s.push(S.$),a.push(S._$),$=o[n[n.length-2]][n[n.length-1]],n.push($);break;case 3:return!0}}return!0},"parse")},S=function(){return{EOF:1,parseError:(0,r.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,r.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,r.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,r.K2)(function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,r.K2)(function(){return this._more=!0,this},"more"),reject:(0,r.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,r.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,r.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,r.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,r.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,r.K2)(function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},"test_match"),next:(0,r.K2)(function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,r.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,r.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,r.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,r.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,r.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,r.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,r.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,r.K2)(function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),31;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),33;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 15:case 18:case 21:case 24:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:case 9:case 10:case 12:case 13:break;case 11:return 10;case 14:this.begin("href");break;case 16:return 43;case 17:this.begin("callbackname");break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 22:return 42;case 23:this.begin("click");break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}}}();function K(){this.yy={}}return C.lexer=S,(0,r.K2)(K,"Parser"),K.prototype=C,C.Parser=K,new K}();h.parser=h;var f=h;o.extend(c),o.extend(l),o.extend(d);var y,k,m={friday:5,saturday:6},p="",g="",b=void 0,v="",T=[],x=[],w=new Map,_=[],D=[],$="",C="",S=["active","done","crit","milestone","vert"],K=[],E=!1,M=!1,A="sunday",L="saturday",Y=0,I=(0,r.K2)(function(){_=[],D=[],$="",K=[],ft=0,y=void 0,k=void 0,pt=[],p="",g="",C="",b=void 0,v="",T=[],x=[],E=!1,M=!1,Y=0,w=new Map,(0,s.IU)(),A="sunday",L="saturday"},"clear"),W=(0,r.K2)(function(t){g=t},"setAxisFormat"),F=(0,r.K2)(function(){return g},"getAxisFormat"),O=(0,r.K2)(function(t){b=t},"setTickInterval"),P=(0,r.K2)(function(){return b},"getTickInterval"),B=(0,r.K2)(function(t){v=t},"setTodayMarker"),z=(0,r.K2)(function(){return v},"getTodayMarker"),N=(0,r.K2)(function(t){p=t},"setDateFormat"),G=(0,r.K2)(function(){E=!0},"enableInclusiveEndDates"),H=(0,r.K2)(function(){return E},"endDatesAreInclusive"),R=(0,r.K2)(function(){M=!0},"enableTopAxis"),j=(0,r.K2)(function(){return M},"topAxisEnabled"),U=(0,r.K2)(function(t){C=t},"setDisplayMode"),V=(0,r.K2)(function(){return C},"getDisplayMode"),Z=(0,r.K2)(function(){return p},"getDateFormat"),X=(0,r.K2)(function(t){T=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),q=(0,r.K2)(function(){return T},"getIncludes"),Q=(0,r.K2)(function(t){x=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),J=(0,r.K2)(function(){return x},"getExcludes"),tt=(0,r.K2)(function(){return w},"getLinks"),et=(0,r.K2)(function(t){$=t,_.push(t)},"addSection"),nt=(0,r.K2)(function(){return _},"getSections"),it=(0,r.K2)(function(){let t=xt();let e=0;for(;!t&&e<10;)t=xt(),e++;return D=pt},"getTasks"),st=(0,r.K2)(function(t,e,n,i){const s=t.format(e.trim()),r=t.format("YYYY-MM-DD");return!i.includes(s)&&!i.includes(r)&&(!(!n.includes("weekends")||t.isoWeekday()!==m[L]&&t.isoWeekday()!==m[L]+1)||(!!n.includes(t.format("dddd").toLowerCase())||(n.includes(s)||n.includes(r))))},"isInvalidDate"),rt=(0,r.K2)(function(t){A=t},"setWeekday"),at=(0,r.K2)(function(){return A},"getWeekday"),ot=(0,r.K2)(function(t){L=t},"setWeekend"),ct=(0,r.K2)(function(t,e,n,i){if(!n.length||t.manualEndTime)return;let s,r;s=t.startTime instanceof Date?o(t.startTime):o(t.startTime,e,!0),s=s.add(1,"d"),r=t.endTime instanceof Date?o(t.endTime):o(t.endTime,e,!0);const[a,c]=lt(s,r,e,n,i);t.endTime=a.toDate(),t.renderEndTime=c},"checkTaskDates"),lt=(0,r.K2)(function(t,e,n,i,s){let r=!1,a=null;for(;t<=e;)r||(a=e.toDate()),r=st(t,n,i,s),r&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,a]},"fixTaskDates"),dt=(0,r.K2)(function(t,e,n){if(n=n.trim(),("x"===e.trim()||"X"===e.trim())&&/^\d+$/.test(n))return new Date(Number(n));const i=/^after\s+(?[\d\w- ]+)/.exec(n);if(null!==i){let t=null;for(const n of i.groups.ids.split(" ")){let e=vt(n);void 0!==e&&(!t||e.endTime>t.endTime)&&(t=e)}if(t)return t.endTime;const e=new Date;return e.setHours(0,0,0,0),e}let s=o(n,e.trim(),!0);if(s.isValid())return s.toDate();{r.Rm.debug("Invalid date:"+n),r.Rm.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime())||t.getFullYear()<-1e4||t.getFullYear()>1e4)throw new Error("Invalid date:"+n);return t}},"getStartDate"),ut=(0,r.K2)(function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),ht=(0,r.K2)(function(t,e,n,i=!1){n=n.trim();const s=/^until\s+(?[\d\w- ]+)/.exec(n);if(null!==s){let t=null;for(const n of s.groups.ids.split(" ")){let e=vt(n);void 0!==e&&(!t||e.startTime{window.open(n,"_self")}),w.set(t,n))}),_t(t,"clickable")},"setLink"),_t=(0,r.K2)(function(t,e){t.split(",").forEach(function(t){let n=vt(t);void 0!==n&&n.classes.push(e)})},"setClass"),Dt=(0,r.K2)(function(t,e,n){if("loose"!==(0,s.D7)().securityLevel)return;if(void 0===e)return;let r=[];if("string"==typeof n){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t{i._K.runFunc(e,...r)})},"setClickFun"),$t=(0,r.K2)(function(t,e){K.push(function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",function(){e()})},function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",function(){e()})})},"pushFun"),Ct=(0,r.K2)(function(t,e,n){t.split(",").forEach(function(t){Dt(t,e,n)}),_t(t,"clickable")},"setClickEvent"),St=(0,r.K2)(function(t){K.forEach(function(e){e(t)})},"bindFunctions"),Kt={getConfig:(0,r.K2)(()=>(0,s.D7)().gantt,"getConfig"),clear:I,setDateFormat:N,getDateFormat:Z,enableInclusiveEndDates:G,endDatesAreInclusive:H,enableTopAxis:R,topAxisEnabled:j,setAxisFormat:W,getAxisFormat:F,setTickInterval:O,getTickInterval:P,setTodayMarker:B,getTodayMarker:z,setAccTitle:s.SV,getAccTitle:s.iN,setDiagramTitle:s.ke,getDiagramTitle:s.ab,setDisplayMode:U,getDisplayMode:V,setAccDescription:s.EI,getAccDescription:s.m7,addSection:et,getSections:nt,getTasks:it,addTask:bt,findTaskById:vt,addTaskOrg:Tt,setIncludes:X,getIncludes:q,setExcludes:Q,getExcludes:J,setClickEvent:Ct,setLink:wt,getLinks:tt,bindFunctions:St,parseDuration:ut,isInvalidDate:st,setWeekday:rt,getWeekday:at,setWeekend:ot};function Et(t,e,n){let i=!0;for(;i;)i=!1,n.forEach(function(n){const s=new RegExp("^\\s*"+n+"\\s*$");t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)})}(0,r.K2)(Et,"getTaskTags");var Mt,At=(0,r.K2)(function(){r.Rm.debug("Something is calling, setConf, remove the call")},"setConf"),Lt={monday:u.ABi,tuesday:u.PGu,wednesday:u.GuW,thursday:u.Mol,friday:u.TUC,saturday:u.rGn,sunday:u.YPH},Yt=(0,r.K2)((t,e)=>{let n=[...t].map(()=>-1/0),i=[...t].sort((t,e)=>t.startTime-e.startTime||t.order-e.order),s=0;for(const r of i)for(let t=0;t=n[t]){n[t]=r.endTime,r.order=t+e,t>s&&(s=t);break}return s},"getMaxIntersections"),It={parser:f,db:Kt,renderer:{setConf:At,draw:(0,r.K2)(function(t,e,n,i){const a=(0,s.D7)().gantt,c=(0,s.D7)().securityLevel;let l;"sandbox"===c&&(l=(0,u.Ltv)("#i"+e));const d="sandbox"===c?(0,u.Ltv)(l.nodes()[0].contentDocument.body):(0,u.Ltv)("body"),h="sandbox"===c?l.nodes()[0].contentDocument:document,f=h.getElementById(e);void 0===(Mt=f.parentElement.offsetWidth)&&(Mt=1200),void 0!==a.useWidth&&(Mt=a.useWidth);const y=i.db.getTasks();let k=[];for(const s of y)k.push(s.type);k=C(k);const m={};let p=2*a.topPadding;if("compact"===i.db.getDisplayMode()||"compact"===a.displayMode){const t={};for(const n of y)void 0===t[n.section]?t[n.section]=[n]:t[n.section].push(n);let e=0;for(const n of Object.keys(t)){const i=Yt(t[n],e)+1;e+=i,p+=i*(a.barHeight+a.barGap),m[n]=i}}else{p+=y.length*(a.barHeight+a.barGap);for(const t of k)m[t]=y.filter(e=>e.type===t).length}f.setAttribute("viewBox","0 0 "+Mt+" "+p);const g=d.select(`[id="${e}"]`),b=(0,u.w7C)().domain([(0,u.jkA)(y,function(t){return t.startTime}),(0,u.T9B)(y,function(t){return t.endTime})]).rangeRound([0,Mt-a.leftPadding-a.rightPadding]);function v(t,e){const n=t.startTime,i=e.startTime;let s=0;return n>i?s=1:nt.vert===e.vert?0:t.vert?1:-1);const h=[...new Set(t.map(t=>t.order))].map(e=>t.find(t=>t.order===e));g.append("g").selectAll("rect").data(h).enter().append("rect").attr("x",0).attr("y",function(t,e){return t.order*n+r-2}).attr("width",function(){return d-a.rightPadding/2}).attr("height",n).attr("class",function(t){for(const[e,n]of k.entries())if(t.type===n)return"section section"+e%a.numberSectionStyles;return"section section0"}).enter();const f=g.append("g").selectAll("rect").data(t).enter(),m=i.db.getLinks();f.append("rect").attr("id",function(t){return t.id}).attr("rx",3).attr("ry",3).attr("x",function(t){return t.milestone?b(t.startTime)+o+.5*(b(t.endTime)-b(t.startTime))-.5*c:b(t.startTime)+o}).attr("y",function(t,e){return e=t.order,t.vert?a.gridLineStartPadding:e*n+r}).attr("width",function(t){return t.milestone?c:t.vert?.08*c:b(t.renderEndTime||t.endTime)-b(t.startTime)}).attr("height",function(t){return t.vert?y.length*(a.barHeight+a.barGap)+2*a.barHeight:c}).attr("transform-origin",function(t,e){return e=t.order,(b(t.startTime)+o+.5*(b(t.endTime)-b(t.startTime))).toString()+"px "+(e*n+r+.5*c).toString()+"px"}).attr("class",function(t){let e="";t.classes.length>0&&(e=t.classes.join(" "));let n=0;for(const[s,r]of k.entries())t.type===r&&(n=s%a.numberSectionStyles);let i="";return t.active?t.crit?i+=" activeCrit":i=" active":t.done?i=t.crit?" doneCrit":" done":t.crit&&(i+=" crit"),0===i.length&&(i=" task"),t.milestone&&(i=" milestone "+i),t.vert&&(i=" vert "+i),i+=n,i+=" "+e,"task"+i}),f.append("text").attr("id",function(t){return t.id+"-text"}).text(function(t){return t.task}).attr("font-size",a.fontSize).attr("x",function(t){let e=b(t.startTime),n=b(t.renderEndTime||t.endTime);if(t.milestone&&(e+=.5*(b(t.endTime)-b(t.startTime))-.5*c,n=e+c),t.vert)return b(t.startTime)+o;const i=this.getBBox().width;return i>n-e?n+i+1.5*a.leftPadding>d?e+o-5:n+o+5:(n-e)/2+e+o}).attr("y",function(t,e){return t.vert?a.gridLineStartPadding+y.length*(a.barHeight+a.barGap)+60:t.order*n+a.barHeight/2+(a.fontSize/2-2)+r}).attr("text-height",c).attr("class",function(t){const e=b(t.startTime);let n=b(t.endTime);t.milestone&&(n=e+c);const i=this.getBBox().width;let s="";t.classes.length>0&&(s=t.classes.join(" "));let r=0;for(const[c,l]of k.entries())t.type===l&&(r=c%a.numberSectionStyles);let o="";return t.active&&(o=t.crit?"activeCritText"+r:"activeText"+r),t.done?o=t.crit?o+" doneCritText"+r:o+" doneText"+r:t.crit&&(o=o+" critText"+r),t.milestone&&(o+=" milestoneText"),t.vert&&(o+=" vertText"),i>n-e?n+i+1.5*a.leftPadding>d?s+" taskTextOutsideLeft taskTextOutside"+r+" "+o:s+" taskTextOutsideRight taskTextOutside"+r+" "+o+" width-"+i:s+" taskText taskText"+r+" "+o+" width-"+i});if("sandbox"===(0,s.D7)().securityLevel){let t;t=(0,u.Ltv)("#i"+e);const n=t.nodes()[0].contentDocument;f.filter(function(t){return m.has(t.id)}).each(function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const s=e.parentNode;var r=n.createElement("a");r.setAttribute("xlink:href",m.get(t.id)),r.setAttribute("target","_top"),s.appendChild(r),r.appendChild(e),r.appendChild(i)})}}function w(t,e,n,s,c,l,d,u){if(0===d.length&&0===u.length)return;let h,f;for(const{startTime:i,endTime:r}of l)(void 0===h||if)&&(f=r);if(!h||!f)return;if(o(f).diff(o(h),"year")>5)return void r.Rm.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");const y=i.db.getDateFormat(),k=[];let m=null,p=o(h);for(;p.valueOf()<=f;)i.db.isInvalidDate(p,y,d,u)?m?m.end=p:m={start:p,end:p}:m&&(k.push(m),m=null),p=p.add(1,"d");g.append("g").selectAll("rect").data(k).enter().append("rect").attr("id",t=>"exclude-"+t.start.format("YYYY-MM-DD")).attr("x",t=>b(t.start.startOf("day"))+n).attr("y",a.gridLineStartPadding).attr("width",t=>b(t.end.endOf("day"))-b(t.start.startOf("day"))).attr("height",c-e-a.gridLineStartPadding).attr("transform-origin",function(e,i){return(b(e.start)+n+.5*(b(e.end)-b(e.start))).toString()+"px "+(i*t+.5*c).toString()+"px"}).attr("class","exclude-range")}function _(t,e,n,s){const r=i.db.getDateFormat(),o=i.db.getAxisFormat();let c;c=o||("D"===r?"%d":a.axisFormat??"%Y-%m-%d");let l=(0,u.l78)(b).tickSize(-s+e+a.gridLineStartPadding).tickFormat((0,u.DCK)(c));const d=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||a.tickInterval);if(null!==d){const t=d[1],e=d[2],n=i.db.getWeekday()||a.weekday;switch(e){case"millisecond":l.ticks(u.t6C.every(t));break;case"second":l.ticks(u.ucG.every(t));break;case"minute":l.ticks(u.wXd.every(t));break;case"hour":l.ticks(u.Agd.every(t));break;case"day":l.ticks(u.UAC.every(t));break;case"week":l.ticks(Lt[n].every(t));break;case"month":l.ticks(u.Ui6.every(t))}}if(g.append("g").attr("class","grid").attr("transform","translate("+t+", "+(s-50)+")").call(l).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||a.topAxis){let n=(0,u.tlR)(b).tickSize(-s+e+a.gridLineStartPadding).tickFormat((0,u.DCK)(c));if(null!==d){const t=d[1],e=d[2],s=i.db.getWeekday()||a.weekday;switch(e){case"millisecond":n.ticks(u.t6C.every(t));break;case"second":n.ticks(u.ucG.every(t));break;case"minute":n.ticks(u.wXd.every(t));break;case"hour":n.ticks(u.Agd.every(t));break;case"day":n.ticks(u.UAC.every(t));break;case"week":n.ticks(Lt[s].every(t));break;case"month":n.ticks(u.Ui6.every(t))}}g.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function D(t,e){let n=0;const i=Object.keys(m).map(t=>[t,m[t]]);g.append("g").selectAll("text").data(i).enter().append(function(t){const e=t[0].split(s.Y2.lineBreakRegex),n=-(e.length-1)/2,i=h.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[s,r]of e.entries()){const t=h.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),s>0&&t.setAttribute("dy","1em"),t.textContent=r,i.appendChild(t)}return i}).attr("x",10).attr("y",function(s,r){if(!(r>0))return s[1]*t/2+e;for(let a=0;a`\n .mermaid-main-font {\n font-family: ${t.fontFamily};\n }\n\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: ${t.fontFamily};\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: ${t.fontFamily};\n }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n font-family: ${t.fontFamily};\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .vert {\n stroke: ${t.vertLineColor};\n }\n\n .vertText {\n font-size: 15px;\n text-anchor: middle;\n fill: ${t.vertLineColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.titleColor||t.textColor};\n font-family: ${t.fontFamily};\n }\n`,"getStyles")}},68313:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var s=function(e){return e.add(4-e.isoWeekday(),t)},r=n.prototype;r.isoWeekYear=function(){return s(this).year()},r.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,r,a,o=s(this),c=(n=this.isoWeekYear(),a=4-(r=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),r.isoWeekday()>4&&(a+=7),r.add(a,t));return o.diff(c,"week")+1},r.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var a=r.startOf;r.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(t,e)}}}()},90445:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d/,i=/\d\d/,s=/\d\d?/,r=/\d*[^-_:/,()\s\d]+/,a={},o=function(t){return(t=+t)+(t>68?1900:2e3)},c=function(t){return function(e){this[t]=+e}},l=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],d=function(t){var e=a[t];return e&&(e.indexOf?e:e.s.concat(e.f))},u=function(t,e){var n,i=a.meridiem;if(i){for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,e))>-1){n=s>12;break}}else n=t===(e?"pm":"PM");return n},h={A:[r,function(t){this.afternoon=u(t,!1)}],a:[r,function(t){this.afternoon=u(t,!0)}],Q:[n,function(t){this.month=3*(t-1)+1}],S:[n,function(t){this.milliseconds=100*+t}],SS:[i,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[s,c("seconds")],ss:[s,c("seconds")],m:[s,c("minutes")],mm:[s,c("minutes")],H:[s,c("hours")],h:[s,c("hours")],HH:[s,c("hours")],hh:[s,c("hours")],D:[s,c("day")],DD:[i,c("day")],Do:[r,function(t){var e=a.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],w:[s,c("week")],ww:[i,c("week")],M:[s,c("month")],MM:[i,c("month")],MMM:[r,function(t){var e=d("months"),n=(d("monthsShort")||e.map(function(t){return t.slice(0,3)})).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[r,function(t){var e=d("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,c("year")],YY:[i,function(t){this.year=o(t)}],YYYY:[/\d{4}/,c("year")],Z:l,ZZ:l};function f(n){var i,s;i=n,s=a&&a.formats;for(var r=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(e,n,i){var r=i&&i.toUpperCase();return n||s[i]||t[i]||s[r].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(t,e,n){return e||n.slice(1)})})).match(e),o=r.length,c=0;c-1)return new Date(("X"===e?1e3:1)*t);var s=f(e)(t),r=s.year,a=s.month,o=s.day,c=s.hours,l=s.minutes,d=s.seconds,u=s.milliseconds,h=s.zone,y=s.week,k=new Date,m=o||(r||a?1:k.getDate()),p=r||k.getFullYear(),g=0;r&&!a||(g=a>0?a-1:k.getMonth());var b,v=c||0,T=l||0,x=d||0,w=u||0;return h?new Date(Date.UTC(p,g,m,v,T,x,w+60*h.offset*1e3)):n?new Date(Date.UTC(p,g,m,v,T,x,w)):(b=new Date(p,g,m,v,T,x,w),y&&(b=i(b).week(y).toDate()),b)}catch(t){return new Date("")}}(e,o,i,n),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),d&&e!=this.format(o)&&(this.$d=new Date("")),a={}}else if(o instanceof Array)for(var h=o.length,y=1;y<=h;y+=1){r[1]=o[y-1];var k=n.apply(this,r);if(k.isValid()){this.$d=k.$d,this.$L=k.$L,this.init();break}y===h&&(this.$d=new Date(""))}else s.call(this,t)}}}()},97375:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var s=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return s.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return s.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return s.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}});return i.bind(this)(r)}}}()}}]); \ No newline at end of file diff --git a/assets/js/4458.01dcea8e.js b/assets/js/4458.01dcea8e.js deleted file mode 100644 index b81e22c..0000000 --- a/assets/js/4458.01dcea8e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4458],{24651:(t,e,n)=>{n.d(e,{o:()=>i});var i=(0,n(41750).K2)(()=>"\n /* Font Awesome icon styling - consolidated */\n .label-icon {\n display: inline-block;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n \n .node .label-icon path {\n fill: currentColor;\n stroke: revert;\n stroke-width: revert;\n }\n","getIconStyles")},94458:(t,e,n)=>{n.d(e,{diagram:()=>J});var i=n(95237),s=n(24651),r=n(41750),a=n(70451),o=function(){var t=(0,r.K2)(function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},"o"),e=[6,8,10,11,12,14,16,17,18],n=[1,9],i=[1,10],s=[1,11],a=[1,12],o=[1,13],l=[1,14],c={trace:(0,r.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:(0,r.K2)(function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 13:i.addTask(r[o-1],r[o]),this.$="task"}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:a,17:o,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:n,12:i,14:s,16:a,17:o,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:(0,r.K2)(function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},"parseError"),parse:(0,r.K2)(function(t){var e=this,n=[0],i=[],s=[null],a=[],o=this.table,l="",c=0,h=0,u=0,y=a.slice.call(arguments,1),p=Object.create(this.lexer),d={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(d.yy[f]=this.yy[f]);p.setInput(t,d.yy),d.yy.lexer=p,d.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var g=p.yylloc;a.push(g);var x=p.options&&p.options.ranges;function m(){var t;return"number"!=typeof(t=i.pop()||p.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,r.K2)(function(t){n.length=n.length-2*t,s.length=s.length-t,a.length=a.length-t},"popStack"),(0,r.K2)(m,"lex");for(var k,_,b,w,v,K,$,T,M,S={};;){if(b=n[n.length-1],this.defaultActions[b]?w=this.defaultActions[b]:(null==k&&(k=m()),w=o[b]&&o[b][k]),void 0===w||!w.length||!w[0]){var C="";for(K in M=[],o[b])this.terminals_[K]&&K>2&&M.push("'"+this.terminals_[K]+"'");C=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+M.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==k?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(C,{text:p.match,token:this.terminals_[k]||k,line:p.yylineno,loc:g,expected:M})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+k);switch(w[0]){case 1:n.push(k),s.push(p.yytext),a.push(p.yylloc),n.push(w[1]),k=null,_?(k=_,_=null):(h=p.yyleng,l=p.yytext,c=p.yylineno,g=p.yylloc,u>0&&u--);break;case 2:if($=this.productions_[w[1]][1],S.$=s[s.length-$],S._$={first_line:a[a.length-($||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-($||1)].first_column,last_column:a[a.length-1].last_column},x&&(S._$.range=[a[a.length-($||1)].range[0],a[a.length-1].range[1]]),void 0!==(v=this.performAction.apply(S,[l,h,c,d.yy,w[1],s,a].concat(y))))return v;$&&(n=n.slice(0,-1*$*2),s=s.slice(0,-1*$),a=a.slice(0,-1*$)),n.push(this.productions_[w[1]][0]),s.push(S.$),a.push(S._$),T=o[n[n.length-2]][n[n.length-1]],n.push(T);break;case 3:return!0}}return!0},"parse")},h=function(){return{EOF:1,parseError:(0,r.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,r.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,r.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,r.K2)(function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,r.K2)(function(){return this._more=!0,this},"more"),reject:(0,r.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,r.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,r.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,r.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,r.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,r.K2)(function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},"test_match"),next:(0,r.K2)(function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;re[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,r.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,r.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,r.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,r.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,r.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,r.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,r.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,r.K2)(function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}}}();function u(){this.yy={}}return c.lexer=h,(0,r.K2)(u,"Parser"),u.prototype=c,c.Parser=u,new u}();o.parser=o;var l=o,c="",h=[],u=[],y=[],p=(0,r.K2)(function(){h.length=0,u.length=0,c="",y.length=0,(0,r.IU)()},"clear"),d=(0,r.K2)(function(t){c=t,h.push(t)},"addSection"),f=(0,r.K2)(function(){return h},"getSections"),g=(0,r.K2)(function(){let t=_();let e=0;for(;!t&&e<100;)t=_(),e++;return u.push(...y),u},"getTasks"),x=(0,r.K2)(function(){const t=[];u.forEach(e=>{e.people&&t.push(...e.people)});return[...new Set(t)].sort()},"updateActors"),m=(0,r.K2)(function(t,e){const n=e.substr(1).split(":");let i=0,s=[];1===n.length?(i=Number(n[0]),s=[]):(i=Number(n[0]),s=n[1].split(","));const r=s.map(t=>t.trim()),a={section:c,type:c,people:r,task:t,score:i};y.push(a)},"addTask"),k=(0,r.K2)(function(t){const e={section:c,type:c,description:t,task:t,classes:[]};u.push(e)},"addTaskOrg"),_=(0,r.K2)(function(){const t=(0,r.K2)(function(t){return y[t].processed},"compileTask");let e=!0;for(const[n,i]of y.entries())t(n),e=e&&i.processed;return e},"compileTasks"),b=(0,r.K2)(function(){return x()},"getActors"),w={getConfig:(0,r.K2)(()=>(0,r.D7)().journey,"getConfig"),clear:p,setDiagramTitle:r.ke,getDiagramTitle:r.ab,setAccTitle:r.SV,getAccTitle:r.iN,setAccDescription:r.EI,getAccDescription:r.m7,addSection:d,getSections:f,getTasks:g,addTask:m,addTaskOrg:k,getActors:b},v=(0,r.K2)(t=>`.label {\n font-family: ${t.fontFamily};\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n font-family: ${t.fontFamily};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${t.fontFamily};\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n ${(0,s.o)()}\n`,"getStyles"),K=(0,r.K2)(function(t,e){return(0,i.tk)(t,e)},"drawRect"),$=(0,r.K2)(function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),s=t.append("g");function o(t){const i=(0,a.JLW)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function l(t){const i=(0,a.JLW)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}function c(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),s.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),(0,r.K2)(o,"smile"),(0,r.K2)(l,"sad"),(0,r.K2)(c,"ambivalent"),e.score>3?o(s):e.score<3?l(s):c(s),i},"drawFace"),T=(0,r.K2)(function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},"drawCircle"),M=(0,r.K2)(function(t,e){return(0,i.m)(t,e)},"drawText"),S=(0,r.K2)(function(t,e){function n(t,e,n,i,s){return t+","+e+" "+(t+n)+","+e+" "+(t+n)+","+(e+i-s)+" "+(t+n-1.2*s)+","+(e+i)+" "+t+","+(e+i)}(0,r.K2)(n,"genPoints");const i=t.append("polygon");i.attr("points",n(e.x,e.y,50,20,7)),i.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,M(t,e)},"drawLabel"),C=(0,r.K2)(function(t,e,n){const s=t.append("g"),r=(0,i.PB)();r.x=e.x,r.y=e.y,r.fill=e.fill,r.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),r.height=n.height,r.class="journey-section section-type-"+e.num,r.rx=3,r.ry=3,K(s,r),A(n)(e.text,s,r.x,r.y,r.width,r.height,{class:"journey-section section-type-"+e.num},n,e.colour)},"drawSection"),E=-1,I=(0,r.K2)(function(t,e,n){const s=e.x+n.width/2,r=t.append("g");E++;r.append("line").attr("id","task"+E).attr("x1",s).attr("y1",e.y).attr("x2",s).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),$(r,{cx:s,cy:300+30*(5-e.score),score:e.score});const a=(0,i.PB)();a.x=e.x,a.y=e.y,a.fill=e.fill,a.width=n.width,a.height=n.height,a.class="task task-type-"+e.num,a.rx=3,a.ry=3,K(r,a);let o=e.x+14;e.people.forEach(t=>{const n=e.actors[t].color,i={cx:o,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};T(r,i),o+=10}),A(n)(e.task,r,a.x,a.y,a.width,a.height,{class:"task"},n,e.colour)},"drawTask"),P=(0,r.K2)(function(t,e){(0,i.lC)(t,e)},"drawBackgroundRect"),A=function(){function t(t,e,n,s,r,a,o,l){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,l,c){const{taskFontSize:h,taskFontFamily:u}=l,y=t.split(//gi);for(let p=0;p{const r=F[s].color,a={cx:20,cy:i,r:7,fill:r,stroke:"#000",pos:F[s].position};j.drawCircle(t,a);let o=t.append("text").attr("visibility","hidden").text(s);const l=o.node().getBoundingClientRect().width;o.remove();let c=[];if(l<=n)c=[s];else{const e=s.split(" ");let i="";o=t.append("text").attr("visibility","hidden"),e.forEach(t=>{const e=i?`${i} ${t}`:t;o.text(e);if(o.node().getBoundingClientRect().width>n){if(i&&c.push(i),i=t,o.text(t),o.node().getBoundingClientRect().width>n){let e="";for(const i of t)e+=i,o.text(e+"-"),o.node().getBoundingClientRect().width>n&&(c.push(e.slice(0,-1)+"-"),e=i);i=e}}else i=e}),i&&c.push(i),o.remove()}c.forEach((n,s)=>{const r={x:40,y:i+7+20*s,fill:"#666",text:n,textMargin:e.boxTextMargin??5},a=j.drawText(t,r).node().getBoundingClientRect().width;a>L&&a>e.leftMargin-a&&(L=a)}),i+=Math.max(20,20*c.length)})}(0,r.K2)(D,"drawActorLegend");var V=(0,r.D7)().journey,R=0,O=(0,r.K2)(function(t,e,n,i){const s=(0,r.D7)(),o=s.journey.titleColor,l=s.journey.titleFontSize,c=s.journey.titleFontFamily,h=s.securityLevel;let u;"sandbox"===h&&(u=(0,a.Ltv)("#i"+e));const y="sandbox"===h?(0,a.Ltv)(u.nodes()[0].contentDocument.body):(0,a.Ltv)("body");N.init();const p=y.select("#"+e);j.initGraphics(p);const d=i.db.getTasks(),f=i.db.getDiagramTitle(),g=i.db.getActors();for(const r in F)delete F[r];let x=0;g.forEach(t=>{F[t]={color:V.actorColours[x%V.actorColours.length],position:x},x++}),D(p),R=V.leftMargin+L,N.insert(0,0,R,50*Object.keys(F).length),Y(p,d,0);const m=N.getBounds();f&&p.append("text").text(f).attr("x",R).attr("font-size",l).attr("font-weight","bold").attr("y",25).attr("fill",o).attr("font-family",c);const k=m.stopy-m.starty+2*V.diagramMarginY,_=R+m.stopx+2*V.diagramMarginX;(0,r.a$)(p,k,_,V.useMaxWidth),p.append("line").attr("x1",R).attr("y1",4*V.height).attr("x2",_-R-4).attr("y2",4*V.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const b=f?70:0;p.attr("viewBox",`${m.startx} -25 ${_} ${k+b}`),p.attr("preserveAspectRatio","xMinYMin meet"),p.attr("height",k+b+25)},"draw"),N={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:(0,r.K2)(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:(0,r.K2)(function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},"updateVal"),updateBounds:(0,r.K2)(function(t,e,n,i){const s=(0,r.D7)().journey,a=this;let o=0;function l(l){return(0,r.K2)(function(r){o++;const c=a.sequenceItems.length-o+1;a.updateVal(r,"starty",e-c*s.boxMargin,Math.min),a.updateVal(r,"stopy",i+c*s.boxMargin,Math.max),a.updateVal(N.data,"startx",t-c*s.boxMargin,Math.min),a.updateVal(N.data,"stopx",n+c*s.boxMargin,Math.max),"activation"!==l&&(a.updateVal(r,"startx",t-c*s.boxMargin,Math.min),a.updateVal(r,"stopx",n+c*s.boxMargin,Math.max),a.updateVal(N.data,"starty",e-c*s.boxMargin,Math.min),a.updateVal(N.data,"stopy",i+c*s.boxMargin,Math.max))},"updateItemBounds")}(0,r.K2)(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:(0,r.K2)(function(t,e,n,i){const s=Math.min(t,n),r=Math.max(t,n),a=Math.min(e,i),o=Math.max(e,i);this.updateVal(N.data,"startx",s,Math.min),this.updateVal(N.data,"starty",a,Math.min),this.updateVal(N.data,"stopx",r,Math.max),this.updateVal(N.data,"stopy",o,Math.max),this.updateBounds(s,a,r,o)},"insert"),bumpVerticalPos:(0,r.K2)(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:(0,r.K2)(function(){return this.verticalPos},"getVerticalPos"),getBounds:(0,r.K2)(function(){return this.data},"getBounds")},z=V.sectionFills,W=V.sectionColours,Y=(0,r.K2)(function(t,e,n){const i=(0,r.D7)().journey;let s="";const a=n+(2*i.height+i.diagramMarginY);let o=0,l="#CCC",c="black",h=0;for(const[r,u]of e.entries()){if(s!==u.section){l=z[o%z.length],h=o%z.length,c=W[o%W.length];let n=0;const a=u.section;for(let t=r;t(F[e]&&(t[e]=F[e]),t),{});u.x=r*i.taskMargin+r*i.width+R,u.y=a,u.width=i.diagramMarginX,u.height=i.diagramMarginY,u.colour=c,u.fill=l,u.num=h,u.actors=n,j.drawTask(t,u,i),N.insert(u.x,u.y,u.x+u.width+i.taskMargin,450)}},"drawTasks"),q={setConf:B,draw:O},J={parser:l,db:w,renderer:q,styles:v,init:(0,r.K2)(t=>{q.setConf(t.journey),w.clear()},"init")}},95237:(t,e,n)=>{n.d(e,{CP:()=>c,HT:()=>u,PB:()=>h,aC:()=>l,lC:()=>a,m:()=>o,tk:()=>r});var i=n(41750),s=n(16750),r=(0,i.K2)((t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),e.name&&n.attr("name",e.name),e.rx&&n.attr("rx",e.rx),e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const i in e.attrs)n.attr(i,e.attrs[i]);return e.class&&n.attr("class",e.class),n},"drawRect"),a=(0,i.K2)((t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};r(t,n).lower()},"drawBackgroundRect"),o=(0,i.K2)((t,e)=>{const n=e.text.replace(i.H1," "),s=t.append("text");s.attr("x",e.x),s.attr("y",e.y),s.attr("class","legend"),s.style("text-anchor",e.anchor),e.class&&s.attr("class",e.class);const r=s.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),s},"drawText"),l=(0,i.K2)((t,e,n,i)=>{const r=t.append("image");r.attr("x",e),r.attr("y",n);const a=(0,s.J)(i);r.attr("xlink:href",a)},"drawImage"),c=(0,i.K2)((t,e,n,i)=>{const r=t.append("use");r.attr("x",e),r.attr("y",n);const a=(0,s.J)(i);r.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),h=(0,i.K2)(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),u=(0,i.K2)(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")}}]); \ No newline at end of file diff --git a/assets/js/4616.90eee855.js b/assets/js/4616.90eee855.js new file mode 100644 index 0000000..3f9581a --- /dev/null +++ b/assets/js/4616.90eee855.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4616],{21152:(t,e,s)=>{s.d(e,{P:()=>r});var i=s(67633),n=s(40797),r=(0,n.K2)((t,e,s,r)=>{t.attr("class",s);const{width:c,height:l,x:h,y:d}=o(t,e);(0,i.a$)(t,l,c,r);const u=a(h,d,c,l,e);t.attr("viewBox",u),n.Rm.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),o=(0,n.K2)((t,e)=>{const s=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:s.width+2*e,height:s.height+2*e,x:s.x,y:s.y}},"calculateDimensionsWithPadding"),a=(0,n.K2)((t,e,s,i,n)=>`${t-n} ${e-n} ${s} ${i}`,"createViewBox")},54616:(t,e,s)=>{s.d(e,{Zk:()=>h,q7:()=>B,tM:()=>ot,u4:()=>rt});var i=s(89625),n=s(21152),r=s(10045),o=s(13226),a=s(67633),c=s(40797),l=function(){var t=(0,c.K2)(function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},"o"),e=[1,2],s=[1,3],i=[1,4],n=[2,4],r=[1,9],o=[1,11],a=[1,16],l=[1,17],h=[1,18],d=[1,19],u=[1,33],p=[1,20],y=[1,21],g=[1,22],m=[1,23],f=[1,24],S=[1,26],k=[1,27],b=[1,28],_=[1,29],T=[1,30],E=[1,31],D=[1,32],x=[1,35],C=[1,36],$=[1,37],v=[1,38],I=[1,34],A=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],L=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],w=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],R={trace:(0,c.K2)(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"--\x3e":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"--\x3e",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:(0,c.K2)(function(t,e,s,i,n,r,o){var a=r.length-1;switch(n){case 3:return i.setRootDoc(r[a]),r[a];case 4:this.$=[];break;case 5:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 6:case 7:case 12:this.$=r[a];break;case 8:this.$="nl";break;case 13:const t=r[a-1];t.description=i.trimColon(r[a]),this.$=t;break;case 14:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 15:const e=i.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 19:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 20:var c=r[a],l=r[a-2].trim();if(r[a].match(":")){var h=r[a].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 21:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 22:this.$={stmt:"state",id:r[a],type:"fork"};break;case 23:this.$={stmt:"state",id:r[a],type:"join"};break;case 24:this.$={stmt:"state",id:r[a],type:"choice"};break;case 25:this.$={stmt:"state",id:i.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 29:this.$=r[a].trim(),i.setAccTitle(this.$);break;case 30:case 31:this.$=r[a].trim(),i.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:r[a-3],url:r[a-2],tooltip:r[a-1]};break;case 33:this.$={stmt:"click",id:r[a-3],url:r[a-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 36:this.$={stmt:"style",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 37:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 38:i.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:i.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:i.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:i.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 46:case 47:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""}}},"anonymous"),table:[{3:1,4:e,5:s,6:i},{1:[3]},{3:5,4:e,5:s,6:i},{3:6,4:e,5:s,6:i},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:r,5:o,8:8,9:10,10:12,11:13,12:14,13:15,16:a,17:l,19:h,22:d,24:u,25:p,26:y,27:g,28:m,29:f,32:25,33:S,35:k,37:b,38:_,41:T,45:E,48:D,51:x,52:C,53:$,54:v,57:I},t(A,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:a,17:l,19:h,22:d,24:u,25:p,26:y,27:g,28:m,29:f,32:25,33:S,35:k,37:b,38:_,41:T,45:E,48:D,51:x,52:C,53:$,54:v,57:I},t(A,[2,7]),t(A,[2,8]),t(A,[2,9]),t(A,[2,10]),t(A,[2,11]),t(A,[2,12],{14:[1,40],15:[1,41]}),t(A,[2,16]),{18:[1,42]},t(A,[2,18],{20:[1,43]}),{23:[1,44]},t(A,[2,22]),t(A,[2,23]),t(A,[2,24]),t(A,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(A,[2,28]),{34:[1,49]},{36:[1,50]},t(A,[2,31]),{13:51,24:u,57:I},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(L,[2,44],{58:[1,56]}),t(L,[2,45],{58:[1,57]}),t(A,[2,38]),t(A,[2,39]),t(A,[2,40]),t(A,[2,41]),t(A,[2,6]),t(A,[2,13]),{13:58,24:u,57:I},t(A,[2,17]),t(w,n,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(A,[2,29]),t(A,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(A,[2,14],{14:[1,71]}),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,13:15,16:a,17:l,19:h,21:[1,72],22:d,24:u,25:p,26:y,27:g,28:m,29:f,32:25,33:S,35:k,37:b,38:_,41:T,45:E,48:D,51:x,52:C,53:$,54:v,57:I},t(A,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(A,[2,34]),t(A,[2,35]),t(A,[2,36]),t(A,[2,37]),t(L,[2,46]),t(L,[2,47]),t(A,[2,15]),t(A,[2,19]),t(w,n,{7:78}),t(A,[2,26]),t(A,[2,27]),{5:[1,79]},{5:[1,80]},{4:r,5:o,8:8,9:10,10:12,11:13,12:14,13:15,16:a,17:l,19:h,21:[1,81],22:d,24:u,25:p,26:y,27:g,28:m,29:f,32:25,33:S,35:k,37:b,38:_,41:T,45:E,48:D,51:x,52:C,53:$,54:v,57:I},t(A,[2,32]),t(A,[2,33]),t(A,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:(0,c.K2)(function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},"parseError"),parse:(0,c.K2)(function(t){var e=this,s=[0],i=[],n=[null],r=[],o=this.table,a="",l=0,h=0,d=0,u=r.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;r.push(m);var f=p.options&&p.options.ranges;function S(){var t;return"number"!=typeof(t=i.pop()||p.lex()||1)&&(t instanceof Array&&(t=(i=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError,(0,c.K2)(function(t){s.length=s.length-2*t,n.length=n.length-t,r.length=r.length-t},"popStack"),(0,c.K2)(S,"lex");for(var k,b,_,T,E,D,x,C,$,v={};;){if(_=s[s.length-1],this.defaultActions[_]?T=this.defaultActions[_]:(null==k&&(k=S()),T=o[_]&&o[_][k]),void 0===T||!T.length||!T[0]){var I="";for(D in $=[],o[_])this.terminals_[D]&&D>2&&$.push("'"+this.terminals_[D]+"'");I=p.showPosition?"Parse error on line "+(l+1)+":\n"+p.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==k?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(I,{text:p.match,token:this.terminals_[k]||k,line:p.yylineno,loc:m,expected:$})}if(T[0]instanceof Array&&T.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+k);switch(T[0]){case 1:s.push(k),n.push(p.yytext),r.push(p.yylloc),s.push(T[1]),k=null,b?(k=b,b=null):(h=p.yyleng,a=p.yytext,l=p.yylineno,m=p.yylloc,d>0&&d--);break;case 2:if(x=this.productions_[T[1]][1],v.$=n[n.length-x],v._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},f&&(v._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(E=this.performAction.apply(v,[a,h,l,y.yy,T[1],n,r].concat(u))))return E;x&&(s=s.slice(0,-1*x*2),n=n.slice(0,-1*x),r=r.slice(0,-1*x)),s.push(this.productions_[T[1]][0]),n.push(v.$),r.push(v._$),C=o[s[s.length-2]][s[s.length-1]],s.push(C);break;case 3:return!0}}return!0},"parse")},N=function(){return{EOF:1,parseError:(0,c.K2)(function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},"parseError"),setInput:(0,c.K2)(function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:(0,c.K2)(function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:(0,c.K2)(function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},"unput"),more:(0,c.K2)(function(){return this._more=!0,this},"more"),reject:(0,c.K2)(function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"reject"),less:(0,c.K2)(function(t){this.unput(this.match.slice(t))},"less"),pastInput:(0,c.K2)(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:(0,c.K2)(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:(0,c.K2)(function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},"showPosition"),test_match:(0,c.K2)(function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},"test_match"),next:(0,c.K2)(function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;re[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:(0,c.K2)(function(){var t=this.next();return t||this.lex()},"lex"),begin:(0,c.K2)(function(t){this.conditionStack.push(t)},"begin"),popState:(0,c.K2)(function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:(0,c.K2)(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:(0,c.K2)(function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},"topState"),pushState:(0,c.K2)(function(t){this.begin(t)},"pushState"),stateStackSize:(0,c.K2)(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:(0,c.K2)(function(t,e,s,i){switch(s){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:case 45:return 51;case 5:case 46:return 52;case 6:case 47:return 53;case 7:case 48:return 54;case 8:case 9:case 11:case 12:case 13:case 14:case 57:case 59:case 65:break;case 10:case 80:return 5;case 15:case 35:return this.pushState("SCALE"),17;case 16:case 36:return 18;case 17:case 23:case 37:case 52:case 55:this.popState();break;case 18:return this.begin("acc_title"),33;case 19:return this.popState(),"acc_title_value";case 20:return this.begin("acc_descr"),35;case 21:return this.popState(),"acc_descr_value";case 22:this.begin("acc_descr_multiline");break;case 24:return"acc_descr_multiline_value";case 25:return this.pushState("CLASSDEF"),41;case 26:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 27:return this.popState(),this.pushState("CLASSDEFID"),42;case 28:return this.popState(),43;case 29:return this.pushState("CLASS"),48;case 30:return this.popState(),this.pushState("CLASS_STYLE"),49;case 31:return this.popState(),50;case 32:return this.pushState("STYLE"),45;case 33:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;case 34:return this.popState(),47;case 38:this.pushState("STATE");break;case 39:case 42:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 40:case 43:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),26;case 41:case 44:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),27;case 49:this.pushState("STATE_STRING");break;case 50:return this.pushState("STATE_ID"),"AS";case 51:case 67:return this.popState(),"ID";case 53:return"STATE_DESCR";case 54:return 19;case 56:return this.popState(),this.pushState("struct"),20;case 58:return this.popState(),21;case 60:return this.begin("NOTE"),29;case 61:return this.popState(),this.pushState("NOTE_ID"),59;case 62:return this.popState(),this.pushState("NOTE_ID"),60;case 63:this.popState(),this.pushState("FLOATING_NOTE");break;case 64:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 66:return"NOTE_TEXT";case 68:return this.popState(),this.pushState("NOTE_TEXT"),24;case 69:return this.popState(),e.yytext=e.yytext.substr(2).trim(),31;case 70:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),31;case 71:case 72:return 6;case 73:return 16;case 74:return 57;case 75:return 24;case 76:return e.yytext=e.yytext.trim(),14;case 77:return 15;case 78:return 28;case 79:return 58;case 81:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[12,13],inclusive:!1},struct:{rules:[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78],inclusive:!1},FLOATING_NOTE_ID:{rules:[67],inclusive:!1},FLOATING_NOTE:{rules:[64,65,66],inclusive:!1},NOTE_TEXT:{rules:[69,70],inclusive:!1},NOTE_ID:{rules:[68],inclusive:!1},NOTE:{rules:[61,62,63],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[34],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[33],inclusive:!1},CLASS_STYLE:{rules:[31],inclusive:!1},CLASS:{rules:[30],inclusive:!1},CLASSDEFID:{rules:[28],inclusive:!1},CLASSDEF:{rules:[26,27],inclusive:!1},acc_descr_multiline:{rules:[23,24],inclusive:!1},acc_descr:{rules:[21],inclusive:!1},acc_title:{rules:[19],inclusive:!1},SCALE:{rules:[16,17,36,37],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[51],inclusive:!1},STATE_STRING:{rules:[52,53],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[12,13,39,40,41,42,43,44,49,50,54,55,56],inclusive:!1},ID:{rules:[12,13],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],inclusive:!0}}}}();function O(){this.yy={}}return R.lexer=N,(0,c.K2)(O,"Parser"),O.prototype=R,R.Parser=O,new O}();l.parser=l;var h=l,d="state",u="root",p="relation",y="default",g="divider",m="fill:none",f="fill: #333",S="text",k="normal",b="rect",_="rectWithTitle",T="divider",E="roundedWithTitle",D="statediagram",x=`${D}-state`,C="transition",$=`${C} note-edge`,v=`${D}-note`,I=`${D}-cluster`,A=`${D}-cluster-alt`,L="parent",w="note",R="----",N=`${R}${w}`,O=`${R}${L}`,K=(0,c.K2)((t,e="TB")=>{if(!t.doc)return e;let s=e;for(const i of t.doc)"dir"===i.stmt&&(s=i.value);return s},"getDir"),B={getClasses:(0,c.K2)(function(t,e){return e.db.getClasses()},"getClasses"),draw:(0,c.K2)(async function(t,e,s,l){c.Rm.info("REF0:"),c.Rm.info("Drawing state diagram (v2)",e);const{securityLevel:h,state:d,layout:u}=(0,a.D7)();l.db.extract(l.db.getRootDocV2());const p=l.db.getData(),y=(0,i.A)(e,h);p.type=l.type,p.layoutAlgorithm=u,p.nodeSpacing=d?.nodeSpacing||50,p.rankSpacing=d?.rankSpacing||50,p.markers=["barb"],p.diagramId=e,await(0,r.XX)(p,y);try{("function"==typeof l.db.getLinks?l.db.getLinks():new Map).forEach((t,e)=>{const s="string"==typeof e?e:"string"==typeof e?.id?e.id:"";if(!s)return void c.Rm.warn("\u26a0\ufe0f Invalid or missing stateId from key:",JSON.stringify(e));const i=y.node()?.querySelectorAll("g");let n;if(i?.forEach(t=>{const e=t.textContent?.trim();e===s&&(n=t)}),!n)return void c.Rm.warn("\u26a0\ufe0f Could not find node matching text:",s);const r=n.parentNode;if(!r)return void c.Rm.warn("\u26a0\ufe0f Node has no parent, cannot wrap:",s);const o=document.createElementNS("http://www.w3.org/2000/svg","a"),a=t.url.replace(/^"+|"+$/g,"");if(o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),o.setAttribute("target","_blank"),t.tooltip){const e=t.tooltip.replace(/^"+|"+$/g,"");o.setAttribute("title",e)}r.replaceChild(o,n),o.appendChild(n),c.Rm.info("\ud83d\udd17 Wrapped node in
    tag for:",s,t.url)})}catch(g){c.Rm.error("\u274c Error injecting clickable links:",g)}o._K.insertTitle(y,"statediagramTitleText",d?.titleTopMargin??25,l.db.getDiagramTitle()),(0,n.P)(y,8,D,d?.useMaxWidth??!0)},"draw"),getDir:K},F=new Map,Y=0;function P(t="",e=0,s="",i=R){return`state-${t}${null!==s&&s.length>0?`${i}${s}`:""}-${e}`}(0,c.K2)(P,"stateDomId");var G=(0,c.K2)((t,e,s,i,n,r,o,l)=>{c.Rm.trace("items",e),e.forEach(e=>{switch(e.stmt){case d:case y:V(t,e,s,i,n,r,o,l);break;case p:{V(t,e.state1,s,i,n,r,o,l),V(t,e.state2,s,i,n,r,o,l);const c={id:"edge"+Y,start:e.state1.id,end:e.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:m,labelStyle:"",label:a.Y2.sanitizeText(e.description??"",(0,a.D7)()),arrowheadStyle:f,labelpos:"c",labelType:S,thickness:k,classes:C,look:o};n.push(c),Y++}}})},"setupDoc"),j=(0,c.K2)((t,e="TB")=>{let s=e;if(t.doc)for(const i of t.doc)"dir"===i.stmt&&(s=i.value);return s},"getDir");function z(t,e,s){if(!e.id||""===e.id||""===e.id)return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(t=>{const i=s.get(t);i&&(e.cssCompiledStyles=[...e.cssCompiledStyles??[],...i.styles])}));const i=t.find(t=>t.id===e.id);i?Object.assign(i,e):t.push(e)}function M(t){return t?.classes?.join(" ")??""}function U(t){return t?.styles??[]}(0,c.K2)(z,"insertOrUpdateNode"),(0,c.K2)(M,"getClassesFromDbInfo"),(0,c.K2)(U,"getStylesFromDbInfo");var V=(0,c.K2)((t,e,s,i,n,r,o,l)=>{const h=e.id,d=s.get(h),u=M(d),p=U(d),D=(0,a.D7)();if(c.Rm.info("dataFetcher parsedItem",e,d,p),"root"!==h){let s=b;!0===e.start?s="stateStart":!1===e.start&&(s="stateEnd"),e.type!==y&&(s=e.type),F.get(h)||F.set(h,{id:h,shape:s,description:a.Y2.sanitizeText(h,D),cssClasses:`${u} ${x}`,cssStyles:p});const d=F.get(h);e.description&&(Array.isArray(d.description)?(d.shape=_,d.description.push(e.description)):d.description?.length&&d.description.length>0?(d.shape=_,d.description===h?d.description=[e.description]:d.description=[d.description,e.description]):(d.shape=b,d.description=e.description),d.description=a.Y2.sanitizeTextOrArray(d.description,D)),1===d.description?.length&&d.shape===_&&("group"===d.type?d.shape=E:d.shape=b),!d.type&&e.doc&&(c.Rm.info("Setting cluster for XCX",h,j(e)),d.type="group",d.isGroup=!0,d.dir=j(e),d.shape=e.type===g?T:E,d.cssClasses=`${d.cssClasses} ${I} ${r?A:""}`);const C={labelStyle:"",shape:d.shape,label:d.description,cssClasses:d.cssClasses,cssCompiledStyles:[],cssStyles:d.cssStyles,id:h,dir:d.dir,domId:P(h,Y),type:d.type,isGroup:"group"===d.type,padding:8,rx:10,ry:10,look:o};if(C.shape===T&&(C.label=""),t&&"root"!==t.id&&(c.Rm.trace("Setting node ",h," to be child of its parent ",t.id),C.parentId=t.id),C.centerLabel=!0,e.note){const t={labelStyle:"",shape:"note",label:e.note.text,cssClasses:v,cssStyles:[],cssCompiledStyles:[],id:h+N+"-"+Y,domId:P(h,Y,w),type:d.type,isGroup:"group"===d.type,padding:D.flowchart?.padding,look:o,position:e.note.position},s=h+O,r={labelStyle:"",shape:"noteGroup",label:e.note.text,cssClasses:d.cssClasses,cssStyles:[],id:h+O,domId:P(h,Y,L),type:"group",isGroup:!0,padding:16,look:o,position:e.note.position};Y++,r.id=s,t.parentId=s,z(i,r,l),z(i,t,l),z(i,C,l);let a=h,c=t.id;"left of"===e.note.position&&(a=t.id,c=h),n.push({id:a+"-"+c,start:a,end:c,arrowhead:"none",arrowTypeEnd:"",style:m,labelStyle:"",classes:$,arrowheadStyle:f,labelpos:"c",labelType:S,thickness:k,look:o})}else z(i,C,l)}e.doc&&(c.Rm.trace("Adding nodes children "),G(e,e.doc,s,i,n,!r,o,l))},"dataFetcher"),W=(0,c.K2)(()=>{F.clear(),Y=0},"reset"),X="[*]",H="start",J="[*]",q="end",Z="color",Q="fill",tt="bgFill",et=",",st=(0,c.K2)(()=>new Map,"newClassesList"),it=(0,c.K2)(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),nt=(0,c.K2)(t=>JSON.parse(JSON.stringify(t)),"clone"),rt=class{constructor(t){this.version=t,this.nodes=[],this.edges=[],this.rootDoc=[],this.classes=st(),this.documents={root:it()},this.currentDocument=this.documents.root,this.startEndCount=0,this.dividerCnt=0,this.links=new Map,this.getAccTitle=a.iN,this.setAccTitle=a.SV,this.getAccDescription=a.m7,this.setAccDescription=a.EI,this.setDiagramTitle=a.ke,this.getDiagramTitle=a.ab,this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{(0,c.K2)(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(t){this.clear(!0);for(const i of Array.isArray(t)?t:t.doc)switch(i.stmt){case d:this.addState(i.id.trim(),i.type,i.doc,i.description,i.note);break;case p:this.addRelation(i.state1,i.state2,i.description);break;case"classDef":this.addStyleClass(i.id.trim(),i.classes);break;case"style":this.handleStyleDef(i);break;case"applyClass":this.setCssClass(i.id.trim(),i.styleClass);break;case"click":this.addLink(i.id,i.url,i.tooltip)}const e=this.getStates(),s=(0,a.D7)();W(),V(void 0,this.getRootDocV2(),e,this.nodes,this.edges,!0,s.look,this.classes);for(const i of this.nodes)if(Array.isArray(i.label)){if(i.description=i.label.slice(1),i.isGroup&&i.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${i.id}]`);i.label=i.label[0]}}handleStyleDef(t){const e=t.id.trim().split(","),s=t.styleClass.split(",");for(const i of e){let t=this.getState(i);if(!t){const e=i.trim();this.addState(e),t=this.getState(e)}t&&(t.styles=s.map(t=>t.replace(/;/g,"")?.trim()))}}setRootDoc(t){c.Rm.info("Setting root doc",t),this.rootDoc=t,1===this.version?this.extract(t):this.extract(this.getRootDocV2())}docTranslator(t,e,s){if(e.stmt===p)return this.docTranslator(t,e.state1,!0),void this.docTranslator(t,e.state2,!1);if(e.stmt===d&&(e.id===X?(e.id=t.id+(s?"_start":"_end"),e.start=s):e.id=e.id.trim()),e.stmt!==u&&e.stmt!==d||!e.doc)return;const i=[];let n=[];for(const r of e.doc)if(r.type===g){const t=nt(r);t.doc=nt(n),i.push(t),n=[]}else n.push(r);if(i.length>0&&n.length>0){const t={stmt:d,id:(0,o.$C)(),type:"divider",doc:nt(n)};i.push(nt(t)),e.doc=i}e.doc.forEach(t=>this.docTranslator(e,t,!0))}getRootDocV2(){return this.docTranslator({id:u,stmt:u},{id:u,stmt:u,doc:this.rootDoc},!0),{id:u,doc:this.rootDoc}}addState(t,e=y,s=void 0,i=void 0,n=void 0,r=void 0,o=void 0,l=void 0){const h=t?.trim();if(this.currentDocument.states.has(h)){const t=this.currentDocument.states.get(h);if(!t)throw new Error(`State not found: ${h}`);t.doc||(t.doc=s),t.type||(t.type=e)}else c.Rm.info("Adding state ",h,i),this.currentDocument.states.set(h,{stmt:d,id:h,descriptions:[],type:e,doc:s,note:n,classes:[],styles:[],textStyles:[]});if(i){c.Rm.info("Setting state description",h,i);(Array.isArray(i)?i:[i]).forEach(t=>this.addDescription(h,t.trim()))}if(n){const t=this.currentDocument.states.get(h);if(!t)throw new Error(`State not found: ${h}`);t.note=n,t.note.text=a.Y2.sanitizeText(t.note.text,(0,a.D7)())}if(r){c.Rm.info("Setting state classes",h,r);(Array.isArray(r)?r:[r]).forEach(t=>this.setCssClass(h,t.trim()))}if(o){c.Rm.info("Setting state styles",h,o);(Array.isArray(o)?o:[o]).forEach(t=>this.setStyle(h,t.trim()))}if(l){c.Rm.info("Setting state styles",h,o);(Array.isArray(l)?l:[l]).forEach(t=>this.setTextStyle(h,t.trim()))}}clear(t){this.nodes=[],this.edges=[],this.documents={root:it()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=st(),t||(this.links=new Map,(0,a.IU)())}getState(t){return this.currentDocument.states.get(t)}getStates(){return this.currentDocument.states}logDocuments(){c.Rm.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(t,e,s){this.links.set(t,{url:e,tooltip:s}),c.Rm.warn("Adding link",t,e,s)}getLinks(){return this.links}startIdIfNeeded(t=""){return t===X?(this.startEndCount++,`${H}${this.startEndCount}`):t}startTypeIfNeeded(t="",e=y){return t===X?H:e}endIdIfNeeded(t=""){return t===J?(this.startEndCount++,`${q}${this.startEndCount}`):t}endTypeIfNeeded(t="",e=y){return t===J?q:e}addRelationObjs(t,e,s=""){const i=this.startIdIfNeeded(t.id.trim()),n=this.startTypeIfNeeded(t.id.trim(),t.type),r=this.startIdIfNeeded(e.id.trim()),o=this.startTypeIfNeeded(e.id.trim(),e.type);this.addState(i,n,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),this.addState(r,o,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.currentDocument.relations.push({id1:i,id2:r,relationTitle:a.Y2.sanitizeText(s,(0,a.D7)())})}addRelation(t,e,s){if("object"==typeof t&&"object"==typeof e)this.addRelationObjs(t,e,s);else if("string"==typeof t&&"string"==typeof e){const i=this.startIdIfNeeded(t.trim()),n=this.startTypeIfNeeded(t),r=this.endIdIfNeeded(e.trim()),o=this.endTypeIfNeeded(e);this.addState(i,n),this.addState(r,o),this.currentDocument.relations.push({id1:i,id2:r,relationTitle:s?a.Y2.sanitizeText(s,(0,a.D7)()):void 0})}}addDescription(t,e){const s=this.currentDocument.states.get(t),i=e.startsWith(":")?e.replace(":","").trim():e;s?.descriptions?.push(a.Y2.sanitizeText(i,(0,a.D7)()))}cleanupLabel(t){return t.startsWith(":")?t.slice(2).trim():t.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(t,e=""){this.classes.has(t)||this.classes.set(t,{id:t,styles:[],textStyles:[]});const s=this.classes.get(t);e&&s&&e.split(et).forEach(t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(RegExp(Z).exec(t)){const t=e.replace(Q,tt).replace(Z,Q);s.textStyles.push(t)}s.styles.push(e)})}getClasses(){return this.classes}setCssClass(t,e){t.split(",").forEach(t=>{let s=this.getState(t);if(!s){const e=t.trim();this.addState(e),s=this.getState(e)}s?.classes?.push(e)})}setStyle(t,e){this.getState(t)?.styles?.push(e)}setTextStyle(t,e){this.getState(t)?.textStyles?.push(e)}getDirectionStatement(){return this.rootDoc.find(t=>"dir"===t.stmt)}getDirection(){return this.getDirectionStatement()?.value??"TB"}setDirection(t){const e=this.getDirectionStatement();e?e.value=t:this.rootDoc.unshift({stmt:"dir",value:t})}trimColon(t){return t.startsWith(":")?t.slice(1).trim():t.trim()}getData(){const t=(0,a.D7)();return{nodes:this.nodes,edges:this.edges,other:{},config:t,direction:K(this.getRootDocV2())}}getConfig(){return(0,a.D7)().state}},ot=(0,c.K2)(t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel {\n background-color: ${t.edgeLabelBackground};\n p {\n background-color: ${t.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${t.edgeLabelBackground};\n fill: ${t.edgeLabelBackground};\n }\n text-align: center;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n // line-height: 1;\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`,"getStyles")},89625:(t,e,s)=>{s.d(e,{A:()=>r});var i=s(40797),n=s(70451),r=(0,i.K2)((t,e)=>{let s;"sandbox"===e&&(s=(0,n.Ltv)("#i"+t));return("sandbox"===e?(0,n.Ltv)(s.nodes()[0].contentDocument.body):(0,n.Ltv)("body")).select(`[id="${t}"]`)},"getDiagramElement")}}]); \ No newline at end of file diff --git a/assets/js/4665.a72db2f2.js b/assets/js/4665.a72db2f2.js deleted file mode 100644 index ea2febe..0000000 --- a/assets/js/4665.a72db2f2.js +++ /dev/null @@ -1,72 +0,0 @@ -(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4665],{41:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(9430),t)},250:(e,t,r)=>{"use strict";r.r(t)},858:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.KeepRatio=void 0;const i=r(74848),a=n(r(34559)),o=n(r(34646));t.KeepRatio=({children:e,width:t,height:r,fullHeight:n=!1,fullWidth:s=!0,rootProps:c,contentProps:l,containerWidth:d,containerHeight:u,keep:m=!0})=>{const h=!n&&s,p=!h,f=100*(p?r/t:t/r);return(0,i.jsxs)("div",{...c??{},className:(0,a.default)(o.default.root,h&&o.default.fullWidth,p&&o.default.fullHeight,m&&o.default.keep,c?.className),children:[(0,i.jsx)("div",{...l??{},className:(0,a.default)(o.default.content,l?.className),children:e}),m&&(0,i.jsx)("svg",{style:{pointerEvents:"none",height:p?"100%":u?`calc(${r} / ${t} * ${d})`:"auto",width:h?"100%":u?`calc(${t} / ${r} * ${u})`:"auto"},viewBox:`0 0 ${h?f:100} ${p?f:100}`})]})}},1442:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(70462);t.EventCard=({thumbnail:e,title:t,date:r,location:n,target:c="_self",...l})=>(0,i.jsxs)("a",{target:c,...l,className:(0,s.default)(l.className,"mdx-event-card"),children:[(0,i.jsx)(o.default,{sources:{dark:e,light:e},alt:t??"event thumbnail",className:"mdx-event-card__thumbnail"}),(0,i.jsx)(a.Typography,{component:"h5",variant:"subtitle1",className:"mdx-event-card__title",children:t}),(0,i.jsxs)("div",{className:"mdx-event-card__row",children:[(0,i.jsxs)("div",{className:"mdx-event-card__info",children:[(0,i.jsx)(a.Typography,{className:"mdx-event-card__label",variant:"body3",children:"Date"}),(0,i.jsx)(a.Typography,{variant:"body3",children:r})]}),(0,i.jsxs)("div",{className:"mdx-event-card__info",children:[(0,i.jsx)(a.Typography,{className:"mdx-event-card__label",variant:"body3",children:"Location"}),(0,i.jsx)(a.Typography,{variant:"body3",children:n})]})]})]})},2984:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(1442),t)},3399:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(6978),t)},3874:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(83016),t)},4366:(e,t,r)=>{"use strict";r.r(t)},4930:(e,t,r)=>{"use strict";r.r(t)},5195:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(46854),t)},5354:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventHeader=void 0;const n=r(74848);r(30126);const i=r(97481);t.EventHeader=({title:e,description:t})=>(0,n.jsxs)("div",{className:"mdx-event-header__container",children:[(0,n.jsx)(i.Typography,{variant:"h1",component:"h1",className:"mdx-event-header__label",children:e}),(0,n.jsx)(i.Typography,{variant:"subtitle1",className:"mdx-event-header__content",children:t})]})},5754:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GithubChallenges=void 0;const n=r(74848),i=r(97481),a=r(64940),o=r(54675),s=({message:e})=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.Typography,{variant:"h1",className:"mdx-ghc__header",children:"Open challenges"}),!!e&&(0,n.jsx)(i.Typography,{variant:"body1",children:e})]});t.GithubChallenges=({challengesData:e,useDummyData:t,subheaderText:r,filterByName:c,...l})=>{let d=t?[a.dummyGithubIssue]:(e=>{let t=[];return Object.keys(e).forEach(r=>{if(!isNaN(Number(r))){const n=Object.values(e[r])[0];Array.isArray(n)&&(t=t.concat(n))}}),t})(e);if(!d||(u=d,!Array.isArray(u)||!u.length))return(0,n.jsx)(s,{message:"No challenges to show"});var u;if(c)try{const e=new RegExp(c,"i");d=d?.filter(t=>e.test(t.title))}catch(m){console.error("Invalid regex pattern:",m)}return(0,n.jsxs)("div",{...l,children:[(0,n.jsx)(s,{}),!!r&&(0,n.jsx)(i.Typography,{variant:"body1",className:"mdx-ghc-subheader-text",component:"div",children:r}),d.map(e=>(0,n.jsx)(o.SingleGithubChallenge,{issue:e},e.id))]})}},5897:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(7142),t)},6454:(e,t,r)=>{"use strict";r.r(t)},6978:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventAbout=void 0;const n=r(74848);r(11850);const i=r(97481);t.EventAbout=({children:e})=>(0,n.jsxs)("div",{className:"mdx-event-about__container",children:[(0,n.jsx)(i.Typography,{variant:"h2",component:"p",className:"mdx-event-about__title",children:"About"}),(0,n.jsx)(i.Typography,{variant:"body1",children:e})]})},7142:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollToBottom=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(96540),c=r(44975),l=r(60727),d=r(74881),u=r(96323),m=n(r(75117));t.ScrollToBottom=e=>{const{children:t,className:r,style:n,...h}=e,p=(0,u.useScrollY)(),f=(0,d.useIsMobile)(),_=(0,c.useWindowSize)(),v=(0,s.useMemo)(()=>(document.querySelector(".mdx-hero")?.getBoundingClientRect()?.bottom??0)+window.scrollY,[_.height]);return(0,i.jsx)(a.IconButton,{onClick:()=>{const e=document.querySelector(".main-wrapper article"),t=e?.children?.[1];if(t)return window.scrollTo({left:0,top:t.getBoundingClientRect().top-(f?200:0),behavior:"smooth"});window.scrollTo({top:document.body.scrollHeight,behavior:"smooth"})},size:f?"small":"large",className:(0,o.default)(m.default.scrollToBottom,r,p>20&&m.default.hide),style:(0,l.makeStyle)({...n??{}},{vh:_.height/100+"px",maxTop:v+"px"}),...h,children:(0,i.jsx)(a.ChevronDownIcon,{color:"primary"})})}},7290:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(83636),t)},7491:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(5754),t)},8760:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(39642),t)},9430:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ShowcaseCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(63658);t.ShowcaseCard=({index:e,name:t,logoSrc:r,logoSrcDark:n,description:c,className:l,size:d="large",borderStyle:u="solid",label:m,cta:h,children:p,...f})=>(0,i.jsx)("div",{className:(0,s.default)(l,"mdx-showcase-card",`mdx-showcase-card--${d}`,`mdx-showcase-card--border-${u}`),...f,children:(0,i.jsxs)("div",{className:"mdx-showcase-card__inner",children:[e&&(0,i.jsx)(a.Typography,{className:"mdx-showcase-card__index",variant:"subtitle2",component:"div",children:e}),(r||n)&&(0,i.jsx)(o.default,{sources:{dark:n??r??"",light:r??n??""},alt:"string"==typeof t?t:"",className:"mdx-showcase-card__logo"}),(0,i.jsxs)("div",{className:"mdx-showcase-card__title",children:[t&&(0,i.jsx)(a.Typography,{variant:"h4",component:"h4",className:"mdx-showcase-card__name",children:t}),m&&(0,i.jsx)(a.Badge,{size:"small",children:m})]}),c&&(0,i.jsx)(a.Typography,{variant:"body1",component:"p",className:"mdx-showcase-card__description",children:c}),h&&(0,i.jsxs)("a",{href:h?.href,target:h?.target,className:"mdx-showcase-card__cta",children:[h?.label,(0,i.jsx)(a.ChevronDownIcon,{color:"primary"})]})]})})},10306:(e,t,r)=>{"use strict";r.r(t)},11677:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(16718),t)},11850:(e,t,r)=>{"use strict";r.r(t)},12114:(e,t,r)=>{"use strict";r.r(t)},12230:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useNewsletterApi=void 0;const n=r(96540);t.useNewsletterApi=()=>{const[e,t]=(0,n.useState)(!1),[r,i]=(0,n.useState)({error:!1,message:""});return{busy:e,error:r.error,message:r.message,subscribe:async(e,r,n)=>{t(!0);try{const e=await fetch("https://admin-acid.logos.co/api/admin/newsletters/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:r,type:"logos",newsletter:n})}),t=await e.json();i({error:!1,message:t.result.message})}catch(a){i({error:!0,message:"Something went wrong!"})}t(!1)}}}},12824:(e,t,r)=>{"use strict";r.r(t)},13012:(e,t,r)=>{"use strict";r.r(t)},13110:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Showcase=void 0;const i=r(74848),a=n(r(34559)),o=r(98941);r(92562);t.Showcase=({items:e=[],className:t,...r})=>(0,i.jsx)(o.Grid,{className:(0,a.default)(t,"mdx-showcase"),xs:{cols:2,wrap:!0,gap:"1.5rem 1em"},lg:{cols:3,gap:"1rem"},...r,children:e.map((e,t)=>(0,i.jsx)(o.Grid.Item,{className:"mdx-showcase__item",xs:1,children:(0,i.jsx)(o.ShowcaseCard,{...e})},t))})},13431:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(84942),t)},15359:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(32710),t)},15514:(e,t,r)=>{"use strict";r.r(t)},16224:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(86908),t)},16718:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroVideo=void 0;const i=r(74848),a=n(r(34559)),o=r(96540),s=r(60727),c=r(60717),l=r(54046),d=r(70101);r(33634);t.HeroVideo=({placeholderSrc:e,desktop:t,mobile:r,className:n,style:u={},children:m,...h})=>{(0,d.useHero)();const p=(0,l.useHydrated)(),f=(0,o.useRef)(null),[_,v]=(0,o.useState)(!0),g=async()=>{const e=f.current;if(!e)return;e.muted=!0,e.defaultMuted=!0;const[t,r]=await(0,c.settle)(()=>e.play());r||v(!1)};return(0,o.useEffect)(()=>{const e=document.querySelector(".col > article");if(e)return e.classList.add("overflow-hidden"),()=>{e.classList.remove("overflow-hidden")}},[]),(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{className:(0,a.default)(n,"mdx-hero-video",_&&"mdx-hero-video--loading"),style:(0,s.makeStyle)({...u},{"hero-video-scale":t?.scale??"1.70951586","hero-video-offset-y":t?.offsetY??"-150px","hero-video-height":t?.height??"100%","hero-video-min-height":t?.minHeight??"min(100vh, var(--hero-max-height))","hero-video-scale-mobile":r?.scale??"1.70951586","hero-video-offset-y-mobile":r?.offsetY??"-50px","hero-video-height-mobile":r?.height??"120%","hero-video-min-height-mobile":r?.minHeight??"100vh"}),...h,children:[(0,i.jsx)("div",{className:"mdx-hero-video__placeholder",children:(0,i.jsx)("img",{src:e,alt:""})}),(0,i.jsx)("div",{className:"mdx-hero-video__video",children:p&&(0,i.jsx)("video",{ref:f,loop:!0,muted:!0,autoPlay:!0,playsInline:!0,onCanPlay:g,onLoadedMetadata:g,children:m})})]})})}},17715:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(46750),t)},17970:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JobsPerDepartment=void 0;const n=r(74848),i=r(97481),a=r(19517),o=r(54404),s=({message:e})=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.Typography,{variant:"h1",className:"mdx-jpd__header",children:"Current job openings"}),!!e&&(0,n.jsx)(i.Typography,{variant:"body1",children:e})]});t.JobsPerDepartment=({jobData:e,titleFilter:t="",useDummyData:r=!1,...i})=>{let c=r?o.jobsPerDepartmentDummyData:e?.departments;return c&&(l=c)&&l.some(e=>e.jobs&&e.jobs.length>0)?(c&&t&&(c=c.map(e=>({...e,jobs:e.jobs.filter(e=>e.title.includes(t))}))),(0,n.jsxs)("div",{...i,children:[(0,n.jsx)(s,{}),c.map(e=>(0,n.jsx)(a.SingleDepartmentJobs,{department:e},e.name))]})):(0,n.jsx)(s,{message:"No job openings to show"});var l}},18486:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ExternalResourceCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559)),c=r(30911);r(83330);const l=r(56794);t.ExternalResourceCard=({title:e,logoSrc:t,logoSrcDark:r,description:n,previewSrc:d,previewSrcDark:u,...m})=>{const h=!(!d&&!u);return(0,i.jsxs)("a",{target:"_blank",...m,className:(0,s.default)(m.className,"mdx-erc",h&&"mdx-erc--with-preview"),children:[h&&(0,i.jsx)(l.KeepRatio,{width:16,height:9,fullWidth:!0,children:(0,i.jsx)(o.default,{sources:{dark:u??d??"",light:d??u??""},alt:"string"==typeof e&&e||"preview image",className:"mdx-erc__preview-image"})}),(0,i.jsxs)("div",{className:"mdx-erc__inner",children:[(t||r)&&(0,i.jsx)(o.default,{sources:{dark:r??t??"",light:t??r??""},alt:"string"==typeof e&&e||"logo",className:"mdx-erc__logo"}),(0,i.jsx)(a.Typography,{variant:"body1",component:"div",className:"mdx-erc__title",children:e}),n&&(0,i.jsx)(a.Typography,{variant:"label2",component:"div",className:"mdx-erc__description",children:n})]}),(0,i.jsx)("div",{className:"mdx-erc__icon",children:(0,i.jsx)(c.IconExternalLink,{className:"mdx-erc__external-link"})})]})}},19517:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SingleDepartmentJobs=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=r(30911);r(86798);t.SingleDepartmentJobs=({department:e})=>e.jobs&&0!==e.jobs.length?(0,i.jsxs)("div",{className:"mdx-jpd__single-job-department-container",children:[(0,i.jsx)(a.Typography,{variant:"subtitle2",className:"mdx-jpd__department-title",children:e.name}),(0,i.jsx)("ul",{className:"mdx-jpd__job-list",children:e.jobs.map((e,t)=>(0,i.jsx)("li",{className:"mdx-jpd__job-list-item",children:(0,i.jsxs)(o.default,{href:e.absolute_url,target:"_blank",className:"mdx-jpd__job-link",children:[(0,i.jsxs)("div",{className:"mdx-jpd__job-title-container",children:[(0,i.jsx)(a.Typography,{variant:"h5",className:"mdx-jpd__job-title",children:e.title}),(0,i.jsx)(s.IconExternalLink,{className:"mdx-jpd__external-link-icon"})]}),!!e.location?.name&&(0,i.jsx)(a.Typography,{variant:"subtitle2",component:"div",children:e.location.name})]})},t))})]}):null},20314:(e,t,r)=>{"use strict";r.r(t)},21010:(e,t,r)=>{"use strict";r.r(t)},21886:(e,t,r)=>{"use strict";r.r(t)},21998:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroDescription=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(70101);r(54978);t.HeroDescription=({size:e,className:t,uppercase:r=!1,children:n,...c})=>{const l=(0,s.useHero)(),d=e??(l?l.size:"medium");return(0,i.jsx)(a.Typography,{variant:"h4",className:(0,o.default)(t,"mdx-hero-description",`mdx-hero-description--${d}`,r?"mdx-hero-description--uppercase":""),...c,children:n})}},23902:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventCardList=t.EventStatus=void 0;const n=r(74848),i=r(96540);r(87746);const a=r(97481),o=r(98941),s=r(97481);var c;!function(e){e.UPCOMING="Upcoming",e.PAST="Past"}(c||(t.EventStatus=c={}));t.EventCardList=({upcoming:e,past:t,...r})=>{const[l,d]=(0,i.useState)(c.UPCOMING),u=l===c.UPCOMING?e:t,[m,h]=(0,i.useState)(u?.length>8),[p,f]=(0,i.useState)(8);return(0,n.jsxs)("div",{className:"mdx-event-card-list__container",...r,children:[(0,n.jsxs)(s.Tabs,{activeTab:l,onChange:e=>{d(e),f(8),h(u?.length>8)},className:"mdx-event-card-list__tabs",children:[(0,n.jsx)(s.TabItem,{name:"Upcoming",children:"Upcoming"},"upcoming"),(0,n.jsx)(s.TabItem,{name:"Past",children:"Past"},"past")]}),(0,n.jsxs)("div",{children:[(0,n.jsx)(o.Box,{top:{xs:80,sm:96},bottom:80,children:(0,n.jsxs)(o.Grid,{xs:{cols:1,gap:"80px 16px"},md:{cols:4},children:[u.slice(0,p).map((e,t)=>(0,n.jsx)(o.Grid.Item,{xs:1,children:(0,n.jsx)(o.EventCard,{...e})},t)),0===u.length?(0,n.jsx)(a.Typography,{children:"No events found."}):null]})}),m&&(0,n.jsx)(a.Button,{className:"mdx-event-card-list__button",onClick:()=>{f(e=>e+8),p+6>=u?.length&&h(!1)},size:"large",children:"See more"})]})]})}},24120:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(88386),t)},24622:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SectionHeader=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941);r(68674);t.SectionHeader=({title:e,description:t,className:r,noBorder:n,children:c,...l})=>{const d=!!t;return(0,i.jsxs)(s.Box,{className:(0,o.default)(r,"mdx-section-header",d&&"mdx-section-header--with-description",n&&"mdx-section-header--no-border"),...l,children:[(0,i.jsxs)(a.Typography,{className:"mdx-section-header__title",component:"h2",variant:"h2",children:[e,!d&&c&&(0,i.jsx)("div",{className:"mdx-section-header__extra",children:c})]}),t&&(0,i.jsxs)(a.Typography,{className:"mdx-section-header__description",component:"p",variant:"h3",children:[t,(0,i.jsx)("div",{className:"mdx-section-header__extra",children:c})]})]})}},24802:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TableView=void 0;const n=r(74848),i=r(97481);r(41182);t.TableView=({tableTitle:e="",data:t,...r})=>(0,n.jsxs)("div",{className:"mdx-table-view",...r,children:[e?.length>0?(0,n.jsx)(i.Typography,{className:"mdx-table-view-table-title",component:"h2",variant:"h2",children:e}):null,(0,n.jsx)("div",{children:t.map((e,t)=>(0,n.jsxs)("div",{className:"mdx-table-view-row",children:[(0,n.jsx)(i.Typography,{component:"h3",variant:"h4",className:"mdx-table-view-title",children:e.title}),(0,n.jsx)(i.Typography,{component:"p",variant:"subtitle1",className:"mdx-table-view-description",children:e.description})]},t))})]})},25018:(e,t,r)=>{"use strict";r.r(t)},25505:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>_});var n=r(58168),i=r(26399),a=r(46255),o=r(71287),s=r(30041),c=r(96540),l=r(36289),d=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,u=(0,l.A)(function(e){return d.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}),m=function(e){return"theme"!==e},h=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?u:m},p=function(e,t,r){var n;if(t){var i=t.shouldForwardProp;n=e.__emotion_forwardProp&&i?function(t){return e.__emotion_forwardProp(t)&&i(t)}:i}return"function"!=typeof n&&r&&(n=e.__emotion_forwardProp),n},f=function(e){var t=e.cache,r=e.serialized,n=e.isStringTag;return(0,s.SF)(t,r,n),(0,o.s)(function(){return(0,s.sk)(t,r,n)}),null},_=function e(t,r){var o,l,d=t.__emotion_real===t,u=d&&t.__emotion_base||t;void 0!==r&&(o=r.label,l=r.target);var m=p(t,r,d),_=m||h(u),v=!_("as");return function(){var g=arguments,b=d&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==o&&b.push("label:"+o+";"),null==g[0]||void 0===g[0].raw)b.push.apply(b,g);else{var y=g[0];b.push(y[0]);for(var x=g.length,j=1;j(0,i.jsxs)("div",{className:"mdx-event-cta__container",children:[e&&(0,i.jsx)(a.Typography,{variant:"h2",component:"h2",className:"mdx-event-cta__title",children:e}),(0,i.jsx)(o.default,{to:r,...n,children:(0,i.jsxs)(a.Button,{className:"mdx-event-cta__button",children:[(0,i.jsx)(a.Typography,{variant:"body1",children:t}),(0,i.jsx)(s.IconExternalLink,{})]})})]})},26600:(e,t,r)=>{"use strict";r.r(t)},27516:(e,t,r)=>{"use strict";r.r(t)},27803:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDocMetadata=void 0;const i=r(60542),a=r(92994),o=n(r(38640));t.useDocMetadata=()=>{const e=(0,a.useDocThemeOptions)(),{content:{authors:t=[]}={}}=e,{frontMatter:r={}}=(0,i.useDoc)(),{author:n=[],date:s}=r,c=(Array.isArray(n)?n:[n]).map(e=>t.find(t=>e===t.key)).filter(e=>!!e);return{date:s?(0,o.default)(new Date(s),"MMM d yyyy"):"",authors:c}}},27959:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(24802),t)},28453:(e,t,r)=>{"use strict";r.d(t,{R:()=>o,x:()=>s});var n=r(96540);const i={},a=n.createContext(i);function o(e){const t=n.useContext(a);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(a.Provider,{value:t},e.children)}},29146:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventProfileList=void 0;const n=r(74848);r(32034);const i=r(97481),a=r(98941);t.EventProfileList=({title:e,description:t,data:r})=>(0,n.jsxs)("div",{className:"mdx-event-profile-list__container",children:[e&&(0,n.jsx)(i.Typography,{variant:"h2",component:"h2",className:"mdx-event-profile-list__title",children:e}),t&&(0,n.jsx)(i.Typography,{variant:"subtitle1",children:t}),(0,n.jsx)(a.Box,{top:40,children:(0,n.jsx)(a.Grid,{xs:{cols:1,gap:"16px"},md:{cols:3},children:r.map((e,t)=>(0,n.jsx)(a.Grid.Item,{xs:1,children:(0,n.jsx)(a.EventProfile,{...e})},t))})})]})},29294:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(90206),t)},29510:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LogoCarousel=void 0;const i=r(74848),a=n(r(1893)),o=n(r(34559)),s=r(96540);r(32762);const c=r(98941),l=r(34500),d=r(54046);t.LogoCarousel=({title:e,gridGap:t="80px",className:r,items:n=[],children:u,...m})=>{const h=(0,d.useHydrated)(),p=(0,s.useRef)(null),f=(0,s.useRef)(null);return"undefined"!=typeof window&&h&&!f.current&&(f.current=p.current?.querySelector(".mdx-grid__content")??null),(0,i.jsxs)("div",{ref:p,className:(0,o.default)(r,"mdx-logo-carousel"),...m,children:[(0,i.jsx)(c.SectionHeader,{title:e,noBorder:!0}),(0,i.jsx)("div",{className:"mdx-logo-carousel-buttons",children:(0,i.jsx)(l.ScrollButtons,{containerRef:f,spacing:"spaced",infiniteScroll:!0})}),(0,i.jsx)(c.Grid,{className:"mdx-logo-carousel__inner",xs:{wrap:!1,gap:t,scrollButtons:!1},children:n.map(e=>(0,i.jsx)(c.Grid.Item,{className:"mdx-logo-carousel__item",children:(0,i.jsx)(a.default,{className:"mdx-logo-carousel__logo",title:e.title,sources:{dark:e.logoSrcDark??e.logoSrc??"",light:e.logoSrc??e.logoSrcDark??""}})}))})]})}},30094:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroActions=void 0;const i=r(74848),a=n(r(34559));r(86370);t.HeroActions=({className:e,children:t,...r})=>(0,i.jsx)("div",{className:(0,a.default)(e,"mdx-hero-actions"),...r,children:t})},30126:(e,t,r)=>{"use strict";r.r(t)},30254:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ProfileCard=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=r(30911);r(250);const c=n(r(34559));t.ProfileCard=({imgSrc:e,name:t,githubUsername:r,githubLink:n,discordUsername:l,discordLink:d,xUsername:u,xLink:m,...h})=>(0,i.jsx)("div",{...h,className:(0,c.default)("mdx-profile-card",h.className),children:(0,i.jsxs)("div",{className:"mdx-profile-card__profile",children:[void 0===e&&t?(0,i.jsx)("span",{className:"mdx-profile-card__profile-placeholder",children:t[0]?.toUpperCase()}):(0,i.jsx)("img",{alt:"string"==typeof t?t:"",className:"mdx-profile-card__profile-image",src:e}),(0,i.jsxs)("div",{children:[(0,i.jsx)(a.Typography,{className:"mdx-profile-card__name",variant:"h4",component:"h4",children:t}),n||d||m?(0,i.jsxs)("div",{className:"mdx-profile-card__buttons",children:[n&&(0,i.jsx)(o.default,{href:n,target:"_blank",className:"mdx-profile-card__link",children:(0,i.jsx)(s.IconGithub,{})}),d&&(0,i.jsx)(o.default,{href:d,target:"_blank",className:"mdx-profile-card__link",children:(0,i.jsx)(s.IconDiscord,{size:"m"})}),m&&(0,i.jsx)(o.default,{href:m,target:"_blank",className:"mdx-profile-card__link",children:(0,i.jsx)(s.IconX,{size:"m"})})]}):null]})]})})},30707:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(42446),t)},31170:(e,t,r)=>{"use strict";r.r(t)},31406:(e,t,r)=>{"use strict";r.r(t)},32034:(e,t,r)=>{"use strict";r.r(t)},32331:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(97278),t)},32710:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AccordionItem=void 0;const i=r(74848),a=n(r(34559)),o=r(96540);r(85986);const s=r(97481),c=r(30911),l=n(r(97200));t.AccordionItem=({open:e,onToggle:t,title:r,className:n,children:d,...u})=>{const m=(0,l.default)("accordion-item-"),[h,p]=(0,o.useState)(e??!1);void 0!==e&&e!==h&&p(e);return(0,i.jsxs)("div",{className:(0,a.default)(n,"mdx-accordion-item",h&&"mdx-accordion-item--open"),...u,children:[(0,i.jsx)("input",{type:"checkbox",id:m,checked:h}),(0,i.jsxs)("div",{role:"button",className:"mdx-accordion-item__header",onClick:()=>{void 0!==e?t&&t(!h):p(e=>!e)},children:[(0,i.jsx)(s.Typography,{className:"mdx-accordion-item__title",variant:"h5",component:"label",htmlFor:m,children:r}),(0,i.jsx)("div",{className:"mdx-accordion-item__icon",children:h?(0,i.jsx)(c.IconRemove,{}):(0,i.jsx)(c.IconAdd,{})})]}),(0,i.jsx)("div",{className:"mdx-accordion-item__content-wrapper",children:(0,i.jsx)("div",{className:"mdx-accordion-item__content",children:d})})]})}},32762:(e,t,r)=>{"use strict";r.r(t)},33634:(e,t,r)=>{"use strict";r.r(t)},34500:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(56158),t)},34646:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={root:"root_TTsz",fullWidth:"fullWidth_HBtH",fullHeight:"fullHeight_ls1u",content:"content_feMR",keep:"keep_Y9Ea"}},35310:(e,t,r)=>{"use strict";r.r(t)},36306:(e,t,r)=>{"use strict";r.r(t)},37135:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(86650),t)},37187:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(17970),t)},37416:(e,t,r)=>{"use strict";r.r(t)},38634:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CallToActionSection=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941);r(21886);const c=r(30911);t.CallToActionSection=({label:e,href:t,title:r,columns:n=1,description:l,list:d=[],target:u,border:m=!0,align:h="unset",className:p,children:f,variant:_="outlined",ctaPosition:v="bottom",...g})=>{const b=!!l,y=d.length>0,x=!!t,j=!r||b||x||y?r&&!l&&!y&&x?"title-button":r&&l&&2===n?"full-width":r&&l&&d.length>0?"list":"simple":"title-only",w=t&&"top"===v&&(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-cta-section__link",variant:_,children:e});return(0,i.jsxs)("div",{className:(0,o.default)(p,"mdx-cta-section",`mdx-cta-section--${j}`,!m&&"mdx-cta-section--no-border"),...g,children:[(0,i.jsxs)("div",{className:(0,o.default)("mdx-cta-section__container","unset"!==h&&`mdx-cta-section--align-${h}`),children:[(0,i.jsxs)("div",{className:"mdx-cta-section__header",children:[(0,i.jsx)(a.Typography,{component:"h2",className:(0,o.default)("mdx-cta-section__title"),children:r}),(0,i.jsx)("div",{className:"mdx-cta-section__header__desktop-button",children:w})]}),l&&(0,i.jsx)(a.Typography,{component:"h3",className:"mdx-cta-section__description",children:l}),(0,i.jsx)("div",{className:"mdx-cta-section__header__mobile-button",children:w}),t&&"bottom"===v&&(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-cta-section__link",variant:_,children:e})]}),d.length>0&&(0,i.jsx)("div",{className:(0,o.default)("mdx-cta-section__list",!m&&"mdx-cta-section--no-border"),children:d.map((e,t)=>{const r=(0,i.jsxs)("div",{className:"mdx-cta-section__list-item",children:[(0,i.jsx)("a",{className:"mdx-cta-section__list-item-link",href:e?.href,target:e.target,children:(0,i.jsxs)(a.Typography,{component:"div",variant:"body2",className:"mdx-cta-section__item-title",children:[e.title,(0,i.jsx)(c.IconExternalLink,{size:"m"})]})}),(0,i.jsx)(a.Typography,{variant:"h4",component:"p",className:"mdx-cta-section__item-description",children:e.description})]},t);return e.href?(0,i.jsx)("a",{href:e.href,target:"_blank",children:r}):r})})]})}},38640:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}function a(e){i(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===n(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"),console.warn((new Error).stack)),new Date(NaN))}function o(e){if(i(1,arguments),!function(e){return i(1,arguments),e instanceof Date||"object"===n(e)&&"[object Date]"===Object.prototype.toString.call(e)}(e)&&"number"!=typeof e)return!1;var t=a(e);return!isNaN(Number(t))}function s(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}function c(e,t){return i(2,arguments),function(e,t){i(2,arguments);var r=a(e).getTime(),n=s(t);return new Date(r+n)}(e,-s(t))}r.r(t),r.d(t,{default:()=>Q});function l(e){i(1,arguments);var t=a(e),r=t.getUTCDay(),n=(r<1?7:0)+r-1;return t.setUTCDate(t.getUTCDate()-n),t.setUTCHours(0,0,0,0),t}function d(e){i(1,arguments);var t=a(e),r=t.getUTCFullYear(),n=new Date(0);n.setUTCFullYear(r+1,0,4),n.setUTCHours(0,0,0,0);var o=l(n),s=new Date(0);s.setUTCFullYear(r,0,4),s.setUTCHours(0,0,0,0);var c=l(s);return t.getTime()>=o.getTime()?r+1:t.getTime()>=c.getTime()?r:r-1}function u(e){i(1,arguments);var t=a(e),r=l(t).getTime()-function(e){i(1,arguments);var t=d(e),r=new Date(0);return r.setUTCFullYear(t,0,4),r.setUTCHours(0,0,0,0),l(r)}(t).getTime();return Math.round(r/6048e5)+1}var m={};function h(){return m}function p(e,t){var r,n,o,c,l,d,u,m;i(1,arguments);var p=h(),f=s(null!==(r=null!==(n=null!==(o=null!==(c=null==t?void 0:t.weekStartsOn)&&void 0!==c?c:null==t||null===(l=t.locale)||void 0===l||null===(d=l.options)||void 0===d?void 0:d.weekStartsOn)&&void 0!==o?o:p.weekStartsOn)&&void 0!==n?n:null===(u=p.locale)||void 0===u||null===(m=u.options)||void 0===m?void 0:m.weekStartsOn)&&void 0!==r?r:0);if(!(f>=0&&f<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var _=a(e),v=_.getUTCDay(),g=(v=1&&g<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var b=new Date(0);b.setUTCFullYear(_+1,0,g),b.setUTCHours(0,0,0,0);var y=p(b,t),x=new Date(0);x.setUTCFullYear(_,0,g),x.setUTCHours(0,0,0,0);var j=p(x,t);return f.getTime()>=y.getTime()?_+1:f.getTime()>=j.getTime()?_:_-1}function _(e,t){i(1,arguments);var r=a(e),n=p(r,t).getTime()-function(e,t){var r,n,a,o,c,l,d,u;i(1,arguments);var m=h(),_=s(null!==(r=null!==(n=null!==(a=null!==(o=null==t?void 0:t.firstWeekContainsDate)&&void 0!==o?o:null==t||null===(c=t.locale)||void 0===c||null===(l=c.options)||void 0===l?void 0:l.firstWeekContainsDate)&&void 0!==a?a:m.firstWeekContainsDate)&&void 0!==n?n:null===(d=m.locale)||void 0===d||null===(u=d.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==r?r:1),v=f(e,t),g=new Date(0);return g.setUTCFullYear(v,0,_),g.setUTCHours(0,0,0,0),p(g,t)}(r,t).getTime();return Math.round(n/6048e5)+1}function v(e,t){for(var r=e<0?"-":"",n=Math.abs(e).toString();n.length0?r:1-r;return v("yy"===t?n%100:n,t.length)},M:function(e,t){var r=e.getUTCMonth();return"M"===t?String(r+1):v(r+1,2)},d:function(e,t){return v(e.getUTCDate(),t.length)},a:function(e,t){var r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return"am"===r?"a.m.":"p.m."}},h:function(e,t){return v(e.getUTCHours()%12||12,t.length)},H:function(e,t){return v(e.getUTCHours(),t.length)},m:function(e,t){return v(e.getUTCMinutes(),t.length)},s:function(e,t){return v(e.getUTCSeconds(),t.length)},S:function(e,t){var r=t.length,n=e.getUTCMilliseconds();return v(Math.floor(n*Math.pow(10,r-3)),t.length)}};var b="midnight",y="noon",x="morning",j="afternoon",w="evening",O="night",P={G:function(e,t,r){var n=e.getUTCFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return r.era(n,{width:"abbreviated"});case"GGGGG":return r.era(n,{width:"narrow"});default:return r.era(n,{width:"wide"})}},y:function(e,t,r){if("yo"===t){var n=e.getUTCFullYear(),i=n>0?n:1-n;return r.ordinalNumber(i,{unit:"year"})}return g.y(e,t)},Y:function(e,t,r,n){var i=f(e,n),a=i>0?i:1-i;return"YY"===t?v(a%100,2):"Yo"===t?r.ordinalNumber(a,{unit:"year"}):v(a,t.length)},R:function(e,t){return v(d(e),t.length)},u:function(e,t){return v(e.getUTCFullYear(),t.length)},Q:function(e,t,r){var n=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(n);case"QQ":return v(n,2);case"Qo":return r.ordinalNumber(n,{unit:"quarter"});case"QQQ":return r.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(n,{width:"narrow",context:"formatting"});default:return r.quarter(n,{width:"wide",context:"formatting"})}},q:function(e,t,r){var n=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(n);case"qq":return v(n,2);case"qo":return r.ordinalNumber(n,{unit:"quarter"});case"qqq":return r.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(n,{width:"narrow",context:"standalone"});default:return r.quarter(n,{width:"wide",context:"standalone"})}},M:function(e,t,r){var n=e.getUTCMonth();switch(t){case"M":case"MM":return g.M(e,t);case"Mo":return r.ordinalNumber(n+1,{unit:"month"});case"MMM":return r.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(n,{width:"narrow",context:"formatting"});default:return r.month(n,{width:"wide",context:"formatting"})}},L:function(e,t,r){var n=e.getUTCMonth();switch(t){case"L":return String(n+1);case"LL":return v(n+1,2);case"Lo":return r.ordinalNumber(n+1,{unit:"month"});case"LLL":return r.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(n,{width:"narrow",context:"standalone"});default:return r.month(n,{width:"wide",context:"standalone"})}},w:function(e,t,r,n){var i=_(e,n);return"wo"===t?r.ordinalNumber(i,{unit:"week"}):v(i,t.length)},I:function(e,t,r){var n=u(e);return"Io"===t?r.ordinalNumber(n,{unit:"week"}):v(n,t.length)},d:function(e,t,r){return"do"===t?r.ordinalNumber(e.getUTCDate(),{unit:"date"}):g.d(e,t)},D:function(e,t,r){var n=function(e){i(1,arguments);var t=a(e),r=t.getTime();t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0);var n=r-t.getTime();return Math.floor(n/864e5)+1}(e);return"Do"===t?r.ordinalNumber(n,{unit:"dayOfYear"}):v(n,t.length)},E:function(e,t,r){var n=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return r.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},e:function(e,t,r,n){var i=e.getUTCDay(),a=(i-n.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return v(a,2);case"eo":return r.ordinalNumber(a,{unit:"day"});case"eee":return r.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(i,{width:"short",context:"formatting"});default:return r.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,r,n){var i=e.getUTCDay(),a=(i-n.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return v(a,t.length);case"co":return r.ordinalNumber(a,{unit:"day"});case"ccc":return r.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(i,{width:"narrow",context:"standalone"});case"cccccc":return r.day(i,{width:"short",context:"standalone"});default:return r.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,r){var n=e.getUTCDay(),i=0===n?7:n;switch(t){case"i":return String(i);case"ii":return v(i,t.length);case"io":return r.ordinalNumber(i,{unit:"day"});case"iii":return r.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},a:function(e,t,r){var n=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(e,t,r){var n,i=e.getUTCHours();switch(n=12===i?y:0===i?b:i/12>=1?"pm":"am",t){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(e,t,r){var n,i=e.getUTCHours();switch(n=i>=17?w:i>=12?j:i>=4?x:O,t){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(e,t,r){if("ho"===t){var n=e.getUTCHours()%12;return 0===n&&(n=12),r.ordinalNumber(n,{unit:"hour"})}return g.h(e,t)},H:function(e,t,r){return"Ho"===t?r.ordinalNumber(e.getUTCHours(),{unit:"hour"}):g.H(e,t)},K:function(e,t,r){var n=e.getUTCHours()%12;return"Ko"===t?r.ordinalNumber(n,{unit:"hour"}):v(n,t.length)},k:function(e,t,r){var n=e.getUTCHours();return 0===n&&(n=24),"ko"===t?r.ordinalNumber(n,{unit:"hour"}):v(n,t.length)},m:function(e,t,r){return"mo"===t?r.ordinalNumber(e.getUTCMinutes(),{unit:"minute"}):g.m(e,t)},s:function(e,t,r){return"so"===t?r.ordinalNumber(e.getUTCSeconds(),{unit:"second"}):g.s(e,t)},S:function(e,t){return g.S(e,t)},X:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();if(0===i)return"Z";switch(t){case"X":return M(i);case"XXXX":case"XX":return T(i);default:return T(i,":")}},x:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();switch(t){case"x":return M(i);case"xxxx":case"xx":return T(i);default:return T(i,":")}},O:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+N(i,":");default:return"GMT"+T(i,":")}},z:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+N(i,":");default:return"GMT"+T(i,":")}},t:function(e,t,r,n){var i=n._originalDate||e;return v(Math.floor(i.getTime()/1e3),t.length)},T:function(e,t,r,n){return v((n._originalDate||e).getTime(),t.length)}};function N(e,t){var r=e>0?"-":"+",n=Math.abs(e),i=Math.floor(n/60),a=n%60;if(0===a)return r+String(i);var o=t||"";return r+String(i)+o+v(a,2)}function M(e,t){return e%60==0?(e>0?"-":"+")+v(Math.abs(e)/60,2):T(e,t)}function T(e,t){var r=t||"",n=e>0?"-":"+",i=Math.abs(e);return n+v(Math.floor(i/60),2)+r+v(i%60,2)}const S=P;var k=function(e,t){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},D=function(e,t){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},C={p:D,P:function(e,t){var r,n=e.match(/(P+)(p+)?/)||[],i=n[1],a=n[2];if(!a)return k(e,t);switch(i){case"P":r=t.dateTime({width:"short"});break;case"PP":r=t.dateTime({width:"medium"});break;case"PPP":r=t.dateTime({width:"long"});break;default:r=t.dateTime({width:"full"})}return r.replace("{{date}}",k(i,t)).replace("{{time}}",D(a,t))}};const B=C;var E=["D","DD"],A=["YY","YYYY"];function q(e,t,r){if("YYYY"===e)throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(t,"`) for formatting years to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("YY"===e)throw new RangeError("Use `yy` instead of `YY` (in `".concat(t,"`) for formatting years to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("D"===e)throw new RangeError("Use `d` instead of `D` (in `".concat(t,"`) for formatting days of the month to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("DD"===e)throw new RangeError("Use `dd` instead of `DD` (in `".concat(t,"`) for formatting days of the month to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"))}var I={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};const U=function(e,t,r){var n,i=I[e];return n="string"==typeof i?i:1===t?i.one:i.other.replace("{{count}}",t.toString()),null!=r&&r.addSuffix?r.comparison&&r.comparison>0?"in "+n:n+" ago":n};function W(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.width?String(t.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}var L={date:W({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:W({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:W({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})};var R={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function H(e){return function(t,r){var n;if("formatting"===(null!=r&&r.context?String(r.context):"standalone")&&e.formattingValues){var i=e.defaultFormattingWidth||e.defaultWidth,a=null!=r&&r.width?String(r.width):i;n=e.formattingValues[a]||e.formattingValues[i]}else{var o=e.defaultWidth,s=null!=r&&r.width?String(r.width):e.defaultWidth;n=e.values[s]||e.values[o]}return n[e.argumentCallback?e.argumentCallback(t):t]}}function z(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.width,i=n&&e.matchPatterns[n]||e.matchPatterns[e.defaultMatchWidth],a=t.match(i);if(!a)return null;var o,s=a[0],c=n&&e.parsePatterns[n]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(c)?function(e,t){for(var r=0;r20||n<10)switch(n%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},era:H({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:H({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:H({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:H({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:H({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:($={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}},function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.match($.matchPattern);if(!r)return null;var n=r[0],i=e.match($.parsePattern);if(!i)return null;var a=$.valueCallback?$.valueCallback(i[0]):i[0];return{value:a=t.valueCallback?t.valueCallback(a):a,rest:e.slice(n.length)}}),era:z({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:z({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:z({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:z({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:z({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};var G=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Y=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,V=/^'([^]*?)'?$/,X=/''/g,K=/[a-zA-Z]/;function Q(e,t,r){var n,l,d,u,m,p,f,_,v,g,b,y,x,j,w,O,P,N;i(2,arguments);var M=String(t),T=h(),k=null!==(n=null!==(l=null==r?void 0:r.locale)&&void 0!==l?l:T.locale)&&void 0!==n?n:F,D=s(null!==(d=null!==(u=null!==(m=null!==(p=null==r?void 0:r.firstWeekContainsDate)&&void 0!==p?p:null==r||null===(f=r.locale)||void 0===f||null===(_=f.options)||void 0===_?void 0:_.firstWeekContainsDate)&&void 0!==m?m:T.firstWeekContainsDate)&&void 0!==u?u:null===(v=T.locale)||void 0===v||null===(g=v.options)||void 0===g?void 0:g.firstWeekContainsDate)&&void 0!==d?d:1);if(!(D>=1&&D<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var C=s(null!==(b=null!==(y=null!==(x=null!==(j=null==r?void 0:r.weekStartsOn)&&void 0!==j?j:null==r||null===(w=r.locale)||void 0===w||null===(O=w.options)||void 0===O?void 0:O.weekStartsOn)&&void 0!==x?x:T.weekStartsOn)&&void 0!==y?y:null===(P=T.locale)||void 0===P||null===(N=P.options)||void 0===N?void 0:N.weekStartsOn)&&void 0!==b?b:0);if(!(C>=0&&C<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!k.localize)throw new RangeError("locale must contain localize property");if(!k.formatLong)throw new RangeError("locale must contain formatLong property");var I=a(e);if(!o(I))throw new RangeError("Invalid time value");var U=function(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()}(I),W=c(I,U),L={firstWeekContainsDate:D,weekStartsOn:C,locale:k,_originalDate:I};return M.match(Y).map(function(e){var t=e[0];return"p"===t||"P"===t?(0,B[t])(e,k.formatLong):e}).join("").match(G).map(function(n){if("''"===n)return"'";var i=n[0];if("'"===i)return function(e){var t=e.match(V);if(!t)return e;return t[1].replace(X,"'")}(n);var a,o=S[i];if(o)return null!=r&&r.useAdditionalWeekYearTokens||(a=n,-1===A.indexOf(a))||q(n,t,String(e)),null!=r&&r.useAdditionalDayOfYearTokens||!function(e){return-1!==E.indexOf(e)}(n)||q(n,t,String(e)),o(W,n,k.localize,L);if(i.match(K))throw new RangeError("Format string contains an unescaped latin alphabet character `"+i+"`");return n}).join("")}},38726:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NumbersView=void 0;const i=r(74848),a=r(97481);r(44698);const o=n(r(28774));t.NumbersView=({sectionTitle:e,description:t="",buttonText:r="",buttonLink:n="",buttonTarget:s="_self",data:c,...l})=>(0,i.jsxs)("div",{className:"mdx-numbers-view",...l,children:[(0,i.jsxs)("div",{className:"mdx-numbers-view-header",children:[(0,i.jsxs)("div",{className:"mdx-numbers-view-header-title",children:[(0,i.jsx)(a.Typography,{className:"mdx-numbers-view-section-title",component:"h2",variant:"h2",children:e}),t&&(0,i.jsx)(a.Typography,{className:"mdx-numbers-view-description",variant:"body1",children:t})]}),n&&(0,i.jsx)(o.default,{href:n,target:s,children:(0,i.jsx)(a.Button,{size:"large",children:r||"Learn More"})})]}),(0,i.jsx)("div",{className:"mdx-numbers-view-content",children:c.map((e,t)=>(0,i.jsxs)("div",{className:"mdx-numbers-view-row",children:[(0,i.jsx)(a.Typography,{variant:"body2",className:"mdx-numbers-view-number",children:t+1}),(0,i.jsx)(a.Typography,{component:"h3",variant:"h4",className:"mdx-numbers-view-title",children:e.title})]},t))})]})},39068:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(24622),t)},39628:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(25588),t)},39642:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FeatureList=void 0;const i=r(74848),a=r(97481),o=n(r(34559));function s(e,t){for(e=e.toString();e.length(0,i.jsxs)("div",{className:(0,o.default)(n,"mdx-feature-list",`mdx-feature-list--${t}-aligned`,`mdx-feature-list--cta-${c}`,"none"===d&&"mdx-feature-list--border-none"),...m,children:[(0,i.jsxs)("div",{className:"mdx-feature-list__header",children:[(0,i.jsx)(a.Typography,{variant:"h2",component:"h2",className:"mdx-feature-list__title",children:e}),u&&"top"===c&&(0,i.jsx)("div",{className:"mdx-feature-list__extra",children:u})]}),(0,i.jsx)("div",{className:"mdx-feature-list__list",children:r.map((e,t)=>(0,i.jsxs)("div",{className:(0,o.default)("mdx-feature-list__feature","none"===d&&"mdx-feature-list--border-none"),children:[(0,i.jsxs)("div",{className:"mdx-feature-list__feature-inner",children:["circle"===l?(0,i.jsx)(a.Typography,{variant:"subtitle1",component:"div",className:(0,o.default)("mdx-feature-list__feature-index--circle"),children:t+1}):(0,i.jsxs)(a.Typography,{variant:"subtitle1",component:"div",className:(0,o.default)("mdx-feature-list__feature-index--number"),children:["[",s(t+1,2),"]"]}),(0,i.jsx)(a.Typography,{variant:"h3",component:"h3",className:"mdx-feature-list__feature-title",children:e.title}),(0,i.jsx)(a.Typography,{variant:"body1",component:"p",className:"mdx-feature-list__feature-description",children:(0,i.jsx)("span",{children:e.description})})]}),(0,i.jsx)("div",{className:(0,o.default)("mdx-feature-list__feature-border","none"===d&&"mdx-feature-list__feature-border--none")})]},t))}),u&&"bottom"===c&&(0,i.jsx)("div",{className:"mdx-feature-list__extra",children:u})]})},39708:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(85148),t)},41101:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(30094),t)},41182:(e,t,r)=>{"use strict";r.r(t)},41450:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(60036),t)},42446:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PoweredBy=void 0;const i=r(74848),a=n(r(34559)),o=r(98941);r(89442);t.PoweredBy=({items:e=[],className:t,...r})=>(0,i.jsx)(o.Grid,{className:(0,a.default)(t,"mdx-powered-by"),xs:{cols:1,wrap:!0,gap:"0 1rem"},lg:{cols:2},...r,children:e.map((e,t)=>(0,i.jsx)(o.Grid.Item,{xs:1,children:(0,i.jsx)(o.AppCard,{...e})},t))})},43734:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroAsset=void 0;const i=r(74848),a=n(r(34559));r(48018);t.HeroAsset=({className:e,children:t,...r})=>(0,i.jsx)("div",{className:(0,a.default)(e,"mdx-hero-asset"),...r,children:t})},44454:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(78594),t)},44698:(e,t,r)=>{"use strict";r.r(t)},45262:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Box=void 0;const i=r(74848),a=n(r(34559)),o=r(60727);function s(e,t,r,n){const i="string"==typeof t||"number"==typeof t?{xs:t}:t,a=[],o=e=>"number"==typeof e&&n?`${e}${n}`:`${e}`;return["xs","sm","md","lg","xl"].forEach((t,n)=>{const s=i[t];if(s)a.push([`${e}-${t}`,o(s)]);else{const i=a[n-1]?.[1];a.push([`${e}-${t}`,i||o(r)])}}),Object.fromEntries(a)}r(81394);t.Box=({top:e=0,bottom:t=0,className:r,style:n={},children:c,...l})=>(0,i.jsx)("div",{className:(0,a.default)(r,"mdx-box"),style:(0,o.makeStyle)({...n},{...s("mdx-box-top",e,0,"px"),...s("mdx-box-bottom",t,0,"px")}),...l,children:c})},45902:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DocMetadata=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=n(r(34559)),c=n(r(96540)),l=r(92994);r(4930);const d=r(27803);t.DocMetadata=({className:e,children:t,...r})=>{const{date:n,authors:u}=(0,d.useDocMetadata)(),{content:{authorPage:m}={}}=(0,l.useDocThemeOptions)();return(0,i.jsxs)("div",{className:(0,s.default)(e,"mdx-doc-metadata"),...r,children:[n&&(0,i.jsx)(a.Typography,{variant:"body2",children:n}),u&&u.length>0&&(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)(a.Typography,{variant:"body2",children:["by"," ",u.map((e,t)=>(0,i.jsxs)(c.default.Fragment,{children:[m?(0,i.jsx)(o.default,{to:`author/${e.key}`,children:e.name}):e.name,t(0,i.jsxs)("a",{target:"_blank",...l,className:(0,s.default)(l.className,"mdx-social-card"),children:[(0,i.jsxs)("div",{className:"mdx-social-card__row",children:[(t||r)&&(0,i.jsx)(o.default,{sources:{dark:r??t??"",light:t??r??""},alt:e??"social card logo",className:"mdx-social-card__logo"}),(0,i.jsx)(c.IconExternalLink,{className:"mdx-social-card__external-link"})]}),(0,i.jsx)(a.Typography,{variant:"body1",component:"span",className:"mdx-social-card__description",children:n})]})},46854:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AppCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(31170);t.AppCard=({logoSrc:e,logoSrcDark:t,name:r,description:n,link:c,linkLabel:l,...d})=>(0,i.jsxs)("div",{...d,className:(0,s.default)(d.className,"mdx-app-card"),children:[(e||t)&&(0,i.jsx)(o.default,{sources:{dark:t??e??"",light:e??t??""},alt:"string"==typeof r?r:"",className:"mdx-app-card__logo"}),(0,i.jsx)(a.Typography,{component:"span",variant:"h5",className:"mdx-app-card__name",children:r}),(0,i.jsx)(a.Typography,{variant:"subtitle1",className:"mdx-app-card__description",children:n}),c&&(0,i.jsx)("a",{href:c,target:"_blank",className:"mdx-app-card__link",children:(0,i.jsxs)(a.Button,{size:"large",variant:"outlined",children:[(0,i.jsx)(a.Typography,{variant:"label1",component:"span",children:l??(0,i.jsxs)(i.Fragment,{children:["Visit ",r]})}),(0,i.jsx)("span",{children:(0,i.jsx)(a.PickIcon,{color:"primary"})})]})})]})},48018:(e,t,r)=>{"use strict";r.r(t)},49552:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(55982),t)},53394:(e,t,r)=>{"use strict";r.r(t)},54404:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.jobsPerDepartmentDummyData=void 0,t.jobsPerDepartmentDummyData=[{id:87842,name:"App",parent_id:43806,child_ids:[87847,87852,87850,87848,45530,87849],jobs:[]},{id:54504,name:"Brand Design Studio",parent_id:null,child_ids:[],jobs:[]},{id:45532,name:"Business Development",parent_id:null,child_ids:[],jobs:[]},{id:87841,name:"Codex",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5329400",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2662332,location:{name:"Remote (Worldwide)"},metadata:null,id:5329400,updated_at:"2023-10-13T09:40:03-04:00",requisition_id:"Cod-6",title:"Technical Business Development Lead [Codex]"}]},{id:84549,name:"Communications",parent_id:null,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5276254",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2645076,location:{name:"Remote (Worldwide)"},metadata:null,id:5276254,updated_at:"2023-10-19T03:08:59-04:00",requisition_id:"PROV-Com-16",title:"Motion Designer"}]},{id:45531,name:"Design",parent_id:null,child_ids:[],jobs:[]},{id:87847,name:"Desktop",parent_id:87842,child_ids:[],jobs:[]},{id:87852,name:"Documentation",parent_id:87842,child_ids:[],jobs:[]},{id:45547,name:"Engineering ",parent_id:null,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5419957",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2693761,location:{name:"Remote (Worldwide)"},metadata:null,id:5419957,updated_at:"2023-10-24T07:30:00-04:00",requisition_id:"APP-QA-2",title:"Desktop QA Engineer "},{absolute_url:"https://jobs.status.im/?gh_jid=3694379",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2055210,location:{name:"Remote (Worldwide)"},metadata:null,id:3694379,updated_at:"2023-10-24T16:23:12-04:00",requisition_id:"BACK-1050",title:"Senior C++ Qt/QML developer for blockchain app"},{absolute_url:"https://jobs.status.im/?gh_jid=3702173",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2058858,location:{name:"Remote (Worldwide)"},metadata:null,id:3702173,updated_at:"2023-10-24T16:21:54-04:00",requisition_id:"93",title:"Senior Mobile ClojureScript UI Developer "}]},{id:49925,name:"Finance",parent_id:87845,child_ids:[],jobs:[]},{id:87854,name:"Infrastructure",parent_id:43806,child_ids:[],jobs:[]},{id:87853,name:"Insights",parent_id:87845,child_ids:[],jobs:[]},{id:87850,name:"Keycard",parent_id:87842,child_ids:[],jobs:[]},{id:145838,name:"Leadership",parent_id:null,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5447463",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2704948,location:{name:"Remote (Worldwide)"},metadata:null,id:5447463,updated_at:"2023-10-24T09:07:22-04:00",requisition_id:"LEAD-1",title:"Chief of Staff [whole ecosystem]"}]},{id:74156,name:"Legal",parent_id:87845,child_ids:[],jobs:[]},{id:91698,name:"Logos",parent_id:null,child_ids:[],jobs:[]},{id:43807,name:"Marketing",parent_id:null,child_ids:[],jobs:[]},{id:87848,name:"Mobile",parent_id:87842,child_ids:[],jobs:[]},{id:87843,name:"Nimbus",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5370820",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2679527,location:{name:"Remote (Worldwide)"},metadata:null,id:5370820,updated_at:"2023-10-19T03:05:07-04:00",requisition_id:"LIDO-1",title:"Senior DevOps Engineer (Blockchain)"}]},{id:144866,name:"Nomos",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5433423",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2315608,location:{name:"Remote (Worldwide)"},metadata:null,id:5433423,updated_at:"2023-10-12T11:20:52-04:00",requisition_id:"PROV-Nom-5",title:"Applied Network Researcher"}]},{id:45548,name:"People Operations",parent_id:87845,child_ids:[],jobs:[]},{id:45530,name:"Product Design",parent_id:87842,child_ids:[],jobs:[]},{id:90941,name:"Program Management",parent_id:null,child_ids:[],jobs:[]},{id:43806,name:"Research & Development",parent_id:null,child_ids:[87842,87841,87854,87843,144866,87846,87981,87847,87852,87850,87848,45530,87849],jobs:[]},{id:87851,name:"Security",parent_id:87845,child_ids:[],jobs:[]},{id:87845,name:"Services",parent_id:null,child_ids:[49925,87853,74156,45548,87851],jobs:[]},{id:91697,name:"Status App ",parent_id:null,child_ids:[],jobs:[]},{id:54783,name:"Technical Writing ",parent_id:null,child_ids:[],jobs:[]},{id:87846,name:"Vac",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=4460860",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2331302,location:{name:"Remote (Worldwide)"},metadata:null,id:4460860,updated_at:"2023-10-04T05:13:53-04:00",requisition_id:"PROV-zkV-1",title:"Zero Knowledge Research Engineer "}]},{id:87981,name:"Waku",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5456032",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2707470,location:{name:"Remote (Worldwide)"},metadata:null,id:5456032,updated_at:"2023-10-23T11:40:19-04:00",requisition_id:"WAK-GL-1",title:"Growth Lead"},{absolute_url:"https://jobs.status.im/?gh_jid=3693623",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2055187,location:{name:"Remote (Worldwide)"},metadata:null,id:3693623,updated_at:"2023-10-04T05:13:53-04:00",requisition_id:"PROV-Sec-2",title:"Protocol Engineer"},{absolute_url:"https://jobs.status.im/?gh_jid=3157908",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:1830496,location:{name:"Remote, Worldwide"},metadata:null,id:3157908,updated_at:"2023-10-04T05:13:53-04:00",requisition_id:"PROV-Sec-3",title:"Protocol Researcher (Distributed Systems)"},{absolute_url:"https://jobs.status.im/?gh_jid=5175038",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2584916,location:{name:"Remote (Worldwide)"},metadata:null,id:5175038,updated_at:"2023-10-09T05:53:53-04:00",requisition_id:"SDK-2",title:"Software Engineer (Chat SDK)"},{absolute_url:"https://jobs.status.im/?gh_jid=5310503",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2656108,location:{name:"Remote (Worldwide)"},metadata:null,id:5310503,updated_at:"2023-10-19T03:12:53-04:00",requisition_id:"PROV-Wak-13",title:"Software Engineer Distributed Systems Testing"},{absolute_url:"https://jobs.status.im/?gh_jid=5423094",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2694724,location:{name:"Remote (Worldwide)"},metadata:null,id:5423094,updated_at:"2023-10-24T12:39:05-04:00",requisition_id:"WAK-BD-1",title:"Technical Business Development Lead "}]},{id:87849,name:"Web",parent_id:87842,child_ids:[],jobs:[]},{id:0,name:"No Department",parent_id:null,child_ids:[],jobs:[]}]},54675:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SingleGithubChallenge=void 0;const i=r(74848),a=r(97481),o=n(r(96540)),s=r(30911);r(53394);const c=n(r(28774));function l(e,t=24){const r=new URL(e),n=new URLSearchParams(r.search);return n.set("s",t.toString()),r.search=Array.from(n.entries()).map(([e,t])=>`${e}=${t}`).join("&"),r.toString()}t.SingleGithubChallenge=({issue:e})=>{const t=(e=>{const t=new Map;return t.set(e.user.login,{name:e.user.login,avatarUrl:e.user.avatarUrl}),e.assignees.forEach(e=>{t.set(e.login,{name:e.login,avatarUrl:e.avatarUrl})}),e.comments.forEach(e=>{t.set(e.author.login,{name:e.author.login,avatarUrl:e.author.avatarUrl})}),Array.from(t.values())})(e),r=(e=>{const t=e.projects.map(e=>e.name);return 0===t.length?"":Array.from(new Set(t)).join(", ")})(e),n=""!==r,d=!!e.milestone,u=[];return n&&u.push((0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__label",children:r.includes(", ")?"Projects":"Project"}),(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__project-name",children:r})]})),d&&u.push((0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__label",children:"Milestone"}),(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__milestone-text",children:e.milestone})]})),(0,i.jsxs)("div",{className:"mdx-ghc__container",children:[(0,i.jsx)(c.default,{href:e.url,className:"mdx-ghc__issue-title-link",children:(0,i.jsx)(a.Typography,{variant:"h5",className:"mdx-ghc__issue-title",children:e.title})}),(0,i.jsx)("div",{className:"mdx-ghc__challenge-labels",children:e.labels.map((e,t)=>(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__challenge-label",children:e},t))}),(0,i.jsxs)("div",{className:"mdx-ghc__issue-content-grid",children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__label",children:"Participants"}),(0,i.jsxs)("div",{className:"mdx-ghc__participant-photo-container",children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__comment-count",component:"div",children:t.length}),t.map((e,t)=>(0,i.jsx)("img",{className:"mdx-ghc__participant-photo",src:l(e.avatarUrl),alt:e.name},t))]}),u.map((e,t)=>(0,i.jsx)(o.default.Fragment,{children:e},t))]}),(0,i.jsx)(c.default,{href:e.url,className:"mdx-ghc__view-on-github-link",children:(0,i.jsx)(a.Button,{className:"mdx-ghc__view-on-github-button",icon:(0,i.jsx)(s.IconExternalLink,{}),children:"View on GitHub"})})]})}},54978:(e,t,r)=>{"use strict";r.r(t)},55982:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AssetCard=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(30911),c=r(56794);r(10306);t.AssetCard=({title:e,previewSrc:t,downloadable:r,forceDownload:n=!1,...l})=>{const d=r&&r.length>0;return(0,i.jsxs)("div",{...l,className:(0,o.default)(l.className,"mdx-asset-card",d&&"mdx-asset-card--downloadable"),children:[(0,i.jsxs)("div",{className:"mdx-asset-card__inner",children:[e&&(0,i.jsx)(a.Typography,{component:"div",variant:"subtitle2",className:"mdx-asset-card__title",children:e}),(0,i.jsx)(c.KeepRatio,{width:16,height:9,fullWidth:!0,rootProps:{className:"mdx-asset-card__image"},children:(0,i.jsx)("img",{src:t,alt:"string"==typeof e&&e||"asset image"})})]}),d&&(0,i.jsx)("div",{className:"mdx-asset-card__downloadables",children:r.map((t,r)=>(0,i.jsx)("a",{href:t.src,target:"_blank",download:!0,onClick:r=>((t,r)=>{if(!n)return;t.preventDefault();const{src:i,filename:a}=r,o=document.createElement("a");o.download=a||"string"==typeof e&&e||"",fetch(i).then(e=>e.blob()).then(e=>{const t=window.URL.createObjectURL(e);o.href=t,window.document.body.appendChild(o),o.click(),window.document.body.removeChild(o)}).catch(e=>{console.error("failed to download asset:"+e),o.href=i,o.target="_blank",window.document.body.appendChild(o),o.click(),window.document.body.removeChild(o)})})(r,t),children:(0,i.jsx)(a.Button,{variant:"outlined",size:"small",icon:(0,i.jsx)(s.IconDownload,{}),children:t.title},r)}))})]})}},56158:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollButtons=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(96540);r(91314);t.ScrollButtons=({leftLabel:e,rightLabel:t,containerRef:r,containerId:n,spacing:c="grouped",autoScroll:l=!1,autoScrollInterval:d=5e3,infiniteScroll:u=!1,desktopItemsToScroll:m=3,onMouseEnter:h,onMouseLeave:p,...f})=>{const _=(0,s.useRef)(null),v=(0,s.useRef)(!1),g=e=>{const t=r?r.current:document.querySelector(`#${n}`);if(!t)return;t.classList.add("mdx-scroll-buttons-container");const i=t.children[0];if(!i)return;const a=window.getComputedStyle(t),o=parseInt(a.gap)||16,s=i.offsetWidth+o,c=window.innerWidth<1024?1:m;if(u){const r=t.scrollLeft<=0,n=t.scrollLeft>=t.scrollWidth-t.clientWidth-1;if(-1===e&&r)return void t.scrollTo({behavior:"smooth",left:t.scrollWidth-t.clientWidth});if(1===e&&n)return void t.scrollTo({behavior:"smooth",left:0})}t.scrollTo({behavior:"smooth",left:t.scrollLeft+s*c*e})},b=()=>{l&&!v.current&&(_.current=setInterval(()=>{g(1)},d))},y=()=>{_.current&&(clearInterval(_.current),_.current=null)},x=()=>{y(),b()};return(0,s.useEffect)(()=>(l&&b(),()=>{y()}),[l,d]),(0,i.jsx)("div",{...f,className:(0,o.default)(f.className,"mdx-scroll-buttons","spaced"===c&&"mdx-scroll-buttons--spaced"),children:(0,i.jsxs)(a.IconButtonGroup,{size:"small",color:"primary",children:[(0,i.jsxs)(a.IconButton,{className:(0,o.default)("mdx-scroll-buttons__button",e&&e.length>0&&"mdx-scroll-buttons__button--with-label"),size:"small",onClick:()=>{g(-1),x()},children:[(0,i.jsx)(a.ChevronLeftIcon,{}),e&&e.length>0&&(0,i.jsx)("span",{className:"mdx-scroll-buttons__label",children:e})]}),(0,i.jsxs)(a.IconButton,{className:(0,o.default)("mdx-scroll-buttons__button",t&&t.length&&"mdx-scroll-buttons__button--with-label"),size:"small",onClick:()=>{g(1),x()},children:[t&&t.length>0&&(0,i.jsx)("span",{className:"mdx-scroll-buttons__label",children:t}),(0,i.jsx)(a.ChevronRightIcon,{})]})]})})}},56794:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(858),t)},57026:(e,t,r)=>{"use strict";r.r(t)},57376:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.lsdUtils=t.LsdUtils=void 0;const n=r(97481),i=r(17437);class a{_breakpoints={};getBreakpoints=e=>{if(this._breakpoints[e.name])return this._breakpoints[e.name];const t={};for(let r=0;rthis.getBreakpoints(e)[t];breakpoints=(e=[])=>n.THEME_BREAKPOINTS.filter(t=>!e.find(e=>e===t));typography=(e,t=!1)=>"subtitle3"===e?"\n font-size: 12px !important;\n font-weight: 400 !important;\n line-height: 16px !important;\n ":`\n font-size: var(--lsd-${e}-fontSize)${t?"!important":""};\n font-weight: var(--lsd-${e}-fontWeight)${t?"!important":""};\n line-height: var(--lsd-${e}-lineHeight)${t?"!important":""};\n `;breakpoint=(e,t,r="up",n)=>{const{min:i,max:a}=this.getBreakpoint(e,t);let o="@media ";if("up"===r)o+=`(min-width: ${i}px)`;else if("down"===r)o+=`(max-width: ${a}px)`;else if("between"===r&&n){o+=`(min-width: ${i}px) and (max-width: ${this.getBreakpoint(e,n).min-1}px)`}else o+=`(min-width: ${i}px) and (max-width: ${a}px)`;return`${o}`};responsive=(e,r,n="up")=>{const a=t.lsdUtils.breakpoint(e,r,n);return e=>i.css` - ${a} { - ${e} - } - `}}t.LsdUtils=a,t.lsdUtils=new a},59455:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(5354),t)},60036:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Hero=void 0;const i=r(74848),a=n(r(34559)),o=r(70101);r(37416);t.Hero=({size:e="medium",className:t,children:r,verticalAlign:n="top",...s})=>(0,i.jsx)(o.HeroContext.Provider,{value:{size:e},children:(0,i.jsx)("div",{className:(0,a.default)(t,"mdx-hero",`mdx-hero--${e}`,`mdx-hero--${n}`),...s,children:r})})},60727:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeStyle=void 0;t.makeStyle=(e,t={})=>({...e,...Object.entries(t).reduce((e,[t,r])=>({...e,[`--${t}`]:r}),{})})},61542:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(67118),t)},61597:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(30254),t)},61695:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(69242),t)},61828:(e,t,r)=>{"use strict";r.r(t)},63134:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroTitle=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(70101);r(12114);t.HeroTitle=({size:e,uppercase:t,className:r,children:n,...c})=>{const l=(0,s.useHero)(),d=e||(l?l.size:"medium"),u=void 0!==t?t:"large"===l?.size;return(0,i.jsx)(a.Typography,{variant:"h1",component:"h1",className:(0,o.default)(r,"mdx-hero-title",`mdx-hero-title--${d}`,u&&"mdx-hero-title--uppercase"),...c,children:n})}},63540:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(72084),t)},63658:(e,t,r)=>{"use strict";r.r(t)},64272:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(23902),t)},64458:(e,t,r)=>{"use strict";r.r(t)},64662:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CallToActionButton=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=n(r(34559));r(31406);t.CallToActionButton=({className:e,variant:t="filled",size:r="large",children:n,...c})=>(0,i.jsx)(o.default,{className:(0,s.default)("mdx-cta-button",e),...c,children:(0,i.jsx)(a.Typography,{component:"span",variant:"large"===r?"label1":"label2",children:(0,i.jsx)(a.Button,{size:r,variant:t,children:n})})})},64940:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dummyGithubIssue=void 0,t.dummyGithubIssue={id:"12345",title:"Bug in pagination",body:"When navigating to the second page, the first item repeats.",url:"https://github.com/user/repo/issues/12345",user:{login:"user123",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},labels:["bug","frontend"],commentCount:3,comments:[{id:"c1",author:{login:"alice123",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},body:"I have also noticed this issue. Working on a fix now.",createdAt:"2021-01-01T12:00:00Z"},{id:"c2",author:{login:"bob456",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},body:"Any updates on this?",createdAt:"2021-01-02T15:30:00Z"},{id:"c3",author:{login:"jaquim",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},body:"I like turtles.",createdAt:"2021-01-03T09:45:00Z"}],assignees:[{login:"alice123",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},{login:"bob456",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"}],milestone:"v1.0.0",created_at:"2020-12-31T11:00:00Z",updated_at:"2021-01-04T13:00:00Z",projects:[{name:"Awesome Project"}]}},67118:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CommunityFeedbackCarousel=void 0;const i=r(74848),a=r(96540),o=n(r(34559));r(25018);const s=r(98941),c=r(54046),l=r(97481),d=r(34500),u=n(r(28774)),m=r(30911),h=()=>"undefined"!=typeof window&&window.innerWidth<=768;t.CommunityFeedbackCarousel=({title:e,description:t="",gridGap:r="16px",autoScrollInterval:n=5e3,desktopItemsToScroll:p=1,className:f,items:_=[],...v})=>{const g=(0,c.useHydrated)(),b=(0,a.useRef)(null),y=(0,a.useRef)(null),[x,j]=(0,a.useState)({}),[w,O]=(0,a.useState)(!1),[P,N]=(0,a.useState)({}),[M,T]=(0,a.useState)(!1);"undefined"!=typeof window&&g&&!y.current&&(y.current=b.current?.querySelector(".mdx-grid__content")??null);(0,a.useEffect)(()=>{if(!g)return;T(h());const e=()=>{const e=b.current?.querySelectorAll(".mdx-community-feedback__item-content-text");e&&e.forEach((e,t)=>{const r=e,n=window.getComputedStyle(r),i=2*(parseFloat(n.lineHeight)||1.2*parseFloat(n.fontSize)),a=r.scrollHeight;N(e=>({...e,[t]:a>i}))})},t=()=>{T(h()),e()};return e(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[g,_]);return(0,i.jsxs)("div",{ref:b,className:(0,o.default)(f,"mdx-community-feedback"),...v,children:[(0,i.jsx)(s.SectionHeader,{title:e,noBorder:!0}),t&&(0,i.jsx)(l.Typography,{variant:"body1",className:"mdx-community-feedback__description",children:t}),(0,i.jsx)("div",{className:"mdx-community-feedback-buttons",children:(0,i.jsx)(d.ScrollButtons,{containerRef:y,spacing:"spaced",autoScroll:!w&&!M,autoScrollInterval:n,infiniteScroll:!0,desktopItemsToScroll:p})}),(0,i.jsx)(s.Grid,{className:"mdx-community-feedback__items",xs:{cols:3,wrap:!1,gap:r,scrollButtons:!1},onMouseEnter:()=>{O(!0)},onMouseLeave:()=>{O(!1)},children:_.map((e,t)=>{const r=x[t],n=P[t]||!1,a=(()=>{if(!e?.postMedia)return null;const n=e.postMedia.split(".").pop()?.toLowerCase();return["jpg","jpeg","png","gif","webp","svg"].includes(n||"")?(0,i.jsx)("img",{src:e.postMedia,alt:"image-"+t,className:"mdx-community-feedback__item-image "+(r?"expanded":"collapsed")}):["mp4","webm","mov"].includes(n||"")?(0,i.jsx)("video",{src:e.postMedia,className:"mdx-community-feedback__item-image "+(r?"expanded":"collapsed"),autoPlay:!0,playsInline:!0,muted:!0,loop:!0}):null})(),o=n||e?.postMedia;return(0,i.jsxs)(s.Grid.Item,{className:"mdx-community-feedback__item",children:[(0,i.jsxs)("div",{className:"mdx-community-feedback__item-header",children:[(0,i.jsxs)(u.default,{href:e.url,className:"mdx-community-feedback__item-header-user",children:[(0,i.jsx)("img",{className:"mdx-community-feedback__item-header-user-image",src:e.user.image,alt:e.user.displayName}),(0,i.jsxs)("div",{className:"mdx-community-feedback__item-header-user-info",children:[(0,i.jsx)(l.Typography,{variant:"body2",className:"mdx-community-feedback__item-header-username",children:e.user.displayName}),(0,i.jsxs)(l.Typography,{variant:"body2",className:"mdx-community-feedback__item-header-user-handle",children:["@",e.user.handle]})]})]}),(0,i.jsx)(u.default,{className:"mdx-community-feedback__item-header-link",href:e.url,children:(0,i.jsx)(m.IconX,{})})]}),(0,i.jsxs)("div",{className:"mdx-community-feedback__item-content",style:{maxHeight:!r&&e?.postMedia?180:"none",overflow:!r&&e?.postMedia?"hidden":"visible",position:e?.postMedia?"relative":"static"},children:[(0,i.jsx)(l.Typography,{variant:"body1",className:"mdx-community-feedback__item-content-text",style:r?{display:"block",whiteSpace:"pre-wrap"}:{display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:3,overflow:"hidden",textOverflow:"ellipsis"},children:e.content}),e.postMedia&&(0,i.jsxs)("div",{className:"mdx-community-feedback__media-wrapper",children:[a,!r&&(0,i.jsx)("div",{className:"mdx-community-feedback__item-gradient"})]}),!r&&(0,i.jsx)("div",{className:"mdx-community-feedback__item-gradient"}),o&&!r&&(0,i.jsx)("div",{className:"mdx-community-feedback__item-see-more "+(e?.postMedia&&n?"":"static"),children:(0,i.jsx)(l.Typography,{variant:"body2",className:"mdx-community-feedback__item-see-more-text",onClick:()=>j(e=>({...e,[t]:!0})),children:"See more.."})})]}),r&&(0,i.jsx)("div",{children:(0,i.jsx)(l.Typography,{className:"mdx-community-feedback__item-see-less-text",variant:"body2",onClick:()=>j(e=>({...e,[t]:!1})),children:"See less"})})]},t)})})]})}},68035:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(13110),t)},68674:(e,t,r)=>{"use strict";r.r(t)},69242:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NewsCardList=void 0;const n=r(74848),i=r(96540);r(92986);const a=r(97481),o=r(98941);t.NewsCardList=({data:e,...t})=>{const[r,s]=(0,i.useState)(e?.length>8),[c,l]=(0,i.useState)(8);return(0,n.jsx)("div",{className:"mdx-news-card-list__container",...t,children:(0,n.jsxs)("div",{children:[(0,n.jsx)(o.Box,{top:{xs:64},bottom:64,children:(0,n.jsx)(o.Grid,{xs:{cols:1,gap:"64px 16px"},md:{cols:4},children:e.slice(0,c).map((e,t)=>(0,n.jsx)(o.Grid.Item,{xs:1,children:(0,n.jsx)(o.NewsCard,{...e})},t))})}),r&&(0,n.jsx)(a.Button,{className:"mdx-news-card-list__button",onClick:()=>{l(e=>e+8),c+6>=e?.length&&s(!1)},size:"large",children:"See more"})]})})}},69965:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(45902),t)},70101:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.useHero=t.HeroContext=void 0;const o=a(r(96540));t.HeroContext=o.default.createContext({size:"medium"});t.useHero=()=>(0,o.useContext)(t.HeroContext)},70462:(e,t,r)=>{"use strict";r.r(t)},71136:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(21998),t)},72084:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroAction=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=n(r(34559));r(94620);t.HeroAction=({size:e="large",variant:t="outlined",className:r,children:n,...c})=>(0,i.jsx)(o.default,{className:(0,s.default)(r,"mdx-hero-action",`mdx-hero-action--${e}`),...c,children:(0,i.jsx)(a.Button,{variant:t,size:e,children:(0,i.jsx)(a.Typography,{component:"span",variant:"label1",style:{color:"inherit"},children:n})})})},75117:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={scrollToBottom:"scrollToBottom_NE5w",hide:"hide_q_kn"}},76719:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(45262),t)},77187:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(18486),t)},78594:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Roadmap=void 0;const i=r(74848),a=n(r(34559)),o=r(98941),s=r(7290);r(6454);t.Roadmap=({title:e,description:t,timeline:r=[],noBorder:n=!1,href:c,linkLabel:l,className:d,children:u,...m})=>{const h=(new Date).getFullYear(),p=(e,t,r)=>{if(t===r.length-1)return"none";e.period[0],r[t+1].period[0];return"solid"};return(0,i.jsxs)("div",{className:(0,a.default)(d,"mdx-roadmap"),...m,children:[(0,i.jsx)(o.CallToActionSection,{className:"mdx-roadmap__header",title:e,description:t,columns:1,ctaPosition:"top",border:!1,align:"left",href:c,label:l,children:u}),r.length>0&&(0,i.jsx)(o.Grid,{className:"mdx-roadmap__timeline",xs:{cols:6,wrap:!1,gap:"0 1rem",scrollButtons:!0},spacingButtons:!0,leftLabel:"Past",rightLabel:"Future",children:r.map((e,t)=>(0,i.jsx)(o.Grid.Item,{xs:1,children:(0,i.jsx)(s.TimelineItem,{...e,index:t,period:e.period??h,description:e.description,borderStyle:p(e,t,r),periodStyle:"filled",className:(0,a.default)("mdx-roadmap__timeline-item",n&&"mdx-roadmap__timeline-item--no-border",e.className)})},t))})]})}},79028:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Grid=void 0;const i=r(74848),a=r(97481),o=r(17437),s=n(r(25505)),c=n(r(34559)),l=r(96540),d=r(57376),u=r(34500),m=r(90023);t.Grid=({actions:e,leftLabel:t="",rightLabel:r="",spacingButtons:n=!1,children:a,...o})=>{const s=(0,l.useRef)(null);return(0,i.jsxs)(h,{...o,className:(0,c.default)(o.className,"mdx-grid"),children:[(0,i.jsxs)("div",{className:"mdx-grid__actions",children:[e,(0,i.jsx)(u.ScrollButtons,{containerRef:s,className:"mdx-grid__scroll",leftLabel:t,rightLabel:r,spacing:n?"spaced":"grouped"})]}),(0,i.jsx)("div",{ref:s,className:(0,c.default)("mdx-grid__content","hidden-scrollbar"),children:a})]})},t.Grid.Item=m.GridItem;const h=s.default.div` - width: 100%; - - .mdx-grid__scroll { - display: flex; - } - - .mdx-grid__content { - display: grid; - gap: var(--grid-gap); - grid-template-columns: repeat(var(--grid-cols), minmax(0, 1fr)); - overflow: hidden; - } - - .mdx-grid__actions { - display: flex; - flex-direction: row; - align-items: center; - gap: 1rem; - - & > * { - margin-bottom: 3rem; - } - } - - ${e=>a.THEME_BREAKPOINTS.map(t=>{if(!e[t])return null;const r=e[t];return d.lsdUtils.responsive(e.theme,t,"up")(o.css` - ${void 0!==r.cols&&`\n --grid-cols: ${r.cols};\n `} - - ${void 0!==r.gap&&`\n --grid-gap: ${r.gap};\n `} - - ${(void 0===r.wrap||!0===r.wrap)&&o.css` - .mdx-grid__scroll { - display: none; - } - .mdx-grid__content { - display: grid; - flex-wrap: unset; - overflow-x: unset; - overflow-y: unset; - scroll-snap-type: unset; - } - `} - - ${void 0!==r.wrap&&!1===r.wrap&&o.css` - .mdx-grid__scroll { - display: flex; - } - .mdx-grid__content { - display: flex; - flex-wrap: nowrap; - overflow-x: scroll; - overflow-y: hidden; - scroll-snap-type: x mandatory; - } - `} - - ${!1===r.scrollButtons&&o.css` - .mdx-grid__scroll { - display: none; - } - `} - `)})} -`},79820:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(38634),t)},81394:(e,t,r)=>{"use strict";r.r(t)},83016:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroInfo=void 0;const i=r(74848),a=n(r(34559)),o=r(54046),s=r(70101),c=r(98941);r(12824);t.HeroInfo=({size:e,className:t,hideScrollToBottom:r=!1,children:n,...l})=>{const d=(0,s.useHero)(),u=(0,o.useHydrated)(),m=e||(d?d.size:"medium");return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{className:(0,a.default)(t,"mdx-hero-info",`mdx-hero-info--${m}`),...l,children:n}),u&&!r&&(0,i.jsx)(c.ScrollToBottom,{})]})}},83330:(e,t,r)=>{"use strict";r.r(t)},83510:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.InputCTASection=void 0;const i=r(74848),a=n(r(96540));r(64458);const o=r(97481),s=n(r(28774)),c=n(r(34559));t.InputCTASection=({title:e,description:t,label:r,link:n,linkProps:l,formInput:d,buType:u,newsletterId:m,successMessage:h="Thank you for subscribing!"})=>{const[p,f]=a.default.useState({email:"",name:""}),[_,v]=a.default.useState(""),g=e=>{f({...p,[e.target.name]:e.target.value})};return(0,i.jsxs)("div",{className:"mdx-input-cta-section__container",children:[e&&(0,i.jsx)(o.Typography,{variant:"subtitle1",component:"p",className:"mdx-input-cta-section__title",children:e}),(0,i.jsx)(o.Typography,{component:"h3",variant:"h3",className:(0,c.default)("input-cta-section__description",!d&&"input-cta-section__description--no-form"),children:t}),d?.length?(0,i.jsxs)("form",{className:"mdx-input-cta-section__form",onSubmit:async e=>{if(e.preventDefault(),p?.email)try{if(!u||!m)return void v("Business unit type or newsletter ID is missing.");const e=await fetch("https://admin-acid.logos.co/api/admin/newsletters/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:p.email,type:u,newsletter:m})}),t=await e.json();if(t?.result?.errors&&t?.result?.errors[0]?.context?.length)return void v(t?.result?.errors[0].context);if(t?.result?.message?.length)return void v(t.result.message);v(h)}catch(t){console.log(t),v("There was an error submitting the form.")}else v("Please enter an email address")},children:[(0,i.jsx)("div",{className:"mdx-input-cta-section__input-fields",children:d.map((e,t)=>(0,i.jsx)(o.TextField,{className:"mdx-input-cta-section__input",onChange:g,value:p[e.name],inputProps:{...e}},t))}),(0,i.jsx)("div",{children:(0,i.jsx)(o.Button,{type:"submit",className:"mdx-input-cta-section__cta",children:(0,i.jsx)(o.Typography,{variant:"body1",children:r})})})]}):(0,i.jsx)(s.default,{to:n,...l,children:(0,i.jsx)(o.Button,{className:"mdx-input-cta-section__cta",children:(0,i.jsx)(o.Typography,{variant:"body1",children:r})})}),_&&(0,i.jsx)(o.Typography,{className:"mdx-input-cta-section__message",variant:"body2",children:_})]})}},83636:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TimelineItem=void 0;const i=r(74848),a=r(97481),o=n(r(34559));r(61828);const s=e=>{if(Array.isArray(e)&&e.length>0){let t=e[0].toString();return e.length>1&&("+"===e[1]?t+="+":t+=" "+e[1]),t}return""};t.TimelineItem=({index:e,period:t,description:r,borderStyle:n,periodStyle:c,className:l,children:d,...u})=>(0,i.jsxs)("div",{className:(0,o.default)(l,"mdx-timeline-item","dashed"===n&&"mdx-timeline-item--border-dashed"),...u,children:[(0,i.jsxs)("div",{className:"mdx-timeline-item__header",children:[(0,i.jsxs)("div",{className:"mdx-timeline-item__period-container",children:["none"!==n&&(0,i.jsx)("div",{className:(0,o.default)("mdx-timeline-item__border")}),(0,i.jsx)(a.Typography,{variant:"subtitle2",component:"span",className:(0,o.default)("mdx-timeline-item__period",`mdx-timeline-item__period--${c}`),children:s(t)})]}),(0,i.jsx)(a.Typography,{variant:"h2",component:"span",className:"mdx-timeline-item__index",children:"number"==typeof e?`${e<9?"0":""}${e+1}`:e})]}),(0,i.jsx)(a.Typography,{variant:"h5",component:"p",className:"mdx-timeline-item__description",children:r})]})},84942:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NewsCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(20314);const c=r(17718);t.NewsCard=({thumbnail:e,title:t,date:r,author:n,description:l="",tags:d=[],...u})=>(0,i.jsxs)("a",{target:"_blank",...u,className:(0,s.default)(u.className,"mdx-news-card"),children:[e&&(0,i.jsxs)("div",{className:"mdx-news-card-thumbnail__container",children:[(0,i.jsx)(o.default,{sources:{dark:e,light:e},alt:t??"news thumbnail",className:"mdx-news-card__thumbnail"}),(0,i.jsx)("div",{className:"mdx-news-card__external-link-icon",children:(0,i.jsx)(c.IconExternalLink,{className:"mdx-jpd__external-link-icon"})})]}),(0,i.jsx)(a.Typography,{component:"h3",variant:"h4",className:"mdx-news-card__title",children:t}),(0,i.jsx)("div",{className:"mdx-news-card__row",children:(0,i.jsxs)("div",{className:"mdx-news-card__info",children:[r&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Typography,{variant:"body2",children:r}),(0,i.jsx)(a.Typography,{variant:"body2",children:"\xb7"})]}),(0,i.jsxs)(a.Typography,{variant:"body2",children:["by ",n]})]})}),l&&(0,i.jsx)(a.Typography,{variant:"body2",className:"mdx-news-card__description",children:l}),d?.length>0&&(0,i.jsx)("div",{className:"mdx-news-card__tags",children:d.map((e,t)=>(0,i.jsx)(a.Tag,{size:"small",className:"mdx-news-card__tag",children:e},t))})]})},85148:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.VideoSection=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941);r(26600);const c=r(30911),l=n(r(28774));t.VideoSection=({label:e,href:t,title:r,columns:n=1,description:d,target:u,border:m=!0,src:h,align:p="unset",className:f,children:_,variant:v="outlined",ctaPosition:g="bottom",...b})=>{const y=!!t,x=!r||!!d||y?r&&!d&&y?"title-button":r&&d&&2===n?"full-width":r&&d?"list":"simple":"title-only",j=t&&"top"===g&&(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-video-section__link",variant:v,children:e});return(0,i.jsxs)("div",{className:(0,o.default)(f,"mdx-video-section",`mdx-video-section--${x}`,!m&&"mdx-video-section--no-border"),...b,children:[(0,i.jsxs)("div",{className:(0,o.default)("mdx-video-section__container","unset"!==p&&`mdx-video-section--align-${p}`),children:[(0,i.jsxs)("div",{className:"mdx-video-section__header",children:[(0,i.jsx)(c.IconPlay,{}),(0,i.jsx)(a.Typography,{component:"h2",className:(0,o.default)("mdx-video-section__title"),children:r})]}),d&&(0,i.jsx)(a.Typography,{component:"h3",className:"mdx-video-section__description",children:d}),(0,i.jsx)("div",{className:"mdx-video-section__header__mobile-button",children:j}),h&&"bottom"===g&&(0,i.jsx)(l.default,{href:h,target:"_blank",children:(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-video-section__link",variant:v,size:"small",children:e})})]}),(0,i.jsx)("div",{className:"mdx-video-section__video-container",children:(0,i.jsx)("iframe",{width:"100%",height:"100%",src:h,title:"Waku Tutorial 001 : Introduction to Waku",frameBorder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerPolicy:"strict-origin-when-cross-origin",allowFullScreen:!0,className:"mdx-video-section__video"})})]})}},85986:(e,t,r)=>{"use strict";r.r(t)},86370:(e,t,r)=>{"use strict";r.r(t)},86650:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SpecCard=void 0;const i=r(74848),a=r(97481),o=n(r(34559));r(15514);const s=r(30911),c=n(r(28774));t.SpecCard=({label:e,href:t,title:r,description:n,target:l="_blank",align:d="unset",className:u,children:m,...h})=>(0,i.jsx)("div",{className:(0,o.default)(u,"mdx-spec-card"),...h,children:(0,i.jsxs)("div",{className:(0,o.default)("mdx-spec-card__container","unset"!==d&&`mdx-spec-card--align-${d}`),children:[(0,i.jsx)("div",{className:"mdx-spec-card__header",children:(0,i.jsx)(a.Typography,{component:"h3",variant:"h4",className:(0,o.default)("mdx-spec-card__title"),children:r})}),n&&(0,i.jsx)(a.Typography,{component:"p",variant:"body2",className:"mdx-spec-card__description",children:n}),t&&(0,i.jsx)(c.default,{target:l,href:t,className:"mdx-spec-card__link",children:(0,i.jsxs)(a.IconButton,{className:"mdx-spec-card__button",children:[(0,i.jsx)(a.Typography,{variant:"body3",children:e}),(0,i.jsx)(s.IconExternalLink,{className:"mdx-spec-card__button-icon"})]})})]})})},86798:(e,t,r)=>{"use strict";r.r(t)},86908:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NewsletterSubscription=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941),c=r(12230);r(13012);t.NewsletterSubscription=({title:e,description:t,byType:r,newsletterId:n,...l})=>{const d=(0,c.useNewsletterApi)(),u=!d.message||d.error,m=e??"Newsletter",h=t??(0,i.jsxs)(i.Fragment,{children:["Subscribe",(0,i.jsx)("br",{}),"to our newsletter"]});return(0,i.jsx)(s.CallToActionSection,{className:"mdx-ns",title:(0,i.jsx)("span",{className:"mdx-ns__title",children:m}),description:(0,i.jsxs)("div",{className:"mdx-ns__inner",children:[(0,i.jsx)("span",{className:"mdx-ns__description",children:h}),(0,i.jsxs)("form",{onSubmit:e=>{e.preventDefault();const t=e.target.elements.namedItem("email").value;d.subscribe(r,t,n)},children:[d.message&&(0,i.jsx)(a.Toast,{title:d.message,className:"mdx-ns__toast",icon:d.error?a.ErrorIcon:a.CheckIcon}),(0,i.jsxs)("div",{className:(0,o.default)("mdx-ns__inputs",!u&&"hidden"),children:[(0,i.jsx)(a.TextField,{inputProps:{type:"text",name:"name"},variant:"underlined",placeholder:"First name or pseudonym"}),(0,i.jsx)(a.TextField,{inputProps:{type:"email",name:"email",required:!0},variant:"underlined",placeholder:"Email address (required)"})]}),(0,i.jsx)(a.Button,{size:"large",color:"primary",variant:"outlined",className:(0,o.default)("mdx-ns__submit-button",!u&&"hidden"),disabled:d.busy,children:"Subscribe"})]})]}),columns:2,...l})}},87113:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(64662),t)},87250:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(79028),t),i(r(90023),t)},87746:(e,t,r)=>{"use strict";r.r(t)},88386:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventBanner=void 0;const i=r(74848),a=n(r(1893));r(4366);t.EventBanner=({src:e})=>(0,i.jsx)(a.default,{sources:{dark:e,light:e},alt:"event thumbnail",className:"mdx-event-banner__thumbnail"})},88582:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(43734),t)},89303:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(83510),t)},89442:(e,t,r)=>{"use strict";r.r(t)},90023:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GridItem=void 0;const i=r(74848),a=n(r(34559)),o=n(r(25505)),s=r(97481),c=r(57376),l=r(17437);t.GridItem=({children:e,...t})=>(0,i.jsx)(d,{...t,className:(0,a.default)(t.className),children:e});const d=o.default.div` - ${e=>s.THEME_BREAKPOINTS.map(t=>{if(!e[t])return null;const r=e[t];return c.lsdUtils.responsive(e.theme,t,"up")(l.css` - grid-column: span ${r}; - flex-basis: calc(100% / var(--grid-cols) * ${r}); - `)})} -`},90206:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventInfo=void 0;const n=r(74848);r(21010);const i=r(97481);t.EventInfo=({label:e,content:t})=>(0,n.jsxs)("div",{className:"mdx-event-info__container",children:[(0,n.jsx)(i.Typography,{variant:"body2",className:"mdx-event-info__label",children:e}),(0,n.jsx)(i.Typography,{variant:"body1",className:"mdx-event-info__content",children:t})]})},91314:(e,t,r)=>{"use strict";r.r(t)},91632:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(63134),t)},91771:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(29510),t)},92562:(e,t,r)=>{"use strict";r.r(t)},92986:(e,t,r)=>{"use strict";r.r(t)},94620:(e,t,r)=>{"use strict";r.r(t)},96323:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollY=void 0;const n=r(65255),i=r(96540);t.useScrollY=()=>{const[e,t]=(0,i.useState)(0);return(0,n.useWindowEventListener)("scroll",()=>{t(window.scrollY)}),e}},97200:(e,t,r)=>{var n=r(13222),i=0;e.exports=function(e){var t=++i;return n(e)+t}},97278:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventProfile=void 0;const i=r(74848),a=r(97481),o=n(r(1893));r(36306);const s=r(30911);t.EventProfile=({image:e,name:t,role:r,email:n,linkedin:c,...l})=>(0,i.jsxs)("div",{...l,className:"mdx-event-profile",children:[(0,i.jsx)(o.default,{sources:{dark:e,light:e},alt:e??"event profile",className:"mdx-event-profile__image"}),(0,i.jsxs)("div",{className:"mdx-event-profile__info",children:[(0,i.jsx)(a.Typography,{component:"p",variant:"subtitle1",className:"mdx-event-profile__title",children:t}),(0,i.jsx)(a.Typography,{variant:"body2",className:"mdx-event-profile__role",children:r}),(0,i.jsxs)("div",{className:"mdx-event-profile__social",children:[n&&(0,i.jsx)("a",{href:`mailto:${n}`,target:"_blank",rel:"noopener noreferrer",children:(0,i.jsx)(s.IconEmail,{})}),c&&(0,i.jsx)("a",{href:c,target:"_blank",rel:"noopener noreferrer",children:(0,i.jsx)(s.IconLinkedin,{})})]})]})]})},98941:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(15359),t),i(r(5195),t),i(r(49552),t),i(r(76719),t),i(r(87113),t),i(r(79820),t),i(r(61542),t),i(r(69965),t),i(r(77187),t),i(r(8760),t),i(r(7491),t),i(r(87250),t),i(r(41450),t),i(r(63540),t),i(r(41101),t),i(r(71136),t),i(r(3874),t),i(r(91632),t),i(r(11677),t),i(r(88582),t),i(r(37187),t),i(r(91771),t),i(r(16224),t),i(r(30707),t),i(r(61597),t),i(r(44454),t),i(r(5897),t),i(r(39068),t),i(r(68035),t),i(r(41),t),i(r(17715),t),i(r(7290),t),i(r(2984),t),i(r(64272),t),i(r(24120),t),i(r(29294),t),i(r(3399),t),i(r(32331),t),i(r(99635),t),i(r(39628),t),i(r(89303),t),i(r(59455),t),i(r(13431),t),i(r(61695),t),i(r(39708),t),i(r(27959),t),i(r(99849),t),i(r(37135),t)},99635:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(29146),t)},99849:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(38726),t)}}]); \ No newline at end of file diff --git a/assets/js/4665.ef135cfc.js b/assets/js/4665.ef135cfc.js new file mode 100644 index 0000000..187c22f --- /dev/null +++ b/assets/js/4665.ef135cfc.js @@ -0,0 +1,72 @@ +(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4665],{41:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(9430),t)},250:(e,t,r)=>{"use strict";r.r(t)},858:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.KeepRatio=void 0;const i=r(74848),a=n(r(34559)),o=n(r(34646));t.KeepRatio=({children:e,width:t,height:r,fullHeight:n=!1,fullWidth:s=!0,rootProps:c,contentProps:l,containerWidth:d,containerHeight:u,keep:m=!0})=>{const h=!n&&s,p=!h,f=100*(p?r/t:t/r);return(0,i.jsxs)("div",{...c??{},className:(0,a.default)(o.default.root,h&&o.default.fullWidth,p&&o.default.fullHeight,m&&o.default.keep,c?.className),children:[(0,i.jsx)("div",{...l??{},className:(0,a.default)(o.default.content,l?.className),children:e}),m&&(0,i.jsx)("svg",{style:{pointerEvents:"none",height:p?"100%":u?`calc(${r} / ${t} * ${d})`:"auto",width:h?"100%":u?`calc(${t} / ${r} * ${u})`:"auto"},viewBox:`0 0 ${h?f:100} ${p?f:100}`})]})}},1442:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(70462);t.EventCard=({thumbnail:e,title:t,date:r,location:n,target:c="_self",...l})=>(0,i.jsxs)("a",{target:c,...l,className:(0,s.default)(l.className,"mdx-event-card"),children:[(0,i.jsx)(o.default,{sources:{dark:e,light:e},alt:t??"event thumbnail",className:"mdx-event-card__thumbnail"}),(0,i.jsx)(a.Typography,{component:"h5",variant:"subtitle1",className:"mdx-event-card__title",children:t}),(0,i.jsxs)("div",{className:"mdx-event-card__row",children:[(0,i.jsxs)("div",{className:"mdx-event-card__info",children:[(0,i.jsx)(a.Typography,{className:"mdx-event-card__label",variant:"body3",children:"Date"}),(0,i.jsx)(a.Typography,{variant:"body3",children:r})]}),(0,i.jsxs)("div",{className:"mdx-event-card__info",children:[(0,i.jsx)(a.Typography,{className:"mdx-event-card__label",variant:"body3",children:"Location"}),(0,i.jsx)(a.Typography,{variant:"body3",children:n})]})]})]})},2984:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(1442),t)},3399:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(6978),t)},3874:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(83016),t)},4366:(e,t,r)=>{"use strict";r.r(t)},4930:(e,t,r)=>{"use strict";r.r(t)},5195:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(46854),t)},5354:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventHeader=void 0;const n=r(74848);r(30126);const i=r(97481);t.EventHeader=({title:e,description:t})=>(0,n.jsxs)("div",{className:"mdx-event-header__container",children:[(0,n.jsx)(i.Typography,{variant:"h1",component:"h1",className:"mdx-event-header__label",children:e}),(0,n.jsx)(i.Typography,{variant:"subtitle1",className:"mdx-event-header__content",children:t})]})},5754:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GithubChallenges=void 0;const n=r(74848),i=r(97481),a=r(64940),o=r(54675),s=({message:e})=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.Typography,{variant:"h1",className:"mdx-ghc__header",children:"Open challenges"}),!!e&&(0,n.jsx)(i.Typography,{variant:"body1",children:e})]});t.GithubChallenges=({challengesData:e,useDummyData:t,subheaderText:r,filterByName:c,...l})=>{let d=t?[a.dummyGithubIssue]:(e=>{let t=[];return Object.keys(e).forEach(r=>{if(!isNaN(Number(r))){const n=Object.values(e[r])[0];Array.isArray(n)&&(t=t.concat(n))}}),t})(e);if(!d||(u=d,!Array.isArray(u)||!u.length))return(0,n.jsx)(s,{message:"No challenges to show"});var u;if(c)try{const e=new RegExp(c,"i");d=d?.filter(t=>e.test(t.title))}catch(m){console.error("Invalid regex pattern:",m)}return(0,n.jsxs)("div",{...l,children:[(0,n.jsx)(s,{}),!!r&&(0,n.jsx)(i.Typography,{variant:"body1",className:"mdx-ghc-subheader-text",component:"div",children:r}),d.map(e=>(0,n.jsx)(o.SingleGithubChallenge,{issue:e},e.id))]})}},5897:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(7142),t)},6454:(e,t,r)=>{"use strict";r.r(t)},6978:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventAbout=void 0;const n=r(74848);r(11850);const i=r(97481);t.EventAbout=({children:e})=>(0,n.jsxs)("div",{className:"mdx-event-about__container",children:[(0,n.jsx)(i.Typography,{variant:"h2",component:"p",className:"mdx-event-about__title",children:"About"}),(0,n.jsx)(i.Typography,{variant:"body1",children:e})]})},7142:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollToBottom=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(96540),c=r(44975),l=r(60727),d=r(74881),u=r(96323),m=n(r(75117));t.ScrollToBottom=e=>{const{children:t,className:r,style:n,...h}=e,p=(0,u.useScrollY)(),f=(0,d.useIsMobile)(),_=(0,c.useWindowSize)(),v=(0,s.useMemo)(()=>(document.querySelector(".mdx-hero")?.getBoundingClientRect()?.bottom??0)+window.scrollY,[_.height]);return(0,i.jsx)(a.IconButton,{onClick:()=>{const e=document.querySelector(".main-wrapper article"),t=e?.children?.[1];if(t)return window.scrollTo({left:0,top:t.getBoundingClientRect().top-(f?200:0),behavior:"smooth"});window.scrollTo({top:document.body.scrollHeight,behavior:"smooth"})},size:f?"small":"large",className:(0,o.default)(m.default.scrollToBottom,r,p>20&&m.default.hide),style:(0,l.makeStyle)({...n??{}},{vh:_.height/100+"px",maxTop:v+"px"}),...h,children:(0,i.jsx)(a.ChevronDownIcon,{color:"primary"})})}},7290:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(83636),t)},7491:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(5754),t)},8760:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(39642),t)},9430:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ShowcaseCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(63658);t.ShowcaseCard=({index:e,name:t,logoSrc:r,logoSrcDark:n,description:c,className:l,size:d="large",borderStyle:u="solid",label:m,cta:h,children:p,...f})=>(0,i.jsx)("div",{className:(0,s.default)(l,"mdx-showcase-card",`mdx-showcase-card--${d}`,`mdx-showcase-card--border-${u}`),...f,children:(0,i.jsxs)("div",{className:"mdx-showcase-card__inner",children:[e&&(0,i.jsx)(a.Typography,{className:"mdx-showcase-card__index",variant:"subtitle2",component:"div",children:e}),(r||n)&&(0,i.jsx)(o.default,{sources:{dark:n??r??"",light:r??n??""},alt:"string"==typeof t?t:"",className:"mdx-showcase-card__logo"}),(0,i.jsxs)("div",{className:"mdx-showcase-card__title",children:[t&&(0,i.jsx)(a.Typography,{variant:"h4",component:"h4",className:"mdx-showcase-card__name",children:t}),m&&(0,i.jsx)(a.Badge,{size:"small",children:m})]}),c&&(0,i.jsx)(a.Typography,{variant:"body1",component:"p",className:"mdx-showcase-card__description",children:c}),h&&(0,i.jsxs)("a",{href:h?.href,target:h?.target,className:"mdx-showcase-card__cta",children:[h?.label,(0,i.jsx)(a.ChevronDownIcon,{color:"primary"})]})]})})},10306:(e,t,r)=>{"use strict";r.r(t)},11677:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(16718),t)},11850:(e,t,r)=>{"use strict";r.r(t)},12114:(e,t,r)=>{"use strict";r.r(t)},12230:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useNewsletterApi=void 0;const n=r(96540);t.useNewsletterApi=()=>{const[e,t]=(0,n.useState)(!1),[r,i]=(0,n.useState)({error:!1,message:""});return{busy:e,error:r.error,message:r.message,subscribe:async(e,r,n)=>{t(!0);try{const e=await fetch("https://admin-acid.logos.co/api/admin/newsletters/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:r,type:"logos",newsletter:n})}),t=await e.json();i({error:!1,message:t.result.message})}catch(a){i({error:!0,message:"Something went wrong!"})}t(!1)}}}},12824:(e,t,r)=>{"use strict";r.r(t)},13012:(e,t,r)=>{"use strict";r.r(t)},13110:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Showcase=void 0;const i=r(74848),a=n(r(34559)),o=r(98941);r(92562);t.Showcase=({items:e=[],className:t,...r})=>(0,i.jsx)(o.Grid,{className:(0,a.default)(t,"mdx-showcase"),xs:{cols:2,wrap:!0,gap:"1.5rem 1em"},lg:{cols:3,gap:"1rem"},...r,children:e.map((e,t)=>(0,i.jsx)(o.Grid.Item,{className:"mdx-showcase__item",xs:1,children:(0,i.jsx)(o.ShowcaseCard,{...e})},t))})},13431:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(84942),t)},15359:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(32710),t)},15514:(e,t,r)=>{"use strict";r.r(t)},16224:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(86908),t)},16718:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroVideo=void 0;const i=r(74848),a=n(r(34559)),o=r(96540),s=r(60727),c=r(60717),l=r(54046),d=r(70101);r(33634);t.HeroVideo=({placeholderSrc:e,desktop:t,mobile:r,className:n,style:u={},children:m,...h})=>{(0,d.useHero)();const p=(0,l.useHydrated)(),f=(0,o.useRef)(null),[_,v]=(0,o.useState)(!0),g=async()=>{const e=f.current;if(!e)return;e.muted=!0,e.defaultMuted=!0;const[t,r]=await(0,c.settle)(()=>e.play());r||v(!1)};return(0,o.useEffect)(()=>{const e=document.querySelector(".col > article");if(e)return e.classList.add("overflow-hidden"),()=>{e.classList.remove("overflow-hidden")}},[]),(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)("div",{className:(0,a.default)(n,"mdx-hero-video",_&&"mdx-hero-video--loading"),style:(0,s.makeStyle)({...u},{"hero-video-scale":t?.scale??"1.70951586","hero-video-offset-y":t?.offsetY??"-150px","hero-video-height":t?.height??"100%","hero-video-min-height":t?.minHeight??"min(100vh, var(--hero-max-height))","hero-video-scale-mobile":r?.scale??"1.70951586","hero-video-offset-y-mobile":r?.offsetY??"-50px","hero-video-height-mobile":r?.height??"120%","hero-video-min-height-mobile":r?.minHeight??"100vh"}),...h,children:[(0,i.jsx)("div",{className:"mdx-hero-video__placeholder",children:(0,i.jsx)("img",{src:e,alt:""})}),(0,i.jsx)("div",{className:"mdx-hero-video__video",children:p&&(0,i.jsx)("video",{ref:f,loop:!0,muted:!0,autoPlay:!0,playsInline:!0,onCanPlay:g,onLoadedMetadata:g,children:m})})]})})}},17715:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(46750),t)},17970:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JobsPerDepartment=void 0;const n=r(74848),i=r(97481),a=r(19517),o=r(54404),s=({message:e})=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.Typography,{variant:"h1",className:"mdx-jpd__header",children:"Current job openings"}),!!e&&(0,n.jsx)(i.Typography,{variant:"body1",children:e})]});t.JobsPerDepartment=({jobData:e,titleFilter:t="",useDummyData:r=!1,...i})=>{let c=r?o.jobsPerDepartmentDummyData:e?.departments;return c&&(l=c)&&l.some(e=>e.jobs&&e.jobs.length>0)?(c&&t&&(c=c.map(e=>({...e,jobs:e.jobs.filter(e=>e.title.includes(t))}))),(0,n.jsxs)("div",{...i,children:[(0,n.jsx)(s,{}),c.map(e=>(0,n.jsx)(a.SingleDepartmentJobs,{department:e},e.name))]})):(0,n.jsx)(s,{message:"No job openings to show"});var l}},18486:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ExternalResourceCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559)),c=r(30911);r(83330);const l=r(56794);t.ExternalResourceCard=({title:e,logoSrc:t,logoSrcDark:r,description:n,previewSrc:d,previewSrcDark:u,...m})=>{const h=!(!d&&!u);return(0,i.jsxs)("a",{target:"_blank",...m,className:(0,s.default)(m.className,"mdx-erc",h&&"mdx-erc--with-preview"),children:[h&&(0,i.jsx)(l.KeepRatio,{width:16,height:9,fullWidth:!0,children:(0,i.jsx)(o.default,{sources:{dark:u??d??"",light:d??u??""},alt:"string"==typeof e&&e||"preview image",className:"mdx-erc__preview-image"})}),(0,i.jsxs)("div",{className:"mdx-erc__inner",children:[(t||r)&&(0,i.jsx)(o.default,{sources:{dark:r??t??"",light:t??r??""},alt:"string"==typeof e&&e||"logo",className:"mdx-erc__logo"}),(0,i.jsx)(a.Typography,{variant:"body1",component:"div",className:"mdx-erc__title",children:e}),n&&(0,i.jsx)(a.Typography,{variant:"label2",component:"div",className:"mdx-erc__description",children:n})]}),(0,i.jsx)("div",{className:"mdx-erc__icon",children:(0,i.jsx)(c.IconExternalLink,{className:"mdx-erc__external-link"})})]})}},19517:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SingleDepartmentJobs=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=r(30911);r(86798);t.SingleDepartmentJobs=({department:e})=>e.jobs&&0!==e.jobs.length?(0,i.jsxs)("div",{className:"mdx-jpd__single-job-department-container",children:[(0,i.jsx)(a.Typography,{variant:"subtitle2",className:"mdx-jpd__department-title",children:e.name}),(0,i.jsx)("ul",{className:"mdx-jpd__job-list",children:e.jobs.map((e,t)=>(0,i.jsx)("li",{className:"mdx-jpd__job-list-item",children:(0,i.jsxs)(o.default,{href:e.absolute_url,target:"_blank",className:"mdx-jpd__job-link",children:[(0,i.jsxs)("div",{className:"mdx-jpd__job-title-container",children:[(0,i.jsx)(a.Typography,{variant:"h5",className:"mdx-jpd__job-title",children:e.title}),(0,i.jsx)(s.IconExternalLink,{className:"mdx-jpd__external-link-icon"})]}),!!e.location?.name&&(0,i.jsx)(a.Typography,{variant:"subtitle2",component:"div",children:e.location.name})]})},t))})]}):null},20314:(e,t,r)=>{"use strict";r.r(t)},21010:(e,t,r)=>{"use strict";r.r(t)},21886:(e,t,r)=>{"use strict";r.r(t)},21998:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroDescription=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(70101);r(54978);t.HeroDescription=({size:e,className:t,uppercase:r=!1,children:n,...c})=>{const l=(0,s.useHero)(),d=e??(l?l.size:"medium");return(0,i.jsx)(a.Typography,{variant:"h4",className:(0,o.default)(t,"mdx-hero-description",`mdx-hero-description--${d}`,r?"mdx-hero-description--uppercase":""),...c,children:n})}},23902:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventCardList=t.EventStatus=void 0;const n=r(74848),i=r(96540);r(87746);const a=r(97481),o=r(98941),s=r(97481);var c;!function(e){e.UPCOMING="Upcoming",e.PAST="Past"}(c||(t.EventStatus=c={}));t.EventCardList=({upcoming:e,past:t,...r})=>{const[l,d]=(0,i.useState)(c.UPCOMING),u=l===c.UPCOMING?e:t,[m,h]=(0,i.useState)(u?.length>8),[p,f]=(0,i.useState)(8);return(0,n.jsxs)("div",{className:"mdx-event-card-list__container",...r,children:[(0,n.jsxs)(s.Tabs,{activeTab:l,onChange:e=>{d(e),f(8),h(u?.length>8)},className:"mdx-event-card-list__tabs",children:[(0,n.jsx)(s.TabItem,{name:"Upcoming",children:"Upcoming"},"upcoming"),(0,n.jsx)(s.TabItem,{name:"Past",children:"Past"},"past")]}),(0,n.jsxs)("div",{children:[(0,n.jsx)(o.Box,{top:{xs:80,sm:96},bottom:80,children:(0,n.jsxs)(o.Grid,{xs:{cols:1,gap:"80px 16px"},md:{cols:4},children:[u.slice(0,p).map((e,t)=>(0,n.jsx)(o.Grid.Item,{xs:1,children:(0,n.jsx)(o.EventCard,{...e})},t)),0===u.length?(0,n.jsx)(a.Typography,{children:"No events found."}):null]})}),m&&(0,n.jsx)(a.Button,{className:"mdx-event-card-list__button",onClick:()=>{f(e=>e+8),p+6>=u?.length&&h(!1)},size:"large",children:"See more"})]})]})}},24120:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(88386),t)},24622:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SectionHeader=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941);r(68674);t.SectionHeader=({title:e,description:t,className:r,noBorder:n,children:c,...l})=>{const d=!!t;return(0,i.jsxs)(s.Box,{className:(0,o.default)(r,"mdx-section-header",d&&"mdx-section-header--with-description",n&&"mdx-section-header--no-border"),...l,children:[(0,i.jsxs)(a.Typography,{className:"mdx-section-header__title",component:"h2",variant:"h2",children:[e,!d&&c&&(0,i.jsx)("div",{className:"mdx-section-header__extra",children:c})]}),t&&(0,i.jsxs)(a.Typography,{className:"mdx-section-header__description",component:"p",variant:"h3",children:[t,(0,i.jsx)("div",{className:"mdx-section-header__extra",children:c})]})]})}},24802:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TableView=void 0;const n=r(74848),i=r(97481);r(41182);t.TableView=({tableTitle:e="",data:t,...r})=>(0,n.jsxs)("div",{className:"mdx-table-view",...r,children:[e?.length>0?(0,n.jsx)(i.Typography,{className:"mdx-table-view-table-title",component:"h2",variant:"h2",children:e}):null,(0,n.jsx)("div",{children:t.map((e,t)=>(0,n.jsxs)("div",{className:"mdx-table-view-row",children:[(0,n.jsx)(i.Typography,{component:"h3",variant:"h4",className:"mdx-table-view-title",children:e.title}),(0,n.jsx)(i.Typography,{component:"p",variant:"subtitle1",className:"mdx-table-view-description",children:e.description})]},t))})]})},25018:(e,t,r)=>{"use strict";r.r(t)},25505:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>_});var n=r(58168),i=r(26399),a=r(46255),o=r(71287),s=r(30041),c=r(96540),l=r(36289),d=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,u=(0,l.A)(function(e){return d.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}),m=function(e){return"theme"!==e},h=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?u:m},p=function(e,t,r){var n;if(t){var i=t.shouldForwardProp;n=e.__emotion_forwardProp&&i?function(t){return e.__emotion_forwardProp(t)&&i(t)}:i}return"function"!=typeof n&&r&&(n=e.__emotion_forwardProp),n},f=function(e){var t=e.cache,r=e.serialized,n=e.isStringTag;return(0,s.SF)(t,r,n),(0,o.s)(function(){return(0,s.sk)(t,r,n)}),null},_=function e(t,r){var o,l,d=t.__emotion_real===t,u=d&&t.__emotion_base||t;void 0!==r&&(o=r.label,l=r.target);var m=p(t,r,d),_=m||h(u),v=!_("as");return function(){var g=arguments,b=d&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==o&&b.push("label:"+o+";"),null==g[0]||void 0===g[0].raw)b.push.apply(b,g);else{var y=g[0];b.push(y[0]);for(var x=g.length,j=1;j(0,i.jsxs)("div",{className:"mdx-event-cta__container",children:[e&&(0,i.jsx)(a.Typography,{variant:"h2",component:"h2",className:"mdx-event-cta__title",children:e}),(0,i.jsx)(o.default,{to:r,...n,children:(0,i.jsxs)(a.Button,{className:"mdx-event-cta__button",children:[(0,i.jsx)(a.Typography,{variant:"body1",children:t}),(0,i.jsx)(s.IconExternalLink,{})]})})]})},26600:(e,t,r)=>{"use strict";r.r(t)},27516:(e,t,r)=>{"use strict";r.r(t)},27803:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDocMetadata=void 0;const i=r(60542),a=r(92994),o=n(r(38640));t.useDocMetadata=()=>{const e=(0,a.useDocThemeOptions)(),{content:{authors:t=[]}={}}=e,{frontMatter:r={}}=(0,i.useDoc)(),{author:n=[],date:s}=r,c=(Array.isArray(n)?n:[n]).map(e=>t.find(t=>e===t.key)).filter(e=>!!e);return{date:s?(0,o.default)(new Date(s),"MMM d yyyy"):"",authors:c}}},27959:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(24802),t)},28453:(e,t,r)=>{"use strict";r.d(t,{R:()=>o,x:()=>s});var n=r(96540);const i={},a=n.createContext(i);function o(e){const t=n.useContext(a);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(a.Provider,{value:t},e.children)}},29146:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventProfileList=void 0;const n=r(74848);r(32034);const i=r(97481),a=r(98941);t.EventProfileList=({title:e,description:t,data:r})=>(0,n.jsxs)("div",{className:"mdx-event-profile-list__container",children:[e&&(0,n.jsx)(i.Typography,{variant:"h2",component:"h2",className:"mdx-event-profile-list__title",children:e}),t&&(0,n.jsx)(i.Typography,{variant:"subtitle1",children:t}),(0,n.jsx)(a.Box,{top:40,children:(0,n.jsx)(a.Grid,{xs:{cols:1,gap:"16px"},md:{cols:3},children:r.map((e,t)=>(0,n.jsx)(a.Grid.Item,{xs:1,children:(0,n.jsx)(a.EventProfile,{...e})},t))})})]})},29294:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(90206),t)},29510:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LogoCarousel=void 0;const i=r(74848),a=n(r(1893)),o=n(r(34559)),s=r(96540);r(32762);const c=r(98941),l=r(34500),d=r(54046);t.LogoCarousel=({title:e,gridGap:t="80px",className:r,items:n=[],children:u,...m})=>{const h=(0,d.useHydrated)(),p=(0,s.useRef)(null),f=(0,s.useRef)(null);return"undefined"!=typeof window&&h&&!f.current&&(f.current=p.current?.querySelector(".mdx-grid__content")??null),(0,i.jsxs)("div",{ref:p,className:(0,o.default)(r,"mdx-logo-carousel"),...m,children:[(0,i.jsx)(c.SectionHeader,{title:e,noBorder:!0}),(0,i.jsx)("div",{className:"mdx-logo-carousel-buttons",children:(0,i.jsx)(l.ScrollButtons,{containerRef:f,spacing:"spaced",infiniteScroll:!0})}),(0,i.jsx)(c.Grid,{className:"mdx-logo-carousel__inner",xs:{wrap:!1,gap:t,scrollButtons:!1},children:n.map(e=>(0,i.jsx)(c.Grid.Item,{className:"mdx-logo-carousel__item",children:(0,i.jsx)(a.default,{className:"mdx-logo-carousel__logo",title:e.title,sources:{dark:e.logoSrcDark??e.logoSrc??"",light:e.logoSrc??e.logoSrcDark??""}})}))})]})}},30094:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroActions=void 0;const i=r(74848),a=n(r(34559));r(86370);t.HeroActions=({className:e,children:t,...r})=>(0,i.jsx)("div",{className:(0,a.default)(e,"mdx-hero-actions"),...r,children:t})},30126:(e,t,r)=>{"use strict";r.r(t)},30254:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ProfileCard=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=r(30911);r(250);const c=n(r(34559));t.ProfileCard=({imgSrc:e,name:t,githubUsername:r,githubLink:n,discordUsername:l,discordLink:d,xUsername:u,xLink:m,...h})=>(0,i.jsx)("div",{...h,className:(0,c.default)("mdx-profile-card",h.className),children:(0,i.jsxs)("div",{className:"mdx-profile-card__profile",children:[void 0===e&&t?(0,i.jsx)("span",{className:"mdx-profile-card__profile-placeholder",children:t[0]?.toUpperCase()}):(0,i.jsx)("img",{alt:"string"==typeof t?t:"",className:"mdx-profile-card__profile-image",src:e}),(0,i.jsxs)("div",{children:[(0,i.jsx)(a.Typography,{className:"mdx-profile-card__name",variant:"h4",component:"h4",children:t}),n||d||m?(0,i.jsxs)("div",{className:"mdx-profile-card__buttons",children:[n&&(0,i.jsx)(o.default,{href:n,target:"_blank",className:"mdx-profile-card__link",children:(0,i.jsx)(s.IconGithub,{})}),d&&(0,i.jsx)(o.default,{href:d,target:"_blank",className:"mdx-profile-card__link",children:(0,i.jsx)(s.IconDiscord,{size:"m"})}),m&&(0,i.jsx)(o.default,{href:m,target:"_blank",className:"mdx-profile-card__link",children:(0,i.jsx)(s.IconX,{size:"m"})})]}):null]})]})})},30707:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(42446),t)},31170:(e,t,r)=>{"use strict";r.r(t)},31406:(e,t,r)=>{"use strict";r.r(t)},32034:(e,t,r)=>{"use strict";r.r(t)},32331:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(97278),t)},32710:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AccordionItem=void 0;const i=r(74848),a=n(r(34559)),o=r(96540);r(85986);const s=r(97481),c=r(30911),l=n(r(97200));t.AccordionItem=({open:e,onToggle:t,title:r,className:n,children:d,...u})=>{const m=(0,l.default)("accordion-item-"),[h,p]=(0,o.useState)(e??!1);void 0!==e&&e!==h&&p(e);return(0,i.jsxs)("div",{className:(0,a.default)(n,"mdx-accordion-item",h&&"mdx-accordion-item--open"),...u,children:[(0,i.jsx)("input",{type:"checkbox",id:m,checked:h}),(0,i.jsxs)("div",{role:"button",className:"mdx-accordion-item__header",onClick:()=>{void 0!==e?t&&t(!h):p(e=>!e)},children:[(0,i.jsx)(s.Typography,{className:"mdx-accordion-item__title",variant:"h5",component:"label",htmlFor:m,children:r}),(0,i.jsx)("div",{className:"mdx-accordion-item__icon",children:h?(0,i.jsx)(c.IconRemove,{}):(0,i.jsx)(c.IconAdd,{})})]}),(0,i.jsx)("div",{className:"mdx-accordion-item__content-wrapper",children:(0,i.jsx)("div",{className:"mdx-accordion-item__content",children:d})})]})}},32762:(e,t,r)=>{"use strict";r.r(t)},33634:(e,t,r)=>{"use strict";r.r(t)},34500:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(56158),t)},34646:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={root:"root_TTsz",fullWidth:"fullWidth_HBtH",fullHeight:"fullHeight_ls1u",content:"content_feMR",keep:"keep_Y9Ea"}},35310:(e,t,r)=>{"use strict";r.r(t)},36306:(e,t,r)=>{"use strict";r.r(t)},37135:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(86650),t)},37187:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(17970),t)},37416:(e,t,r)=>{"use strict";r.r(t)},38634:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CallToActionSection=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941);r(21886);const c=r(30911);t.CallToActionSection=({label:e,href:t,title:r,columns:n=1,description:l,list:d=[],target:u,border:m=!0,align:h="unset",className:p,children:f,variant:_="outlined",ctaPosition:v="bottom",...g})=>{const b=!!l,y=d.length>0,x=!!t,j=!r||b||x||y?r&&!l&&!y&&x?"title-button":r&&l&&2===n?"full-width":r&&l&&d.length>0?"list":"simple":"title-only",w=t&&"top"===v&&(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-cta-section__link",variant:_,children:e});return(0,i.jsxs)("div",{className:(0,o.default)(p,"mdx-cta-section",`mdx-cta-section--${j}`,!m&&"mdx-cta-section--no-border"),...g,children:[(0,i.jsxs)("div",{className:(0,o.default)("mdx-cta-section__container","unset"!==h&&`mdx-cta-section--align-${h}`),children:[(0,i.jsxs)("div",{className:"mdx-cta-section__header",children:[(0,i.jsx)(a.Typography,{component:"h2",className:(0,o.default)("mdx-cta-section__title"),children:r}),(0,i.jsx)("div",{className:"mdx-cta-section__header__desktop-button",children:w})]}),l&&(0,i.jsx)(a.Typography,{component:"h3",className:"mdx-cta-section__description",children:l}),(0,i.jsx)("div",{className:"mdx-cta-section__header__mobile-button",children:w}),t&&"bottom"===v&&(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-cta-section__link",variant:_,children:e})]}),d.length>0&&(0,i.jsx)("div",{className:(0,o.default)("mdx-cta-section__list",!m&&"mdx-cta-section--no-border"),children:d.map((e,t)=>{const r=(0,i.jsxs)("div",{className:"mdx-cta-section__list-item",children:[(0,i.jsx)("a",{className:"mdx-cta-section__list-item-link",href:e?.href,target:e.target,children:(0,i.jsxs)(a.Typography,{component:"div",variant:"body2",className:"mdx-cta-section__item-title",children:[e.title,(0,i.jsx)(c.IconExternalLink,{size:"m"})]})}),(0,i.jsx)(a.Typography,{variant:"h4",component:"p",className:"mdx-cta-section__item-description",children:e.description})]},t);return e.href?(0,i.jsx)("a",{href:e.href,target:"_blank",children:r}):r})})]})}},38640:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}function a(e){i(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===n(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"),console.warn((new Error).stack)),new Date(NaN))}function o(e){if(i(1,arguments),!function(e){return i(1,arguments),e instanceof Date||"object"===n(e)&&"[object Date]"===Object.prototype.toString.call(e)}(e)&&"number"!=typeof e)return!1;var t=a(e);return!isNaN(Number(t))}function s(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}function c(e,t){return i(2,arguments),function(e,t){i(2,arguments);var r=a(e).getTime(),n=s(t);return new Date(r+n)}(e,-s(t))}r.r(t),r.d(t,{default:()=>Q});function l(e){i(1,arguments);var t=a(e),r=t.getUTCDay(),n=(r<1?7:0)+r-1;return t.setUTCDate(t.getUTCDate()-n),t.setUTCHours(0,0,0,0),t}function d(e){i(1,arguments);var t=a(e),r=t.getUTCFullYear(),n=new Date(0);n.setUTCFullYear(r+1,0,4),n.setUTCHours(0,0,0,0);var o=l(n),s=new Date(0);s.setUTCFullYear(r,0,4),s.setUTCHours(0,0,0,0);var c=l(s);return t.getTime()>=o.getTime()?r+1:t.getTime()>=c.getTime()?r:r-1}function u(e){i(1,arguments);var t=a(e),r=l(t).getTime()-function(e){i(1,arguments);var t=d(e),r=new Date(0);return r.setUTCFullYear(t,0,4),r.setUTCHours(0,0,0,0),l(r)}(t).getTime();return Math.round(r/6048e5)+1}var m={};function h(){return m}function p(e,t){var r,n,o,c,l,d,u,m;i(1,arguments);var p=h(),f=s(null!==(r=null!==(n=null!==(o=null!==(c=null==t?void 0:t.weekStartsOn)&&void 0!==c?c:null==t||null===(l=t.locale)||void 0===l||null===(d=l.options)||void 0===d?void 0:d.weekStartsOn)&&void 0!==o?o:p.weekStartsOn)&&void 0!==n?n:null===(u=p.locale)||void 0===u||null===(m=u.options)||void 0===m?void 0:m.weekStartsOn)&&void 0!==r?r:0);if(!(f>=0&&f<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var _=a(e),v=_.getUTCDay(),g=(v=1&&g<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var b=new Date(0);b.setUTCFullYear(_+1,0,g),b.setUTCHours(0,0,0,0);var y=p(b,t),x=new Date(0);x.setUTCFullYear(_,0,g),x.setUTCHours(0,0,0,0);var j=p(x,t);return f.getTime()>=y.getTime()?_+1:f.getTime()>=j.getTime()?_:_-1}function _(e,t){i(1,arguments);var r=a(e),n=p(r,t).getTime()-function(e,t){var r,n,a,o,c,l,d,u;i(1,arguments);var m=h(),_=s(null!==(r=null!==(n=null!==(a=null!==(o=null==t?void 0:t.firstWeekContainsDate)&&void 0!==o?o:null==t||null===(c=t.locale)||void 0===c||null===(l=c.options)||void 0===l?void 0:l.firstWeekContainsDate)&&void 0!==a?a:m.firstWeekContainsDate)&&void 0!==n?n:null===(d=m.locale)||void 0===d||null===(u=d.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==r?r:1),v=f(e,t),g=new Date(0);return g.setUTCFullYear(v,0,_),g.setUTCHours(0,0,0,0),p(g,t)}(r,t).getTime();return Math.round(n/6048e5)+1}function v(e,t){for(var r=e<0?"-":"",n=Math.abs(e).toString();n.length0?r:1-r;return v("yy"===t?n%100:n,t.length)},M:function(e,t){var r=e.getUTCMonth();return"M"===t?String(r+1):v(r+1,2)},d:function(e,t){return v(e.getUTCDate(),t.length)},a:function(e,t){var r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return"am"===r?"a.m.":"p.m."}},h:function(e,t){return v(e.getUTCHours()%12||12,t.length)},H:function(e,t){return v(e.getUTCHours(),t.length)},m:function(e,t){return v(e.getUTCMinutes(),t.length)},s:function(e,t){return v(e.getUTCSeconds(),t.length)},S:function(e,t){var r=t.length,n=e.getUTCMilliseconds();return v(Math.floor(n*Math.pow(10,r-3)),t.length)}};var b="midnight",y="noon",x="morning",j="afternoon",w="evening",O="night",P={G:function(e,t,r){var n=e.getUTCFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return r.era(n,{width:"abbreviated"});case"GGGGG":return r.era(n,{width:"narrow"});default:return r.era(n,{width:"wide"})}},y:function(e,t,r){if("yo"===t){var n=e.getUTCFullYear(),i=n>0?n:1-n;return r.ordinalNumber(i,{unit:"year"})}return g.y(e,t)},Y:function(e,t,r,n){var i=f(e,n),a=i>0?i:1-i;return"YY"===t?v(a%100,2):"Yo"===t?r.ordinalNumber(a,{unit:"year"}):v(a,t.length)},R:function(e,t){return v(d(e),t.length)},u:function(e,t){return v(e.getUTCFullYear(),t.length)},Q:function(e,t,r){var n=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(n);case"QQ":return v(n,2);case"Qo":return r.ordinalNumber(n,{unit:"quarter"});case"QQQ":return r.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(n,{width:"narrow",context:"formatting"});default:return r.quarter(n,{width:"wide",context:"formatting"})}},q:function(e,t,r){var n=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(n);case"qq":return v(n,2);case"qo":return r.ordinalNumber(n,{unit:"quarter"});case"qqq":return r.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(n,{width:"narrow",context:"standalone"});default:return r.quarter(n,{width:"wide",context:"standalone"})}},M:function(e,t,r){var n=e.getUTCMonth();switch(t){case"M":case"MM":return g.M(e,t);case"Mo":return r.ordinalNumber(n+1,{unit:"month"});case"MMM":return r.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(n,{width:"narrow",context:"formatting"});default:return r.month(n,{width:"wide",context:"formatting"})}},L:function(e,t,r){var n=e.getUTCMonth();switch(t){case"L":return String(n+1);case"LL":return v(n+1,2);case"Lo":return r.ordinalNumber(n+1,{unit:"month"});case"LLL":return r.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(n,{width:"narrow",context:"standalone"});default:return r.month(n,{width:"wide",context:"standalone"})}},w:function(e,t,r,n){var i=_(e,n);return"wo"===t?r.ordinalNumber(i,{unit:"week"}):v(i,t.length)},I:function(e,t,r){var n=u(e);return"Io"===t?r.ordinalNumber(n,{unit:"week"}):v(n,t.length)},d:function(e,t,r){return"do"===t?r.ordinalNumber(e.getUTCDate(),{unit:"date"}):g.d(e,t)},D:function(e,t,r){var n=function(e){i(1,arguments);var t=a(e),r=t.getTime();t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0);var n=r-t.getTime();return Math.floor(n/864e5)+1}(e);return"Do"===t?r.ordinalNumber(n,{unit:"dayOfYear"}):v(n,t.length)},E:function(e,t,r){var n=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return r.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},e:function(e,t,r,n){var i=e.getUTCDay(),a=(i-n.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return v(a,2);case"eo":return r.ordinalNumber(a,{unit:"day"});case"eee":return r.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(i,{width:"short",context:"formatting"});default:return r.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,r,n){var i=e.getUTCDay(),a=(i-n.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return v(a,t.length);case"co":return r.ordinalNumber(a,{unit:"day"});case"ccc":return r.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(i,{width:"narrow",context:"standalone"});case"cccccc":return r.day(i,{width:"short",context:"standalone"});default:return r.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,r){var n=e.getUTCDay(),i=0===n?7:n;switch(t){case"i":return String(i);case"ii":return v(i,t.length);case"io":return r.ordinalNumber(i,{unit:"day"});case"iii":return r.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},a:function(e,t,r){var n=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(e,t,r){var n,i=e.getUTCHours();switch(n=12===i?y:0===i?b:i/12>=1?"pm":"am",t){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(e,t,r){var n,i=e.getUTCHours();switch(n=i>=17?w:i>=12?j:i>=4?x:O,t){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(e,t,r){if("ho"===t){var n=e.getUTCHours()%12;return 0===n&&(n=12),r.ordinalNumber(n,{unit:"hour"})}return g.h(e,t)},H:function(e,t,r){return"Ho"===t?r.ordinalNumber(e.getUTCHours(),{unit:"hour"}):g.H(e,t)},K:function(e,t,r){var n=e.getUTCHours()%12;return"Ko"===t?r.ordinalNumber(n,{unit:"hour"}):v(n,t.length)},k:function(e,t,r){var n=e.getUTCHours();return 0===n&&(n=24),"ko"===t?r.ordinalNumber(n,{unit:"hour"}):v(n,t.length)},m:function(e,t,r){return"mo"===t?r.ordinalNumber(e.getUTCMinutes(),{unit:"minute"}):g.m(e,t)},s:function(e,t,r){return"so"===t?r.ordinalNumber(e.getUTCSeconds(),{unit:"second"}):g.s(e,t)},S:function(e,t){return g.S(e,t)},X:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();if(0===i)return"Z";switch(t){case"X":return M(i);case"XXXX":case"XX":return T(i);default:return T(i,":")}},x:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();switch(t){case"x":return M(i);case"xxxx":case"xx":return T(i);default:return T(i,":")}},O:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+N(i,":");default:return"GMT"+T(i,":")}},z:function(e,t,r,n){var i=(n._originalDate||e).getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+N(i,":");default:return"GMT"+T(i,":")}},t:function(e,t,r,n){var i=n._originalDate||e;return v(Math.floor(i.getTime()/1e3),t.length)},T:function(e,t,r,n){return v((n._originalDate||e).getTime(),t.length)}};function N(e,t){var r=e>0?"-":"+",n=Math.abs(e),i=Math.floor(n/60),a=n%60;if(0===a)return r+String(i);var o=t||"";return r+String(i)+o+v(a,2)}function M(e,t){return e%60==0?(e>0?"-":"+")+v(Math.abs(e)/60,2):T(e,t)}function T(e,t){var r=t||"",n=e>0?"-":"+",i=Math.abs(e);return n+v(Math.floor(i/60),2)+r+v(i%60,2)}const S=P;var k=function(e,t){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},D=function(e,t){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},C={p:D,P:function(e,t){var r,n=e.match(/(P+)(p+)?/)||[],i=n[1],a=n[2];if(!a)return k(e,t);switch(i){case"P":r=t.dateTime({width:"short"});break;case"PP":r=t.dateTime({width:"medium"});break;case"PPP":r=t.dateTime({width:"long"});break;default:r=t.dateTime({width:"full"})}return r.replace("{{date}}",k(i,t)).replace("{{time}}",D(a,t))}};const B=C;var E=["D","DD"],A=["YY","YYYY"];function q(e,t,r){if("YYYY"===e)throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(t,"`) for formatting years to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("YY"===e)throw new RangeError("Use `yy` instead of `YY` (in `".concat(t,"`) for formatting years to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("D"===e)throw new RangeError("Use `d` instead of `D` (in `".concat(t,"`) for formatting days of the month to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("DD"===e)throw new RangeError("Use `dd` instead of `DD` (in `".concat(t,"`) for formatting days of the month to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"))}var I={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};const U=function(e,t,r){var n,i=I[e];return n="string"==typeof i?i:1===t?i.one:i.other.replace("{{count}}",t.toString()),null!=r&&r.addSuffix?r.comparison&&r.comparison>0?"in "+n:n+" ago":n};function W(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.width?String(t.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}var L={date:W({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:W({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:W({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})};var R={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function H(e){return function(t,r){var n;if("formatting"===(null!=r&&r.context?String(r.context):"standalone")&&e.formattingValues){var i=e.defaultFormattingWidth||e.defaultWidth,a=null!=r&&r.width?String(r.width):i;n=e.formattingValues[a]||e.formattingValues[i]}else{var o=e.defaultWidth,s=null!=r&&r.width?String(r.width):e.defaultWidth;n=e.values[s]||e.values[o]}return n[e.argumentCallback?e.argumentCallback(t):t]}}function z(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.width,i=n&&e.matchPatterns[n]||e.matchPatterns[e.defaultMatchWidth],a=t.match(i);if(!a)return null;var o,s=a[0],c=n&&e.parsePatterns[n]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(c)?function(e,t){for(var r=0;r20||n<10)switch(n%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},era:H({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:H({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:H({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:H({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:H({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:($={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}},function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.match($.matchPattern);if(!r)return null;var n=r[0],i=e.match($.parsePattern);if(!i)return null;var a=$.valueCallback?$.valueCallback(i[0]):i[0];return{value:a=t.valueCallback?t.valueCallback(a):a,rest:e.slice(n.length)}}),era:z({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:z({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:z({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:z({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:z({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};var G=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Y=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,V=/^'([^]*?)'?$/,X=/''/g,K=/[a-zA-Z]/;function Q(e,t,r){var n,l,d,u,m,p,f,_,v,g,b,y,x,j,w,O,P,N;i(2,arguments);var M=String(t),T=h(),k=null!==(n=null!==(l=null==r?void 0:r.locale)&&void 0!==l?l:T.locale)&&void 0!==n?n:F,D=s(null!==(d=null!==(u=null!==(m=null!==(p=null==r?void 0:r.firstWeekContainsDate)&&void 0!==p?p:null==r||null===(f=r.locale)||void 0===f||null===(_=f.options)||void 0===_?void 0:_.firstWeekContainsDate)&&void 0!==m?m:T.firstWeekContainsDate)&&void 0!==u?u:null===(v=T.locale)||void 0===v||null===(g=v.options)||void 0===g?void 0:g.firstWeekContainsDate)&&void 0!==d?d:1);if(!(D>=1&&D<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var C=s(null!==(b=null!==(y=null!==(x=null!==(j=null==r?void 0:r.weekStartsOn)&&void 0!==j?j:null==r||null===(w=r.locale)||void 0===w||null===(O=w.options)||void 0===O?void 0:O.weekStartsOn)&&void 0!==x?x:T.weekStartsOn)&&void 0!==y?y:null===(P=T.locale)||void 0===P||null===(N=P.options)||void 0===N?void 0:N.weekStartsOn)&&void 0!==b?b:0);if(!(C>=0&&C<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!k.localize)throw new RangeError("locale must contain localize property");if(!k.formatLong)throw new RangeError("locale must contain formatLong property");var I=a(e);if(!o(I))throw new RangeError("Invalid time value");var U=function(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()}(I),W=c(I,U),L={firstWeekContainsDate:D,weekStartsOn:C,locale:k,_originalDate:I};return M.match(Y).map(function(e){var t=e[0];return"p"===t||"P"===t?(0,B[t])(e,k.formatLong):e}).join("").match(G).map(function(n){if("''"===n)return"'";var i=n[0];if("'"===i)return function(e){var t=e.match(V);if(!t)return e;return t[1].replace(X,"'")}(n);var a,o=S[i];if(o)return null!=r&&r.useAdditionalWeekYearTokens||(a=n,-1===A.indexOf(a))||q(n,t,String(e)),null!=r&&r.useAdditionalDayOfYearTokens||!function(e){return-1!==E.indexOf(e)}(n)||q(n,t,String(e)),o(W,n,k.localize,L);if(i.match(K))throw new RangeError("Format string contains an unescaped latin alphabet character `"+i+"`");return n}).join("")}},38726:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NumbersView=void 0;const i=r(74848),a=r(97481);r(44698);const o=n(r(28774));t.NumbersView=({sectionTitle:e,description:t="",buttonText:r="",buttonLink:n="",buttonTarget:s="_self",data:c,...l})=>(0,i.jsxs)("div",{className:"mdx-numbers-view",...l,children:[(0,i.jsxs)("div",{className:"mdx-numbers-view-header",children:[(0,i.jsxs)("div",{className:"mdx-numbers-view-header-title",children:[(0,i.jsx)(a.Typography,{className:"mdx-numbers-view-section-title",component:"h2",variant:"h2",children:e}),t&&(0,i.jsx)(a.Typography,{className:"mdx-numbers-view-description",variant:"body1",children:t})]}),n&&(0,i.jsx)(o.default,{href:n,target:s,children:(0,i.jsx)(a.Button,{size:"large",children:r||"Learn More"})})]}),(0,i.jsx)("div",{className:"mdx-numbers-view-content",children:c.map((e,t)=>(0,i.jsxs)("div",{className:"mdx-numbers-view-row",children:[(0,i.jsx)(a.Typography,{variant:"body2",className:"mdx-numbers-view-number",children:t+1}),(0,i.jsx)(a.Typography,{component:"h3",variant:"h4",className:"mdx-numbers-view-title",children:e.title})]},t))})]})},39068:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(24622),t)},39628:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(25588),t)},39642:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FeatureList=void 0;const i=r(74848),a=r(97481),o=n(r(34559));function s(e,t){for(e=e.toString();e.length(0,i.jsxs)("div",{className:(0,o.default)(n,"mdx-feature-list",`mdx-feature-list--${t}-aligned`,`mdx-feature-list--cta-${c}`,"none"===d&&"mdx-feature-list--border-none"),...m,children:[(0,i.jsxs)("div",{className:"mdx-feature-list__header",children:[(0,i.jsx)(a.Typography,{variant:"h2",component:"h2",className:"mdx-feature-list__title",children:e}),u&&"top"===c&&(0,i.jsx)("div",{className:"mdx-feature-list__extra",children:u})]}),(0,i.jsx)("div",{className:"mdx-feature-list__list",children:r.map((e,t)=>(0,i.jsxs)("div",{className:(0,o.default)("mdx-feature-list__feature","none"===d&&"mdx-feature-list--border-none"),children:[(0,i.jsxs)("div",{className:"mdx-feature-list__feature-inner",children:["circle"===l?(0,i.jsx)(a.Typography,{variant:"subtitle1",component:"div",className:(0,o.default)("mdx-feature-list__feature-index--circle"),children:t+1}):(0,i.jsxs)(a.Typography,{variant:"subtitle1",component:"div",className:(0,o.default)("mdx-feature-list__feature-index--number"),children:["[",s(t+1,2),"]"]}),(0,i.jsx)(a.Typography,{variant:"h3",component:"h3",className:"mdx-feature-list__feature-title",children:e.title}),(0,i.jsx)(a.Typography,{variant:"body1",component:"p",className:"mdx-feature-list__feature-description",children:(0,i.jsx)("span",{children:e.description})})]}),(0,i.jsx)("div",{className:(0,o.default)("mdx-feature-list__feature-border","none"===d&&"mdx-feature-list__feature-border--none")})]},t))}),u&&"bottom"===c&&(0,i.jsx)("div",{className:"mdx-feature-list__extra",children:u})]})},39708:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(85148),t)},41101:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(30094),t)},41182:(e,t,r)=>{"use strict";r.r(t)},41450:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(60036),t)},42446:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PoweredBy=void 0;const i=r(74848),a=n(r(34559)),o=r(98941);r(89442);t.PoweredBy=({items:e=[],className:t,...r})=>(0,i.jsx)(o.Grid,{className:(0,a.default)(t,"mdx-powered-by"),xs:{cols:1,wrap:!0,gap:"0 1rem"},lg:{cols:2},...r,children:e.map((e,t)=>(0,i.jsx)(o.Grid.Item,{xs:1,children:(0,i.jsx)(o.AppCard,{...e})},t))})},43734:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroAsset=void 0;const i=r(74848),a=n(r(34559));r(48018);t.HeroAsset=({className:e,children:t,...r})=>(0,i.jsx)("div",{className:(0,a.default)(e,"mdx-hero-asset"),...r,children:t})},44454:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(78594),t)},44698:(e,t,r)=>{"use strict";r.r(t)},45262:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Box=void 0;const i=r(74848),a=n(r(34559)),o=r(60727);function s(e,t,r,n){const i="string"==typeof t||"number"==typeof t?{xs:t}:t,a=[],o=e=>"number"==typeof e&&n?`${e}${n}`:`${e}`;return["xs","sm","md","lg","xl"].forEach((t,n)=>{const s=i[t];if(s)a.push([`${e}-${t}`,o(s)]);else{const i=a[n-1]?.[1];a.push([`${e}-${t}`,i||o(r)])}}),Object.fromEntries(a)}r(81394);t.Box=({top:e=0,bottom:t=0,className:r,style:n={},children:c,...l})=>(0,i.jsx)("div",{className:(0,a.default)(r,"mdx-box"),style:(0,o.makeStyle)({...n},{...s("mdx-box-top",e,0,"px"),...s("mdx-box-bottom",t,0,"px")}),...l,children:c})},45902:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DocMetadata=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=n(r(34559)),c=n(r(96540)),l=r(92994);r(4930);const d=r(27803);t.DocMetadata=({className:e,children:t,...r})=>{const{date:n,authors:u}=(0,d.useDocMetadata)(),{content:{authorPage:m}={}}=(0,l.useDocThemeOptions)();return(0,i.jsxs)("div",{className:(0,s.default)(e,"mdx-doc-metadata"),...r,children:[n&&(0,i.jsx)(a.Typography,{variant:"body2",children:n}),u&&u.length>0&&(0,i.jsx)(i.Fragment,{children:(0,i.jsxs)(a.Typography,{variant:"body2",children:["by"," ",u.map((e,t)=>(0,i.jsxs)(c.default.Fragment,{children:[m?(0,i.jsx)(o.default,{to:`author/${e.key}`,children:e.name}):e.name,t(0,i.jsxs)("a",{target:"_blank",...l,className:(0,s.default)(l.className,"mdx-social-card"),children:[(0,i.jsxs)("div",{className:"mdx-social-card__row",children:[(t||r)&&(0,i.jsx)(o.default,{sources:{dark:r??t??"",light:t??r??""},alt:e??"social card logo",className:"mdx-social-card__logo"}),(0,i.jsx)(c.IconExternalLink,{className:"mdx-social-card__external-link"})]}),(0,i.jsx)(a.Typography,{variant:"body1",component:"span",className:"mdx-social-card__description",children:n})]})},46854:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AppCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(31170);t.AppCard=({logoSrc:e,logoSrcDark:t,name:r,description:n,link:c,linkLabel:l,...d})=>(0,i.jsxs)("div",{...d,className:(0,s.default)(d.className,"mdx-app-card"),children:[(e||t)&&(0,i.jsx)(o.default,{sources:{dark:t??e??"",light:e??t??""},alt:"string"==typeof r?r:"",className:"mdx-app-card__logo"}),(0,i.jsx)(a.Typography,{component:"span",variant:"h5",className:"mdx-app-card__name",children:r}),(0,i.jsx)(a.Typography,{variant:"subtitle1",className:"mdx-app-card__description",children:n}),c&&(0,i.jsx)("a",{href:c,target:"_blank",className:"mdx-app-card__link",children:(0,i.jsxs)(a.Button,{size:"large",variant:"outlined",children:[(0,i.jsx)(a.Typography,{variant:"label1",component:"span",children:l??(0,i.jsxs)(i.Fragment,{children:["Visit ",r]})}),(0,i.jsx)("span",{children:(0,i.jsx)(a.PickIcon,{color:"primary"})})]})})]})},48018:(e,t,r)=>{"use strict";r.r(t)},49552:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(55982),t)},53394:(e,t,r)=>{"use strict";r.r(t)},54404:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.jobsPerDepartmentDummyData=void 0,t.jobsPerDepartmentDummyData=[{id:87842,name:"App",parent_id:43806,child_ids:[87847,87852,87850,87848,45530,87849],jobs:[]},{id:54504,name:"Brand Design Studio",parent_id:null,child_ids:[],jobs:[]},{id:45532,name:"Business Development",parent_id:null,child_ids:[],jobs:[]},{id:87841,name:"Codex",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5329400",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2662332,location:{name:"Remote (Worldwide)"},metadata:null,id:5329400,updated_at:"2023-10-13T09:40:03-04:00",requisition_id:"Cod-6",title:"Technical Business Development Lead [Codex]"}]},{id:84549,name:"Communications",parent_id:null,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5276254",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2645076,location:{name:"Remote (Worldwide)"},metadata:null,id:5276254,updated_at:"2023-10-19T03:08:59-04:00",requisition_id:"PROV-Com-16",title:"Motion Designer"}]},{id:45531,name:"Design",parent_id:null,child_ids:[],jobs:[]},{id:87847,name:"Desktop",parent_id:87842,child_ids:[],jobs:[]},{id:87852,name:"Documentation",parent_id:87842,child_ids:[],jobs:[]},{id:45547,name:"Engineering ",parent_id:null,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5419957",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2693761,location:{name:"Remote (Worldwide)"},metadata:null,id:5419957,updated_at:"2023-10-24T07:30:00-04:00",requisition_id:"APP-QA-2",title:"Desktop QA Engineer "},{absolute_url:"https://jobs.status.im/?gh_jid=3694379",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2055210,location:{name:"Remote (Worldwide)"},metadata:null,id:3694379,updated_at:"2023-10-24T16:23:12-04:00",requisition_id:"BACK-1050",title:"Senior C++ Qt/QML developer for blockchain app"},{absolute_url:"https://jobs.status.im/?gh_jid=3702173",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2058858,location:{name:"Remote (Worldwide)"},metadata:null,id:3702173,updated_at:"2023-10-24T16:21:54-04:00",requisition_id:"93",title:"Senior Mobile ClojureScript UI Developer "}]},{id:49925,name:"Finance",parent_id:87845,child_ids:[],jobs:[]},{id:87854,name:"Infrastructure",parent_id:43806,child_ids:[],jobs:[]},{id:87853,name:"Insights",parent_id:87845,child_ids:[],jobs:[]},{id:87850,name:"Keycard",parent_id:87842,child_ids:[],jobs:[]},{id:145838,name:"Leadership",parent_id:null,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5447463",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2704948,location:{name:"Remote (Worldwide)"},metadata:null,id:5447463,updated_at:"2023-10-24T09:07:22-04:00",requisition_id:"LEAD-1",title:"Chief of Staff [whole ecosystem]"}]},{id:74156,name:"Legal",parent_id:87845,child_ids:[],jobs:[]},{id:91698,name:"Logos",parent_id:null,child_ids:[],jobs:[]},{id:43807,name:"Marketing",parent_id:null,child_ids:[],jobs:[]},{id:87848,name:"Mobile",parent_id:87842,child_ids:[],jobs:[]},{id:87843,name:"Nimbus",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5370820",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2679527,location:{name:"Remote (Worldwide)"},metadata:null,id:5370820,updated_at:"2023-10-19T03:05:07-04:00",requisition_id:"LIDO-1",title:"Senior DevOps Engineer (Blockchain)"}]},{id:144866,name:"Nomos",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5433423",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2315608,location:{name:"Remote (Worldwide)"},metadata:null,id:5433423,updated_at:"2023-10-12T11:20:52-04:00",requisition_id:"PROV-Nom-5",title:"Applied Network Researcher"}]},{id:45548,name:"People Operations",parent_id:87845,child_ids:[],jobs:[]},{id:45530,name:"Product Design",parent_id:87842,child_ids:[],jobs:[]},{id:90941,name:"Program Management",parent_id:null,child_ids:[],jobs:[]},{id:43806,name:"Research & Development",parent_id:null,child_ids:[87842,87841,87854,87843,144866,87846,87981,87847,87852,87850,87848,45530,87849],jobs:[]},{id:87851,name:"Security",parent_id:87845,child_ids:[],jobs:[]},{id:87845,name:"Services",parent_id:null,child_ids:[49925,87853,74156,45548,87851],jobs:[]},{id:91697,name:"Status App ",parent_id:null,child_ids:[],jobs:[]},{id:54783,name:"Technical Writing ",parent_id:null,child_ids:[],jobs:[]},{id:87846,name:"Vac",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=4460860",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2331302,location:{name:"Remote (Worldwide)"},metadata:null,id:4460860,updated_at:"2023-10-04T05:13:53-04:00",requisition_id:"PROV-zkV-1",title:"Zero Knowledge Research Engineer "}]},{id:87981,name:"Waku",parent_id:43806,child_ids:[],jobs:[{absolute_url:"https://jobs.status.im/?gh_jid=5456032",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2707470,location:{name:"Remote (Worldwide)"},metadata:null,id:5456032,updated_at:"2023-10-23T11:40:19-04:00",requisition_id:"WAK-GL-1",title:"Growth Lead"},{absolute_url:"https://jobs.status.im/?gh_jid=3693623",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2055187,location:{name:"Remote (Worldwide)"},metadata:null,id:3693623,updated_at:"2023-10-04T05:13:53-04:00",requisition_id:"PROV-Sec-2",title:"Protocol Engineer"},{absolute_url:"https://jobs.status.im/?gh_jid=3157908",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:1830496,location:{name:"Remote, Worldwide"},metadata:null,id:3157908,updated_at:"2023-10-04T05:13:53-04:00",requisition_id:"PROV-Sec-3",title:"Protocol Researcher (Distributed Systems)"},{absolute_url:"https://jobs.status.im/?gh_jid=5175038",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2584916,location:{name:"Remote (Worldwide)"},metadata:null,id:5175038,updated_at:"2023-10-09T05:53:53-04:00",requisition_id:"SDK-2",title:"Software Engineer (Chat SDK)"},{absolute_url:"https://jobs.status.im/?gh_jid=5310503",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2656108,location:{name:"Remote (Worldwide)"},metadata:null,id:5310503,updated_at:"2023-10-19T03:12:53-04:00",requisition_id:"PROV-Wak-13",title:"Software Engineer Distributed Systems Testing"},{absolute_url:"https://jobs.status.im/?gh_jid=5423094",data_compliance:[{type:"gdpr",requires_consent:!1,requires_processing_consent:!1,requires_retention_consent:!1,retention_period:null}],internal_job_id:2694724,location:{name:"Remote (Worldwide)"},metadata:null,id:5423094,updated_at:"2023-10-24T12:39:05-04:00",requisition_id:"WAK-BD-1",title:"Technical Business Development Lead "}]},{id:87849,name:"Web",parent_id:87842,child_ids:[],jobs:[]},{id:0,name:"No Department",parent_id:null,child_ids:[],jobs:[]}]},54675:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SingleGithubChallenge=void 0;const i=r(74848),a=r(97481),o=n(r(96540)),s=r(30911);r(53394);const c=n(r(28774));function l(e,t=24){const r=new URL(e),n=new URLSearchParams(r.search);return n.set("s",t.toString()),r.search=Array.from(n.entries()).map(([e,t])=>`${e}=${t}`).join("&"),r.toString()}t.SingleGithubChallenge=({issue:e})=>{const t=(e=>{const t=new Map;return t.set(e.user.login,{name:e.user.login,avatarUrl:e.user.avatarUrl}),e.assignees.forEach(e=>{t.set(e.login,{name:e.login,avatarUrl:e.avatarUrl})}),e.comments.forEach(e=>{t.set(e.author.login,{name:e.author.login,avatarUrl:e.author.avatarUrl})}),Array.from(t.values())})(e),r=(e=>{const t=e.projects.map(e=>e.name);return 0===t.length?"":Array.from(new Set(t)).join(", ")})(e),n=""!==r,d=!!e.milestone,u=[];return n&&u.push((0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__label",children:r.includes(", ")?"Projects":"Project"}),(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__project-name",children:r})]})),d&&u.push((0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__label",children:"Milestone"}),(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__milestone-text",children:e.milestone})]})),(0,i.jsxs)("div",{className:"mdx-ghc__container",children:[(0,i.jsx)(c.default,{href:e.url,className:"mdx-ghc__issue-title-link",children:(0,i.jsx)(a.Typography,{variant:"h5",className:"mdx-ghc__issue-title",children:e.title})}),(0,i.jsx)("div",{className:"mdx-ghc__challenge-labels",children:e.labels.map((e,t)=>(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__challenge-label",children:e},t))}),(0,i.jsxs)("div",{className:"mdx-ghc__issue-content-grid",children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__label",children:"Participants"}),(0,i.jsxs)("div",{className:"mdx-ghc__participant-photo-container",children:[(0,i.jsx)(a.Typography,{variant:"body3",className:"mdx-ghc__comment-count",component:"div",children:t.length}),t.map((e,t)=>(0,i.jsx)("img",{className:"mdx-ghc__participant-photo",src:l(e.avatarUrl),alt:e.name},t))]}),u.map((e,t)=>(0,i.jsx)(o.default.Fragment,{children:e},t))]}),(0,i.jsx)(c.default,{href:e.url,className:"mdx-ghc__view-on-github-link",children:(0,i.jsx)(a.Button,{className:"mdx-ghc__view-on-github-button",icon:(0,i.jsx)(s.IconExternalLink,{}),children:"View on GitHub"})})]})}},54978:(e,t,r)=>{"use strict";r.r(t)},55982:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AssetCard=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(30911),c=r(56794);r(10306);t.AssetCard=({title:e,previewSrc:t,downloadable:r,forceDownload:n=!1,...l})=>{const d=r&&r.length>0;return(0,i.jsxs)("div",{...l,className:(0,o.default)(l.className,"mdx-asset-card",d&&"mdx-asset-card--downloadable"),children:[(0,i.jsxs)("div",{className:"mdx-asset-card__inner",children:[e&&(0,i.jsx)(a.Typography,{component:"div",variant:"subtitle2",className:"mdx-asset-card__title",children:e}),(0,i.jsx)(c.KeepRatio,{width:16,height:9,fullWidth:!0,rootProps:{className:"mdx-asset-card__image"},children:(0,i.jsx)("img",{src:t,alt:"string"==typeof e&&e||"asset image"})})]}),d&&(0,i.jsx)("div",{className:"mdx-asset-card__downloadables",children:r.map((t,r)=>(0,i.jsx)("a",{href:t.src,target:"_blank",download:!0,onClick:r=>((t,r)=>{if(!n)return;t.preventDefault();const{src:i,filename:a}=r,o=document.createElement("a");o.download=a||"string"==typeof e&&e||"",fetch(i).then(e=>e.blob()).then(e=>{const t=window.URL.createObjectURL(e);o.href=t,window.document.body.appendChild(o),o.click(),window.document.body.removeChild(o)}).catch(e=>{console.error("failed to download asset:"+e),o.href=i,o.target="_blank",window.document.body.appendChild(o),o.click(),window.document.body.removeChild(o)})})(r,t),children:(0,i.jsx)(a.Button,{variant:"outlined",size:"small",icon:(0,i.jsx)(s.IconDownload,{}),children:t.title},r)}))})]})}},56158:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ScrollButtons=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(96540);r(91314);t.ScrollButtons=({leftLabel:e,rightLabel:t,containerRef:r,containerId:n,spacing:c="grouped",autoScroll:l=!1,autoScrollInterval:d=5e3,infiniteScroll:u=!1,desktopItemsToScroll:m=3,onMouseEnter:h,onMouseLeave:p,...f})=>{const _=(0,s.useRef)(null),v=(0,s.useRef)(!1),g=e=>{const t=r?r.current:document.querySelector(`#${n}`);if(!t)return;t.classList.add("mdx-scroll-buttons-container");const i=t.children[0];if(!i)return;const a=window.getComputedStyle(t),o=parseInt(a.gap)||16,s=i.offsetWidth+o,c=window.innerWidth<1024?1:m;if(u){const r=t.scrollLeft<=0,n=t.scrollLeft>=t.scrollWidth-t.clientWidth-1;if(-1===e&&r)return void t.scrollTo({behavior:"smooth",left:t.scrollWidth-t.clientWidth});if(1===e&&n)return void t.scrollTo({behavior:"smooth",left:0})}t.scrollTo({behavior:"smooth",left:t.scrollLeft+s*c*e})},b=()=>{l&&!v.current&&(_.current=setInterval(()=>{g(1)},d))},y=()=>{_.current&&(clearInterval(_.current),_.current=null)},x=()=>{y(),b()};return(0,s.useEffect)(()=>(l&&b(),()=>{y()}),[l,d]),(0,i.jsx)("div",{...f,className:(0,o.default)(f.className,"mdx-scroll-buttons","spaced"===c&&"mdx-scroll-buttons--spaced"),children:(0,i.jsxs)(a.IconButtonGroup,{size:"small",color:"primary",children:[(0,i.jsxs)(a.IconButton,{className:(0,o.default)("mdx-scroll-buttons__button",e&&e.length>0&&"mdx-scroll-buttons__button--with-label"),size:"small",onClick:()=>{g(-1),x()},children:[(0,i.jsx)(a.ChevronLeftIcon,{}),e&&e.length>0&&(0,i.jsx)("span",{className:"mdx-scroll-buttons__label",children:e})]}),(0,i.jsxs)(a.IconButton,{className:(0,o.default)("mdx-scroll-buttons__button",t&&t.length&&"mdx-scroll-buttons__button--with-label"),size:"small",onClick:()=>{g(1),x()},children:[t&&t.length>0&&(0,i.jsx)("span",{className:"mdx-scroll-buttons__label",children:t}),(0,i.jsx)(a.ChevronRightIcon,{})]})]})})}},56794:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(858),t)},57026:(e,t,r)=>{"use strict";r.r(t)},57376:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.lsdUtils=t.LsdUtils=void 0;const n=r(97481),i=r(17437);class a{_breakpoints={};getBreakpoints=e=>{if(this._breakpoints[e.name])return this._breakpoints[e.name];const t={};for(let r=0;rthis.getBreakpoints(e)[t];breakpoints=(e=[])=>n.THEME_BREAKPOINTS.filter(t=>!e.find(e=>e===t));typography=(e,t=!1)=>"subtitle3"===e?"\n font-size: 12px !important;\n font-weight: 400 !important;\n line-height: 16px !important;\n ":`\n font-size: var(--lsd-${e}-fontSize)${t?"!important":""};\n font-weight: var(--lsd-${e}-fontWeight)${t?"!important":""};\n line-height: var(--lsd-${e}-lineHeight)${t?"!important":""};\n `;breakpoint=(e,t,r="up",n)=>{const{min:i,max:a}=this.getBreakpoint(e,t);let o="@media ";if("up"===r)o+=`(min-width: ${i}px)`;else if("down"===r)o+=`(max-width: ${a}px)`;else if("between"===r&&n){o+=`(min-width: ${i}px) and (max-width: ${this.getBreakpoint(e,n).min-1}px)`}else o+=`(min-width: ${i}px) and (max-width: ${a}px)`;return`${o}`};responsive=(e,r,n="up")=>{const a=t.lsdUtils.breakpoint(e,r,n);return e=>i.css` + ${a} { + ${e} + } + `}}t.LsdUtils=a,t.lsdUtils=new a},59455:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(5354),t)},60036:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Hero=void 0;const i=r(74848),a=n(r(34559)),o=r(70101);r(37416);t.Hero=({size:e="medium",className:t,children:r,verticalAlign:n="top",...s})=>(0,i.jsx)(o.HeroContext.Provider,{value:{size:e},children:(0,i.jsx)("div",{className:(0,a.default)(t,"mdx-hero",`mdx-hero--${e}`,`mdx-hero--${n}`),...s,children:r})})},60727:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeStyle=void 0;t.makeStyle=(e,t={})=>({...e,...Object.entries(t).reduce((e,[t,r])=>({...e,[`--${t}`]:r}),{})})},61542:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(67118),t)},61597:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(30254),t)},61695:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(69242),t)},61828:(e,t,r)=>{"use strict";r.r(t)},63134:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroTitle=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(70101);r(12114);t.HeroTitle=({size:e,uppercase:t,className:r,children:n,...c})=>{const l=(0,s.useHero)(),d=e||(l?l.size:"medium"),u=void 0!==t?t:"large"===l?.size;return(0,i.jsx)(a.Typography,{variant:"h1",component:"h1",className:(0,o.default)(r,"mdx-hero-title",`mdx-hero-title--${d}`,u&&"mdx-hero-title--uppercase"),...c,children:n})}},63540:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(72084),t)},63658:(e,t,r)=>{"use strict";r.r(t)},64272:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(23902),t)},64458:(e,t,r)=>{"use strict";r.r(t)},64662:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CallToActionButton=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=n(r(34559));r(31406);t.CallToActionButton=({className:e,variant:t="filled",size:r="large",children:n,...c})=>(0,i.jsx)(o.default,{className:(0,s.default)("mdx-cta-button",e),...c,children:(0,i.jsx)(a.Typography,{component:"span",variant:"large"===r?"label1":"label2",children:(0,i.jsx)(a.Button,{size:r,variant:t,children:n})})})},64940:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dummyGithubIssue=void 0,t.dummyGithubIssue={id:"12345",title:"Bug in pagination",body:"When navigating to the second page, the first item repeats.",url:"https://github.com/user/repo/issues/12345",user:{login:"user123",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},labels:["bug","frontend"],commentCount:3,comments:[{id:"c1",author:{login:"alice123",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},body:"I have also noticed this issue. Working on a fix now.",createdAt:"2021-01-01T12:00:00Z"},{id:"c2",author:{login:"bob456",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},body:"Any updates on this?",createdAt:"2021-01-02T15:30:00Z"},{id:"c3",author:{login:"jaquim",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},body:"I like turtles.",createdAt:"2021-01-03T09:45:00Z"}],assignees:[{login:"alice123",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"},{login:"bob456",avatarUrl:"https://avatars.githubusercontent.com/u/8811422?v=4"}],milestone:"v1.0.0",created_at:"2020-12-31T11:00:00Z",updated_at:"2021-01-04T13:00:00Z",projects:[{name:"Awesome Project"}]}},67118:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CommunityFeedbackCarousel=void 0;const i=r(74848),a=r(96540),o=n(r(34559));r(25018);const s=r(98941),c=r(54046),l=r(97481),d=r(34500),u=n(r(28774)),m=r(30911),h=()=>"undefined"!=typeof window&&window.innerWidth<=768;t.CommunityFeedbackCarousel=({title:e,description:t="",gridGap:r="16px",autoScrollInterval:n=5e3,desktopItemsToScroll:p=1,className:f,items:_=[],...v})=>{const g=(0,c.useHydrated)(),b=(0,a.useRef)(null),y=(0,a.useRef)(null),[x,j]=(0,a.useState)({}),[w,O]=(0,a.useState)(!1),[P,N]=(0,a.useState)({}),[M,T]=(0,a.useState)(!1);"undefined"!=typeof window&&g&&!y.current&&(y.current=b.current?.querySelector(".mdx-grid__content")??null);(0,a.useEffect)(()=>{if(!g)return;T(h());const e=()=>{const e=b.current?.querySelectorAll(".mdx-community-feedback__item-content-text");e&&e.forEach((e,t)=>{const r=e,n=window.getComputedStyle(r),i=2*(parseFloat(n.lineHeight)||1.2*parseFloat(n.fontSize)),a=r.scrollHeight;N(e=>({...e,[t]:a>i}))})},t=()=>{T(h()),e()};return e(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[g,_]);return(0,i.jsxs)("div",{ref:b,className:(0,o.default)(f,"mdx-community-feedback"),...v,children:[(0,i.jsx)(s.SectionHeader,{title:e,noBorder:!0}),t&&(0,i.jsx)(l.Typography,{variant:"body1",className:"mdx-community-feedback__description",children:t}),(0,i.jsx)("div",{className:"mdx-community-feedback-buttons",children:(0,i.jsx)(d.ScrollButtons,{containerRef:y,spacing:"spaced",autoScroll:!w&&!M,autoScrollInterval:n,infiniteScroll:!0,desktopItemsToScroll:p})}),(0,i.jsx)(s.Grid,{className:"mdx-community-feedback__items",xs:{cols:3,wrap:!1,gap:r,scrollButtons:!1},onMouseEnter:()=>{O(!0)},onMouseLeave:()=>{O(!1)},children:_.map((e,t)=>{const r=x[t],n=P[t]||!1,a=(()=>{if(!e?.postMedia)return null;const n=e.postMedia.split(".").pop()?.toLowerCase();return["jpg","jpeg","png","gif","webp","svg"].includes(n||"")?(0,i.jsx)("img",{src:e.postMedia,alt:"image-"+t,className:"mdx-community-feedback__item-image "+(r?"expanded":"collapsed")}):["mp4","webm","mov"].includes(n||"")?(0,i.jsx)("video",{src:e.postMedia,className:"mdx-community-feedback__item-image "+(r?"expanded":"collapsed"),autoPlay:!0,playsInline:!0,muted:!0,loop:!0}):null})(),o=n||e?.postMedia;return(0,i.jsxs)(s.Grid.Item,{className:"mdx-community-feedback__item",children:[(0,i.jsxs)("div",{className:"mdx-community-feedback__item-header",children:[(0,i.jsxs)(u.default,{href:e.url,className:"mdx-community-feedback__item-header-user",children:[(0,i.jsx)("img",{className:"mdx-community-feedback__item-header-user-image",src:e.user.image,alt:e.user.displayName}),(0,i.jsxs)("div",{className:"mdx-community-feedback__item-header-user-info",children:[(0,i.jsx)(l.Typography,{variant:"body2",className:"mdx-community-feedback__item-header-username",children:e.user.displayName}),(0,i.jsxs)(l.Typography,{variant:"body2",className:"mdx-community-feedback__item-header-user-handle",children:["@",e.user.handle]})]})]}),(0,i.jsx)(u.default,{className:"mdx-community-feedback__item-header-link",href:e.url,children:(0,i.jsx)(m.IconX,{})})]}),(0,i.jsxs)("div",{className:"mdx-community-feedback__item-content",style:{maxHeight:!r&&e?.postMedia?180:"none",overflow:!r&&e?.postMedia?"hidden":"visible",position:e?.postMedia?"relative":"static"},children:[(0,i.jsx)(l.Typography,{variant:"body1",className:"mdx-community-feedback__item-content-text",style:r?{display:"block",whiteSpace:"pre-wrap"}:{display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:3,overflow:"hidden",textOverflow:"ellipsis"},children:e.content}),e.postMedia&&(0,i.jsxs)("div",{className:"mdx-community-feedback__media-wrapper",children:[a,!r&&(0,i.jsx)("div",{className:"mdx-community-feedback__item-gradient"})]}),!r&&(0,i.jsx)("div",{className:"mdx-community-feedback__item-gradient"}),o&&!r&&(0,i.jsx)("div",{className:"mdx-community-feedback__item-see-more "+(e?.postMedia&&n?"":"static"),children:(0,i.jsx)(l.Typography,{variant:"body2",className:"mdx-community-feedback__item-see-more-text",onClick:()=>j(e=>({...e,[t]:!0})),children:"See more.."})})]}),r&&(0,i.jsx)("div",{children:(0,i.jsx)(l.Typography,{className:"mdx-community-feedback__item-see-less-text",variant:"body2",onClick:()=>j(e=>({...e,[t]:!1})),children:"See less"})})]},t)})})]})}},68035:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(13110),t)},68674:(e,t,r)=>{"use strict";r.r(t)},69242:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NewsCardList=void 0;const n=r(74848),i=r(96540);r(92986);const a=r(97481),o=r(98941);t.NewsCardList=({data:e,...t})=>{const[r,s]=(0,i.useState)(e?.length>8),[c,l]=(0,i.useState)(8);return(0,n.jsx)("div",{className:"mdx-news-card-list__container",...t,children:(0,n.jsxs)("div",{children:[(0,n.jsx)(o.Box,{top:{xs:64},bottom:64,children:(0,n.jsx)(o.Grid,{xs:{cols:1,gap:"64px 16px"},md:{cols:4},children:e.slice(0,c).map((e,t)=>(0,n.jsx)(o.Grid.Item,{xs:1,children:(0,n.jsx)(o.NewsCard,{...e})},t))})}),r&&(0,n.jsx)(a.Button,{className:"mdx-news-card-list__button",onClick:()=>{l(e=>e+8),c+6>=e?.length&&s(!1)},size:"large",children:"See more"})]})})}},69965:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(45902),t)},70101:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.useHero=t.HeroContext=void 0;const o=a(r(96540));t.HeroContext=o.default.createContext({size:"medium"});t.useHero=()=>(0,o.useContext)(t.HeroContext)},70462:(e,t,r)=>{"use strict";r.r(t)},71136:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(21998),t)},72084:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroAction=void 0;const i=r(74848),a=r(97481),o=n(r(28774)),s=n(r(34559));r(94620);t.HeroAction=({size:e="large",variant:t="outlined",className:r,children:n,...c})=>(0,i.jsx)(o.default,{className:(0,s.default)(r,"mdx-hero-action",`mdx-hero-action--${e}`),...c,children:(0,i.jsx)(a.Button,{variant:t,size:e,children:(0,i.jsx)(a.Typography,{component:"span",variant:"label1",style:{color:"inherit"},children:n})})})},75117:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={scrollToBottom:"scrollToBottom_NE5w",hide:"hide_q_kn"}},76719:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(45262),t)},77187:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(18486),t)},78594:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Roadmap=void 0;const i=r(74848),a=n(r(34559)),o=r(98941),s=r(7290);r(6454);t.Roadmap=({title:e,description:t,timeline:r=[],noBorder:n=!1,href:c,linkLabel:l,className:d,children:u,...m})=>{const h=(new Date).getFullYear(),p=(e,t,r)=>{if(t===r.length-1)return"none";e.period[0],r[t+1].period[0];return"solid"};return(0,i.jsxs)("div",{className:(0,a.default)(d,"mdx-roadmap"),...m,children:[(0,i.jsx)(o.CallToActionSection,{className:"mdx-roadmap__header",title:e,description:t,columns:1,ctaPosition:"top",border:!1,align:"left",href:c,label:l,children:u}),r.length>0&&(0,i.jsx)(o.Grid,{className:"mdx-roadmap__timeline",xs:{cols:6,wrap:!1,gap:"0 1rem",scrollButtons:!0},spacingButtons:!0,leftLabel:"Past",rightLabel:"Future",children:r.map((e,t)=>(0,i.jsx)(o.Grid.Item,{xs:1,children:(0,i.jsx)(s.TimelineItem,{...e,index:t,period:e.period??h,description:e.description,borderStyle:p(e,t,r),periodStyle:"filled",className:(0,a.default)("mdx-roadmap__timeline-item",n&&"mdx-roadmap__timeline-item--no-border",e.className)})},t))})]})}},79028:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Grid=void 0;const i=r(74848),a=r(97481),o=r(17437),s=n(r(25505)),c=n(r(34559)),l=r(96540),d=r(57376),u=r(34500),m=r(90023);t.Grid=({actions:e,leftLabel:t="",rightLabel:r="",spacingButtons:n=!1,children:a,...o})=>{const s=(0,l.useRef)(null);return(0,i.jsxs)(h,{...o,className:(0,c.default)(o.className,"mdx-grid"),children:[(0,i.jsxs)("div",{className:"mdx-grid__actions",children:[e,(0,i.jsx)(u.ScrollButtons,{containerRef:s,className:"mdx-grid__scroll",leftLabel:t,rightLabel:r,spacing:n?"spaced":"grouped"})]}),(0,i.jsx)("div",{ref:s,className:(0,c.default)("mdx-grid__content","hidden-scrollbar"),children:a})]})},t.Grid.Item=m.GridItem;const h=s.default.div` + width: 100%; + + .mdx-grid__scroll { + display: flex; + } + + .mdx-grid__content { + display: grid; + gap: var(--grid-gap); + grid-template-columns: repeat(var(--grid-cols), minmax(0, 1fr)); + overflow: hidden; + } + + .mdx-grid__actions { + display: flex; + flex-direction: row; + align-items: center; + gap: 1rem; + + & > * { + margin-bottom: 3rem; + } + } + + ${e=>a.THEME_BREAKPOINTS.map(t=>{if(!e[t])return null;const r=e[t];return d.lsdUtils.responsive(e.theme,t,"up")(o.css` + ${void 0!==r.cols&&`\n --grid-cols: ${r.cols};\n `} + + ${void 0!==r.gap&&`\n --grid-gap: ${r.gap};\n `} + + ${(void 0===r.wrap||!0===r.wrap)&&o.css` + .mdx-grid__scroll { + display: none; + } + .mdx-grid__content { + display: grid; + flex-wrap: unset; + overflow-x: unset; + overflow-y: unset; + scroll-snap-type: unset; + } + `} + + ${void 0!==r.wrap&&!1===r.wrap&&o.css` + .mdx-grid__scroll { + display: flex; + } + .mdx-grid__content { + display: flex; + flex-wrap: nowrap; + overflow-x: scroll; + overflow-y: hidden; + scroll-snap-type: x mandatory; + } + `} + + ${!1===r.scrollButtons&&o.css` + .mdx-grid__scroll { + display: none; + } + `} + `)})} +`},79820:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(38634),t)},81394:(e,t,r)=>{"use strict";r.r(t)},83016:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HeroInfo=void 0;const i=r(74848),a=n(r(34559)),o=r(54046),s=r(70101),c=r(98941);r(12824);t.HeroInfo=({size:e,className:t,hideScrollToBottom:r=!1,children:n,...l})=>{const d=(0,s.useHero)(),u=(0,o.useHydrated)(),m=e||(d?d.size:"medium");return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{className:(0,a.default)(t,"mdx-hero-info",`mdx-hero-info--${m}`),...l,children:n}),u&&!r&&(0,i.jsx)(c.ScrollToBottom,{})]})}},83330:(e,t,r)=>{"use strict";r.r(t)},83510:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.InputCTASection=void 0;const i=r(74848),a=n(r(96540));r(64458);const o=r(97481),s=n(r(28774)),c=n(r(34559));t.InputCTASection=({title:e,description:t,label:r,link:n,linkProps:l,formInput:d,buType:u,newsletterId:m,successMessage:h="Thank you for subscribing!"})=>{const[p,f]=a.default.useState({email:"",name:""}),[_,v]=a.default.useState(""),g=e=>{f({...p,[e.target.name]:e.target.value})};return(0,i.jsxs)("div",{className:"mdx-input-cta-section__container",children:[e&&(0,i.jsx)(o.Typography,{variant:"subtitle1",component:"p",className:"mdx-input-cta-section__title",children:e}),(0,i.jsx)(o.Typography,{component:"h3",variant:"h3",className:(0,c.default)("input-cta-section__description",!d&&"input-cta-section__description--no-form"),children:t}),d?.length?(0,i.jsxs)("form",{className:"mdx-input-cta-section__form",onSubmit:async e=>{if(e.preventDefault(),p?.email)try{if(!u||!m)return void v("Business unit type or newsletter ID is missing.");const e=await fetch("https://admin-acid.logos.co/api/admin/newsletters/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:p.email,type:u,newsletter:m})}),t=await e.json();if(t?.result?.errors&&t?.result?.errors[0]?.context?.length)return void v(t?.result?.errors[0].context);if(t?.result?.message?.length)return void v(t.result.message);v(h)}catch(t){console.log(t),v("There was an error submitting the form.")}else v("Please enter an email address")},children:[(0,i.jsx)("div",{className:"mdx-input-cta-section__input-fields",children:d.map((e,t)=>(0,i.jsx)(o.TextField,{className:"mdx-input-cta-section__input",onChange:g,value:p[e.name],inputProps:{...e}},t))}),(0,i.jsx)("div",{children:(0,i.jsx)(o.Button,{type:"submit",className:"mdx-input-cta-section__cta",children:(0,i.jsx)(o.Typography,{variant:"body1",children:r})})})]}):(0,i.jsx)(s.default,{to:n,...l,children:(0,i.jsx)(o.Button,{className:"mdx-input-cta-section__cta",children:(0,i.jsx)(o.Typography,{variant:"body1",children:r})})}),_&&(0,i.jsx)(o.Typography,{className:"mdx-input-cta-section__message",variant:"body2",children:_})]})}},83636:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TimelineItem=void 0;const i=r(74848),a=r(97481),o=n(r(34559));r(61828);const s=e=>{if(Array.isArray(e)&&e.length>0){let t=e[0].toString();return e.length>1&&("+"===e[1]?t+="+":t+=" "+e[1]),t}return""};t.TimelineItem=({index:e,period:t,description:r,borderStyle:n,periodStyle:c,className:l,children:d,...u})=>(0,i.jsxs)("div",{className:(0,o.default)(l,"mdx-timeline-item","dashed"===n&&"mdx-timeline-item--border-dashed"),...u,children:[(0,i.jsxs)("div",{className:"mdx-timeline-item__header",children:[(0,i.jsxs)("div",{className:"mdx-timeline-item__period-container",children:["none"!==n&&(0,i.jsx)("div",{className:(0,o.default)("mdx-timeline-item__border")}),(0,i.jsx)(a.Typography,{variant:"subtitle2",component:"span",className:(0,o.default)("mdx-timeline-item__period",`mdx-timeline-item__period--${c}`),children:s(t)})]}),(0,i.jsx)(a.Typography,{variant:"h2",component:"span",className:"mdx-timeline-item__index",children:"number"==typeof e?`${e<9?"0":""}${e+1}`:e})]}),(0,i.jsx)(a.Typography,{variant:"h5",component:"p",className:"mdx-timeline-item__description",children:r})]})},84942:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NewsCard=void 0;const i=r(74848),a=r(97481),o=n(r(1893)),s=n(r(34559));r(20314);const c=r(17718);t.NewsCard=({thumbnail:e,title:t,date:r,author:n,description:l="",tags:d=[],...u})=>(0,i.jsxs)("a",{target:"_blank",...u,className:(0,s.default)(u.className,"mdx-news-card"),children:[e&&(0,i.jsxs)("div",{className:"mdx-news-card-thumbnail__container",children:[(0,i.jsx)(o.default,{sources:{dark:e,light:e},alt:t??"news thumbnail",className:"mdx-news-card__thumbnail"}),(0,i.jsx)("div",{className:"mdx-news-card__external-link-icon",children:(0,i.jsx)(c.IconExternalLink,{className:"mdx-jpd__external-link-icon"})})]}),(0,i.jsx)(a.Typography,{component:"h3",variant:"h4",className:"mdx-news-card__title",children:t}),(0,i.jsx)("div",{className:"mdx-news-card__row",children:(0,i.jsxs)("div",{className:"mdx-news-card__info",children:[r&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Typography,{variant:"body2",children:r}),(0,i.jsx)(a.Typography,{variant:"body2",children:"\xb7"})]}),(0,i.jsxs)(a.Typography,{variant:"body2",children:["by ",n]})]})}),l&&(0,i.jsx)(a.Typography,{variant:"body2",className:"mdx-news-card__description",children:l}),d?.length>0&&(0,i.jsx)("div",{className:"mdx-news-card__tags",children:d.map((e,t)=>(0,i.jsx)(a.Tag,{size:"small",className:"mdx-news-card__tag",children:e},t))})]})},85148:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.VideoSection=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941);r(26600);const c=r(30911),l=n(r(28774));t.VideoSection=({label:e,href:t,title:r,columns:n=1,description:d,target:u,border:m=!0,src:h,align:p="unset",className:f,children:_,variant:v="outlined",ctaPosition:g="bottom",...b})=>{const y=!!t,x=!r||!!d||y?r&&!d&&y?"title-button":r&&d&&2===n?"full-width":r&&d?"list":"simple":"title-only",j=t&&"top"===g&&(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-video-section__link",variant:v,children:e});return(0,i.jsxs)("div",{className:(0,o.default)(f,"mdx-video-section",`mdx-video-section--${x}`,!m&&"mdx-video-section--no-border"),...b,children:[(0,i.jsxs)("div",{className:(0,o.default)("mdx-video-section__container","unset"!==p&&`mdx-video-section--align-${p}`),children:[(0,i.jsxs)("div",{className:"mdx-video-section__header",children:[(0,i.jsx)(c.IconPlay,{}),(0,i.jsx)(a.Typography,{component:"h2",className:(0,o.default)("mdx-video-section__title"),children:r})]}),d&&(0,i.jsx)(a.Typography,{component:"h3",className:"mdx-video-section__description",children:d}),(0,i.jsx)("div",{className:"mdx-video-section__header__mobile-button",children:j}),h&&"bottom"===g&&(0,i.jsx)(l.default,{href:h,target:"_blank",children:(0,i.jsx)(s.CallToActionButton,{target:u,href:t,className:"mdx-video-section__link",variant:v,size:"small",children:e})})]}),(0,i.jsx)("div",{className:"mdx-video-section__video-container",children:(0,i.jsx)("iframe",{width:"100%",height:"100%",src:h,title:"Waku Tutorial 001 : Introduction to Waku",frameBorder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerPolicy:"strict-origin-when-cross-origin",allowFullScreen:!0,className:"mdx-video-section__video"})})]})}},85986:(e,t,r)=>{"use strict";r.r(t)},86370:(e,t,r)=>{"use strict";r.r(t)},86650:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SpecCard=void 0;const i=r(74848),a=r(97481),o=n(r(34559));r(15514);const s=r(30911),c=n(r(28774));t.SpecCard=({label:e,href:t,title:r,description:n,target:l="_blank",align:d="unset",className:u,children:m,...h})=>(0,i.jsx)("div",{className:(0,o.default)(u,"mdx-spec-card"),...h,children:(0,i.jsxs)("div",{className:(0,o.default)("mdx-spec-card__container","unset"!==d&&`mdx-spec-card--align-${d}`),children:[(0,i.jsx)("div",{className:"mdx-spec-card__header",children:(0,i.jsx)(a.Typography,{component:"h3",variant:"h4",className:(0,o.default)("mdx-spec-card__title"),children:r})}),n&&(0,i.jsx)(a.Typography,{component:"p",variant:"body2",className:"mdx-spec-card__description",children:n}),t&&(0,i.jsx)(c.default,{target:l,href:t,className:"mdx-spec-card__link",children:(0,i.jsxs)(a.IconButton,{className:"mdx-spec-card__button",children:[(0,i.jsx)(a.Typography,{variant:"body3",children:e}),(0,i.jsx)(s.IconExternalLink,{className:"mdx-spec-card__button-icon"})]})})]})})},86798:(e,t,r)=>{"use strict";r.r(t)},86908:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NewsletterSubscription=void 0;const i=r(74848),a=r(97481),o=n(r(34559)),s=r(98941),c=r(12230);r(13012);t.NewsletterSubscription=({title:e,description:t,byType:r,newsletterId:n,...l})=>{const d=(0,c.useNewsletterApi)(),u=!d.message||d.error,m=e??"Newsletter",h=t??(0,i.jsxs)(i.Fragment,{children:["Subscribe",(0,i.jsx)("br",{}),"to our newsletter"]});return(0,i.jsx)(s.CallToActionSection,{className:"mdx-ns",title:(0,i.jsx)("span",{className:"mdx-ns__title",children:m}),description:(0,i.jsxs)("div",{className:"mdx-ns__inner",children:[(0,i.jsx)("span",{className:"mdx-ns__description",children:h}),(0,i.jsxs)("form",{onSubmit:e=>{e.preventDefault();const t=e.target.elements.namedItem("email").value;d.subscribe(r,t,n)},children:[d.message&&(0,i.jsx)(a.Toast,{title:d.message,className:"mdx-ns__toast",icon:d.error?a.ErrorIcon:a.CheckIcon}),(0,i.jsxs)("div",{className:(0,o.default)("mdx-ns__inputs",!u&&"hidden"),children:[(0,i.jsx)(a.TextField,{inputProps:{type:"text",name:"name"},variant:"underlined",placeholder:"First name or pseudonym"}),(0,i.jsx)(a.TextField,{inputProps:{type:"email",name:"email",required:!0},variant:"underlined",placeholder:"Email address (required)"})]}),(0,i.jsx)(a.Button,{size:"large",color:"primary",variant:"outlined",className:(0,o.default)("mdx-ns__submit-button",!u&&"hidden"),disabled:d.busy,children:"Subscribe"})]})]}),columns:2,...l})}},87113:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(64662),t)},87250:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(79028),t),i(r(90023),t)},87746:(e,t,r)=>{"use strict";r.r(t)},88386:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventBanner=void 0;const i=r(74848),a=n(r(1893));r(4366);t.EventBanner=({src:e})=>(0,i.jsx)(a.default,{sources:{dark:e,light:e},alt:"event thumbnail",className:"mdx-event-banner__thumbnail"})},88582:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(43734),t)},89303:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(83510),t)},89442:(e,t,r)=>{"use strict";r.r(t)},90023:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GridItem=void 0;const i=r(74848),a=n(r(34559)),o=n(r(25505)),s=r(97481),c=r(57376),l=r(17437);t.GridItem=({children:e,...t})=>(0,i.jsx)(d,{...t,className:(0,a.default)(t.className),children:e});const d=o.default.div` + ${e=>s.THEME_BREAKPOINTS.map(t=>{if(!e[t])return null;const r=e[t];return c.lsdUtils.responsive(e.theme,t,"up")(l.css` + grid-column: span ${r}; + flex-basis: calc(100% / var(--grid-cols) * ${r}); + `)})} +`},90206:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventInfo=void 0;const n=r(74848);r(21010);const i=r(97481);t.EventInfo=({label:e,content:t})=>(0,n.jsxs)("div",{className:"mdx-event-info__container",children:[(0,n.jsx)(i.Typography,{variant:"body2",className:"mdx-event-info__label",children:e}),(0,n.jsx)(i.Typography,{variant:"body1",className:"mdx-event-info__content",children:t})]})},91314:(e,t,r)=>{"use strict";r.r(t)},91632:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(63134),t)},91771:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(29510),t)},92562:(e,t,r)=>{"use strict";r.r(t)},92986:(e,t,r)=>{"use strict";r.r(t)},94620:(e,t,r)=>{"use strict";r.r(t)},96323:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollY=void 0;const n=r(65255),i=r(96540);t.useScrollY=()=>{const[e,t]=(0,i.useState)(0);return(0,n.useWindowEventListener)("scroll",()=>{t(window.scrollY)}),e}},97200:(e,t,r)=>{var n=r(13222),i=0;e.exports=function(e){var t=++i;return n(e)+t}},97278:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventProfile=void 0;const i=r(74848),a=r(97481),o=n(r(1893));r(36306);const s=r(30911);t.EventProfile=({image:e,name:t,role:r,email:n,linkedin:c,...l})=>(0,i.jsxs)("div",{...l,className:"mdx-event-profile",children:[(0,i.jsx)(o.default,{sources:{dark:e,light:e},alt:e??"event profile",className:"mdx-event-profile__image"}),(0,i.jsxs)("div",{className:"mdx-event-profile__info",children:[(0,i.jsx)(a.Typography,{component:"p",variant:"subtitle1",className:"mdx-event-profile__title",children:t}),(0,i.jsx)(a.Typography,{variant:"body2",className:"mdx-event-profile__role",children:r}),(0,i.jsxs)("div",{className:"mdx-event-profile__social",children:[n&&(0,i.jsx)("a",{href:`mailto:${n}`,target:"_blank",rel:"noopener noreferrer",children:(0,i.jsx)(s.IconEmail,{})}),c&&(0,i.jsx)("a",{href:c,target:"_blank",rel:"noopener noreferrer",children:(0,i.jsx)(s.IconLinkedin,{})})]})]})]})},98941:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(15359),t),i(r(5195),t),i(r(49552),t),i(r(76719),t),i(r(87113),t),i(r(79820),t),i(r(61542),t),i(r(69965),t),i(r(77187),t),i(r(8760),t),i(r(7491),t),i(r(87250),t),i(r(41450),t),i(r(63540),t),i(r(41101),t),i(r(71136),t),i(r(3874),t),i(r(91632),t),i(r(11677),t),i(r(88582),t),i(r(37187),t),i(r(91771),t),i(r(16224),t),i(r(30707),t),i(r(61597),t),i(r(44454),t),i(r(5897),t),i(r(39068),t),i(r(68035),t),i(r(41),t),i(r(17715),t),i(r(7290),t),i(r(2984),t),i(r(64272),t),i(r(24120),t),i(r(29294),t),i(r(3399),t),i(r(32331),t),i(r(99635),t),i(r(39628),t),i(r(89303),t),i(r(59455),t),i(r(13431),t),i(r(61695),t),i(r(39708),t),i(r(27959),t),i(r(99849),t),i(r(37135),t)},99635:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(29146),t)},99849:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(38726),t)}}]); \ No newline at end of file diff --git a/assets/js/4802.b3b9dd72.js b/assets/js/4802.b3b9dd72.js new file mode 100644 index 0000000..c992c53 --- /dev/null +++ b/assets/js/4802.b3b9dd72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4802],{84802:(e,r,t)=>{t.d(r,{diagram:()=>u});var a=t(54616),s=(t(89625),t(21152),t(10045),t(5164),t(28698),t(5894),t(63245),t(32387),t(30092),t(13226),t(67633),t(40797)),u={parser:a.Zk,get db(){return new a.u4(2)},renderer:a.q7,styles:a.tM,init:(0,s.K2)(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")}}}]); \ No newline at end of file diff --git a/assets/js/4809.1bd0f5bc.js b/assets/js/4809.1bd0f5bc.js new file mode 100644 index 0000000..ea9a9e9 --- /dev/null +++ b/assets/js/4809.1bd0f5bc.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,r,t={84809:(e,r,t)=>{t.d(r,{BH:()=>a,Ho:()=>s,IH:()=>n,sx:()=>o});t(58291);const o=!1,a=["en"],n="search-index{dir}.json?_=95fea220",s=1}},o={};function a(e){var r=o[e];if(void 0!==r)return r.exports;var n=o[e]={exports:{}};return t[e](n,n.exports,a),n.exports}a.m=t,a.x=()=>{var e=a.O(void 0,[540],()=>a(90540));return e=a.O(e)},e=[],a.O=(r,t,o,n)=>{if(!t){var s=1/0;for(f=0;f=n)&&Object.keys(a.O).every(e=>a.O[e](t[u]))?t.splice(u--,1):(i=!1,n0&&e[f-1][2]>n;f--)e[f]=e[f-1];e[f]=[t,o,n]},a.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return a.d(r,{a:r}),r},a.d=(e,r)=>{for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((r,t)=>(a.f[t](e,r),r),[])),a.u=e=>"assets/js/"+e+".59e0d2f8.js",a.miniCssF=e=>{},a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a.p="/",a.gca=function(e){return e={}[e]||e,a.p+a.u(e)},(()=>{var e={4809:1};a.f.i=(r,t)=>{e[r]||importScripts(a.p+a.u(r))};var r=self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[],t=r.push.bind(r);r.push=r=>{var o=r[0],n=r[1],s=r[2];for(var i in n)a.o(n,i)&&(a.m[i]=n[i]);for(s&&s(a);o.length;)e[o.pop()]=1;t(r)}})(),r=a.x,a.x=()=>a.e(540).then(r);a.x()})(); \ No newline at end of file diff --git a/assets/js/4809.55b371e4.js b/assets/js/4809.55b371e4.js deleted file mode 100644 index b81aa15..0000000 --- a/assets/js/4809.55b371e4.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,r,t={84809:(e,r,t)=>{t.d(r,{BH:()=>n,Ho:()=>a,IH:()=>s,sx:()=>o});t(58291);const o=!1,n=["en"],s="search-index{dir}.json?_=f3d51dfc",a=1}},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var s=o[e]={exports:{}};return t[e](s,s.exports,n),s.exports}n.m=t,n.x=()=>{var e=n.O(void 0,[540],()=>n(90540));return e=n.O(e)},e=[],n.O=(r,t,o,s)=>{if(!t){var a=1/0;for(p=0;p=s)&&Object.keys(n.O).every(e=>n.O[e](t[u]))?t.splice(u--,1):(i=!1,s0&&e[p-1][2]>s;p--)e[p]=e[p-1];e[p]=[t,o,s]},n.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return n.d(r,{a:r}),r},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce((r,t)=>(n.f[t](e,r),r),[])),n.u=e=>"assets/js/"+e+".59e0d2f8.js",n.miniCssF=e=>{},n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),n.p="/",n.gca=function(e){return e={}[e]||e,n.p+n.u(e)},(()=>{var e={4809:1};n.f.i=(r,t)=>{e[r]||importScripts(n.p+n.u(r))};var r=self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[],t=r.push.bind(r);r.push=r=>{var o=r[0],s=r[1],a=r[2];for(var i in s)n.o(s,i)&&(n.m[i]=s[i]);for(a&&a(n);o.length;)e[o.pop()]=1;t(r)}})(),r=n.x,n.x=()=>n.e(540).then(r);n.x()})(); \ No newline at end of file diff --git a/assets/js/4866.6e4c75d5.js b/assets/js/4866.6e4c75d5.js deleted file mode 100644 index 64e95ce..0000000 --- a/assets/js/4866.6e4c75d5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[4866],{50487:(e,t,a)=>{function i(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}a.d(t,{S:()=>i}),(0,a(41750).K2)(i,"populateCommonDb")},64866:(e,t,a)=>{a.d(t,{diagram:()=>k});var i=a(50487),n=a(46792),l=a(74505),r=a(41750),s=a(78731),o=a(70451),c=r.UI.pie,p={sections:new Map,showData:!1,config:c},d=p.sections,u=p.showData,g=structuredClone(c),h=(0,r.K2)(()=>structuredClone(g),"getConfig"),m=(0,r.K2)(()=>{d=new Map,u=p.showData,(0,r.IU)()},"clear"),f=(0,r.K2)(({label:e,value:t})=>{d.has(e)||(d.set(e,t),r.Rm.debug(`added new section: ${e}, with value: ${t}`))},"addSection"),S=(0,r.K2)(()=>d,"getSections"),w=(0,r.K2)(e=>{u=e},"setShowData"),x=(0,r.K2)(()=>u,"getShowData"),D={getConfig:h,clear:m,setDiagramTitle:r.ke,getDiagramTitle:r.ab,setAccTitle:r.SV,getAccTitle:r.iN,setAccDescription:r.EI,getAccDescription:r.m7,addSection:f,getSections:S,setShowData:w,getShowData:x},T=(0,r.K2)((e,t)=>{(0,i.S)(e,t),t.setShowData(e.showData),e.sections.map(t.addSection)},"populateDb"),$={parse:(0,r.K2)(async e=>{const t=await(0,s.qg)("pie",e);r.Rm.debug(t),T(t,D)},"parse")},y=(0,r.K2)(e=>`\n .pieCircle{\n stroke: ${e.pieStrokeColor};\n stroke-width : ${e.pieStrokeWidth};\n opacity : ${e.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${e.pieOuterStrokeColor};\n stroke-width: ${e.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${e.pieTitleTextSize};\n fill: ${e.pieTitleTextColor};\n font-family: ${e.fontFamily};\n }\n .slice {\n font-family: ${e.fontFamily};\n fill: ${e.pieSectionTextColor};\n font-size:${e.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${e.pieLegendTextColor};\n font-family: ${e.fontFamily};\n font-size: ${e.pieLegendTextSize};\n }\n`,"getStyles"),C=(0,r.K2)(e=>{const t=[...e.entries()].map(e=>({label:e[0],value:e[1]})).sort((e,t)=>t.value-e.value);return(0,o.rLf)().value(e=>e.value)(t)},"createPieArcs"),k={parser:$,db:D,renderer:{draw:(0,r.K2)((e,t,a,i)=>{r.Rm.debug("rendering pie chart\n"+e);const s=i.db,c=(0,r.D7)(),p=(0,n.$t)(s.getConfig(),c.pie),d=18,u=450,g=u,h=(0,l.D)(t),m=h.append("g");m.attr("transform","translate(225,225)");const{themeVariables:f}=c;let[S]=(0,n.I5)(f.pieOuterStrokeWidth);S??=2;const w=p.textPosition,x=Math.min(g,u)/2-40,D=(0,o.JLW)().innerRadius(0).outerRadius(x),T=(0,o.JLW)().innerRadius(x*w).outerRadius(x*w);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+S/2).attr("class","pieOuterCircle");const $=s.getSections(),y=C($),k=[f.pie1,f.pie2,f.pie3,f.pie4,f.pie5,f.pie6,f.pie7,f.pie8,f.pie9,f.pie10,f.pie11,f.pie12],b=(0,o.UMr)(k);m.selectAll("mySlices").data(y).enter().append("path").attr("d",D).attr("fill",e=>b(e.data.label)).attr("class","pieCircle");let K=0;$.forEach(e=>{K+=e}),m.selectAll("mySlices").data(y).enter().append("text").text(e=>(e.data.value/K*100).toFixed(0)+"%").attr("transform",e=>"translate("+T.centroid(e)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(s.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const v=m.selectAll(".legend").data(b.domain()).enter().append("g").attr("class","legend").attr("transform",(e,t)=>"translate(216,"+(22*t-22*b.domain().length/2)+")");v.append("rect").attr("width",d).attr("height",d).style("fill",b).style("stroke",b),v.data(y).append("text").attr("x",22).attr("y",14).text(e=>{const{label:t,value:a}=e.data;return s.getShowData()?`${t} [${a}]`:t});const A=512+Math.max(...v.selectAll("text").nodes().map(e=>e?.getBoundingClientRect().width??0));h.attr("viewBox",`0 0 ${A} 450`),(0,r.a$)(h,u,A,p.useMaxWidth)},"draw")},styles:y}}}]); \ No newline at end of file diff --git a/assets/js/488ca57d.2b330cd0.js b/assets/js/488ca57d.2b330cd0.js deleted file mode 100644 index 4581d0e..0000000 --- a/assets/js/488ca57d.2b330cd0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwaku_guide=self.webpackChunkwaku_guide||[]).push([[2523],{4865:(e,s,n)=>{n.d(s,{A:()=>p});var t=n(96540),a=n(34164),r=n(23104),i=n(47751),o=n(92303);const c={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var d=n(74848);function l({className:e,block:s,selectedValue:n,selectValue:t,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,r.a_)(),u=e=>{const s=e.currentTarget,a=o.indexOf(s),r=i[a].value;r!==n&&(l(s),t(r))},h=e=>{let s=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const n=o.indexOf(e.currentTarget)+1;s=o[n]??o[0];break}case"ArrowLeft":{const n=o.indexOf(e.currentTarget)-1;s=o[n]??o[o.length-1];break}}s?.focus()};return(0,d.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":s},e),children:i.map(({value:e,label:s,attributes:t})=>(0,d.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{o.push(e)},onKeyDown:h,onClick:u,...t,className:(0,a.A)("tabs__item",c.tabItem,t?.className,{"tabs__item--active":n===e}),children:s??e},e))})}function u({lazy:e,children:s,selectedValue:n}){const r=(Array.isArray(s)?s:[s]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===n);return e?(0,t.cloneElement)(e,{className:(0,a.A)("margin-top--md",e.props.className)}):null}return(0,d.jsx)("div",{className:"margin-top--md",children:r.map((e,s)=>(0,t.cloneElement)(e,{key:s,hidden:e.props.value!==n}))})}function h(e){const s=(0,i.u)(e);return(0,d.jsxs)("div",{className:(0,a.A)("tabs-container",c.tabList),children:[(0,d.jsx)(l,{...s,...e}),(0,d.jsx)(u,{...s,...e})]})}function p(e){const s=(0,o.default)();return(0,d.jsx)(h,{...e,children:(0,i.v)(e.children)},String(s))}},19365:(e,s,n)=>{n.d(s,{A:()=>i});n(96540);var t=n(34164);const a={tabItem:"tabItem_Ymn6"};var r=n(74848);function i({children:e,hidden:s,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(a.tabItem,n),hidden:s,children:e})}},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>o});var t=n(96540);const a={},r=t.createContext(a);function i(e){const s=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),t.createElement(r.Provider,{value:s},e.children)}},55117:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>d,default:()=>p,frontMatter:()=>c,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"guides/js-waku/index","title":"JavaScript Waku SDK","description":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","source":"@site/docs/guides/js-waku/index.md","sourceDirName":"guides/js-waku","slug":"/guides/js-waku/","permalink":"/guides/js-waku/","draft":false,"unlisted":false,"editUrl":"https://github.com/waku-org/docs.waku.org/tree/develop/docs/guides/js-waku/index.md","tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"JavaScript Waku SDK","hide_table_of_contents":true},"sidebar":"guides","previous":{"title":"Upgrade Instructions","permalink":"/guides/nwaku/upgrade-instructions"},"next":{"title":"Send and Receive Messages in a Reliable Channel","permalink":"/guides/js-waku/reliable-channels"}}');var a=n(74848),r=n(28453),i=n(4865),o=n(19365);const c={title:"JavaScript Waku SDK",hide_table_of_contents:!0},d=void 0,l={},u=[{value:"Installation",id:"installation",level:2},{value:"Message structure",id:"message-structure",level:2},{value:"Getting started",id:"getting-started",level:2},{value:"Get help and report issues",id:"get-help-and-report-issues",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.admonition,{type:"caution",children:(0,a.jsxs)(s.p,{children:["Currently, the JavaScript Waku SDK (",(0,a.jsx)(s.code,{children:"@waku/sdk"}),") is ",(0,a.jsx)(s.strong,{children:"NOT compatible"})," with React Native. We plan to add support for React Native in the future."]})}),"\n",(0,a.jsxs)(s.p,{children:["The ",(0,a.jsx)(s.a,{href:"https://github.com/waku-org/js-waku",children:"JavaScript Waku SDK"})," (",(0,a.jsx)(s.code,{children:"@waku/sdk"}),") provides a TypeScript implementation of the ",(0,a.jsx)(s.a,{href:"/",children:"Waku protocol"})," designed for web browser environments. Developers can seamlessly integrate Waku functionalities into web applications, enabling efficient communication and collaboration among users using the ",(0,a.jsx)(s.code,{children:"@waku/sdk"})," package."]}),"\n",(0,a.jsx)(s.h2,{id:"installation",children:"Installation"}),"\n",(0,a.jsxs)(s.p,{children:["Install the ",(0,a.jsx)(s.code,{children:"@waku/sdk"})," package using your preferred package manager:"]}),"\n","\n",(0,a.jsxs)(i.A,{groupId:"package-manager",children:[(0,a.jsx)(o.A,{value:"npm",label:"NPM",children:(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"npm install @waku/sdk\n"})})}),(0,a.jsx)(o.A,{value:"yarn",label:"Yarn",children:(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"yarn add @waku/sdk\n"})})})]}),"\n",(0,a.jsxs)(s.p,{children:["You can also use the ",(0,a.jsx)(s.code,{children:"@waku/sdk"})," package via a CDN without installing it on your system:"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-js",children:'import * as waku from "https://unpkg.com/@waku/sdk@latest/bundle/index.js";\n'})}),"\n",(0,a.jsx)(s.h2,{id:"message-structure",children:"Message structure"}),"\n",(0,a.jsxs)(s.p,{children:["We recommend creating a message structure for your application using ",(0,a.jsx)(s.a,{href:"https://protobuf.dev/",children:"Protocol Buffers"})," for the following reasons:"]}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.strong,{children:"Consistency:"})," Ensures uniform message format for easy parsing and processing."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.strong,{children:"Interoperability:"})," Facilitates effective communication between different parts of your application."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.strong,{children:"Compatibility:"})," Allows smooth communication between older and newer app versions."]}),"\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.strong,{children:"Payload Size:"})," Minimizes payload overhead, especially for byte arrays, unlike JSON which adds significant overhead."]}),"\n"]}),"\n",(0,a.jsxs)(s.p,{children:["To get started, install the ",(0,a.jsx)(s.code,{children:"protobufjs"})," package using your preferred package manager:"]}),"\n",(0,a.jsxs)(i.A,{groupId:"package-manager",children:[(0,a.jsx)(o.A,{value:"npm",label:"NPM",children:(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"npm install protobufjs\n"})})}),(0,a.jsx)(o.A,{value:"yarn",label:"Yarn",children:(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-shell",children:"yarn add protobufjs\n"})})})]}),"\n",(0,a.jsxs)(s.p,{children:["You can also use the ",(0,a.jsx)(s.code,{children:"protobufjs"})," package via a CDN without installing it on your system:"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-js",children:'// Import the CDN\nimport "https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js";\n'})}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-html",children:'\x3c!-- Or include the protobufjs script --\x3e\n - +Bootstrap Nodes and Discover Peers | Waku Documentation + + + @@ -16,9 +16,9 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Bootstrap Nodes and Discover Peers

    This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Bootstrap Nodes and Discover Peers

    This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery.

    info

    If you do not set up a bootstrap node or discovery mechanism, your node will not connect to any remote peer.

    -
    tip

    Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.

    +
    tip

    Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.

    Default bootstrap method

    The @waku/sdk package provides a built-in bootstrapping method that uses DNS Discovery to locate peers from the waku v2.prod ENR tree.

    import { createLightNode } from "@waku/sdk";

    // Bootstrap node using the default bootstrap method
    const node = await createLightNode({ defaultBootstrap: true });
    @@ -29,7 +29,7 @@
    // Define the list of static peers to bootstrap
    const peers = [
    "/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H",
    "/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ",
    ];

    // Bootstrap node using the static peers
    const node = await createLightNode({
    bootstrapPeers: peers,
    });

    Alternatively, you can dial a particular node like this:

    // Define the list of static peers to bootstrap
    const peers = [
    "/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H",
    "/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ",
    ];

    const node = await createLightNode();

    // In case nodes are using IP address and / or `ws` protocol - additional configuration is needed:
    /*
    const node = await createLightNode({
    libp2p: {
    filterMultiaddrs: false,
    },
    });
    */

    const promises = peers.map((multiaddr) => node.dial(multiaddr));

    await Promise.all(promises);
    -
    tip

    For local development using a nwaku node, use a ws address instead of wss. Remember that this setup is functional only when your web server is running locally. You can check how to get multi address of your locally run node in Find node address.

    +
    tip

    For local development using a nwaku node, use a ws address instead of wss. Remember that this setup is functional only when your web server is running locally. You can check how to get multi address of your locally run node in Find node address.

    Configure DNS discovery

    To bootstrap a node using DNS Discovery, first install the @waku/dns-discovery package:

    npm install @waku/dns-discovery
    @@ -42,6 +42,6 @@
    import { createLightNode } from "@waku/sdk";
    import { bootstrap } from "@libp2p/bootstrap";
    import { enrTree, wakuDnsDiscovery } from "@waku/dns-discovery";

    // Define the list of static peers to bootstrap
    const peers = [
    "/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H",
    "/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ",
    ];

    // Define node requirements
    const NODE_REQUIREMENTS = {
    store: 3,
    lightPush: 3,
    filter: 3,
    };

    // Bootstrap node using DNS Discovery and static peers
    const node = await createLightNode({
    libp2p: {
    bootstrapPeers: peers,
    peerDiscovery: [wakuDnsDiscovery([enrTree["PROD"]], NODE_REQUIREMENTS)],
    },
    });

    Retrieving connected peers

    You can retrieve the array of peers connected to a node using the libp2p.getPeers() function within the @waku/sdk package:

    -
    import { createLightNode } from "@waku/sdk";

    const node = await createLightNode({ defaultBootstrap: true });
    await node.waitForPeers();

    // Retrieve array of peers connected to the node
    console.log(node.libp2p.getPeers());
    +
    import { createLightNode } from "@waku/sdk";

    const node = await createLightNode({ defaultBootstrap: true });
    await node.waitForPeers();

    // Retrieve array of peers connected to the node
    console.log(node.libp2p.getPeers());
    \ No newline at end of file diff --git a/guides/js-waku/debug-waku-dapp/index.html b/build/javascript/debug-waku-dapp/index.html similarity index 76% rename from guides/js-waku/debug-waku-dapp/index.html rename to build/javascript/debug-waku-dapp/index.html index 11f33e8..72fe389 100644 --- a/guides/js-waku/debug-waku-dapp/index.html +++ b/build/javascript/debug-waku-dapp/index.html @@ -3,10 +3,10 @@ -Debug Your Waku DApp and WebSocket | Waku Documentation - - - +Debug Your Waku DApp and WebSocket | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Debug Your Waku DApp and WebSocket

    This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Debug Your Waku DApp and WebSocket

    This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.

    Enabling debug logs

    When resolving issues in your Waku DApp, debug logs can be helpful. The @waku/sdk and libp2p packages use the debug tool to handle and show logs that help you debug effectively.

    NodeJS environments

    @@ -35,7 +35,7 @@
    KEYVALUEDESCRIPTION
    debugwaku*Enables @waku/sdk debug logs
    debugwaku*,libp2p*Enables @waku/sdk and libp2p debug logs
    debug*Enables all debug logs

    Checking WebSocket setup

    -

    Nwaku provides native support for WebSocket (ws) and WebSocket Secure (wss) protocols. These are the only transports supported for connecting to the Waku Network via browsers.

    +

    Nwaku provides native support for WebSocket (ws) and WebSocket Secure (wss) protocols. These are the only transports supported for connecting to the Waku Network via browsers.

    It's important to note that browsers impose certain limitations on WebSocket usage:

    • Secure Context Requirement: Insecure subroutines are prohibited in secure contexts. On an https:// webpage, only wss connections are permitted, while ws connections are not allowed. This restriction does not apply if the webpage is served locally, like on localhost or 127.0.0.1.
    • @@ -56,6 +56,6 @@

      Check WebSocket port accessibility

      Use telnet or another networking tool to verify if the WebSocket port is open and accessible. For example, if the multiaddr is /dns4/nwakunode.com/tcp/1234/wss/p2p/16..., use the command:

      $ telnet nwakunode.com 1234
      Trying 123.123.123.123...
      Connected to nwakunode.com.
      # ...
      -

      If the connection succeeds, there might be an issue with nwaku. Consider seeking support on the Waku Discord or raise an issue. If the connection fails, ensure that the WebSocket port is open.

    +

    If the connection succeeds, there might be an issue with nwaku. Consider seeking support on the Waku Discord or raise an issue. If the connection fails, ensure that the WebSocket port is open.

    \ No newline at end of file diff --git a/guides/js-waku/faq/index.html b/build/javascript/faq/index.html similarity index 74% rename from guides/js-waku/faq/index.html rename to build/javascript/faq/index.html index 9f63d3c..6477968 100644 --- a/guides/js-waku/faq/index.html +++ b/build/javascript/faq/index.html @@ -3,10 +3,10 @@ -JavaScript SDK FAQ | Waku Documentation - - - +JavaScript SDK FAQ | Waku Documentation + + + @@ -16,17 +16,17 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    JavaScript SDK FAQ

    You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started.

    -

    Protocol Buffers ensure consistent formatting, interoperability, and backward compatibility for your application's messages, with a smaller payload size than JSON. Check out the installation guide and Protobuf documentation to learn more.

    -

    Check out the Retrieve Messages Using Store Protocol guide to learn how to retrieve and filter historical messages using the Store protocol.

    -

    When creating your message encoder, you can configure the ephemeral option to prevent Store peers from keeping your messages on the Waku Network.

    -

    You can encrypt and decrypt your messages using symmetric, ECIES, and noise encryption methods. Check out the Encrypt, Decrypt, and Sign Your Messages guide to get started.

    -

    Waku has a specialized SDK designed for building React applications. Check out the Build React DApps Using @waku/react guide for instructions on installation and usage.

    -

    The JavaScript SDK has a default bootstrap method that can be configured with Static Peers and DNS Discovery. Check out the Bootstrap Nodes and Discover Peers guide for setting up peer discovery for your node.

    -

    Though the JavaScript SDK isn't directly usable in NodeJS due to certain limitations, we recommend running nwaku in a Docker container and consuming its REST API in a NodeJS application.

    -

    Check out the Debug Your Waku DApp and WebSocket guide to discover how to use debug logs to troubleshoot your Waku DApp and resolve connection issues with nwaku WebSockets.

    -

    We recommend regularly pinging peers to check for an active connection and reinitiating the subscription when it disconnects. Check out the Manage Your Filter Subscriptions guide for a detailed explanation and step-by-step instructions.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    JavaScript SDK FAQ

    You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started.

    +

    Protocol Buffers ensure consistent formatting, interoperability, and backward compatibility for your application's messages, with a smaller payload size than JSON. Check out the installation guide and Protobuf documentation to learn more.

    +

    Check out the Retrieve Messages Using Store Protocol guide to learn how to retrieve and filter historical messages using the Store protocol.

    +

    When creating your message encoder, you can configure the ephemeral option to prevent Store peers from keeping your messages on the Waku Network.

    +

    You can encrypt and decrypt your messages using symmetric, ECIES, and noise encryption methods. Check out the Encrypt, Decrypt, and Sign Your Messages guide to get started.

    +

    Waku has a specialized SDK designed for building React applications. Check out the Build React DApps Using @waku/react guide for instructions on installation and usage.

    +

    The JavaScript SDK has a default bootstrap method that can be configured with Static Peers and DNS Discovery. Check out the Bootstrap Nodes and Discover Peers guide for setting up peer discovery for your node.

    +

    Though the JavaScript SDK isn't directly usable in NodeJS due to certain limitations, we recommend running nwaku in a Docker container and consuming its REST API in a NodeJS application.

    +

    Check out the Debug Your Waku DApp and WebSocket guide to discover how to use debug logs to troubleshoot your Waku DApp and resolve connection issues with nwaku WebSockets.

    +

    We recommend regularly pinging peers to check for an active connection and reinitiating the subscription when it disconnects. Check out the Manage Your Filter Subscriptions guide for a detailed explanation and step-by-step instructions.

    While it's possible to transmit media such as images as bytes on Waku, we recommend uploading your media to a CDN or a file system like IPFS and then sharing the corresponding URL via Waku.

    -

    To manually set your own node as a starting point use Configure static peers.

    +

    To manually set your own node as a starting point use Configure static peers.

    \ No newline at end of file diff --git a/guides/js-waku/index.html b/build/javascript/index.html similarity index 73% rename from guides/js-waku/index.html rename to build/javascript/index.html index 4804497..d4c1f07 100644 --- a/guides/js-waku/index.html +++ b/build/javascript/index.html @@ -3,10 +3,10 @@ -JavaScript Waku SDK | Waku Documentation - - - +JavaScript Waku SDK | Waku Documentation + + + @@ -16,8 +16,10 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    JavaScript Waku SDK

    caution

    Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    JavaScript Waku SDK

    caution

    Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.

    The JavaScript Waku SDK (@waku/sdk) provides a TypeScript implementation of the Waku protocol designed for web browser environments. Developers can seamlessly integrate Waku functionalities into web applications, enabling efficient communication and collaboration among users using the @waku/sdk package.

    +

    Video Tutorials

    +

    Installation

    Install the @waku/sdk package using your preferred package manager:

    @@ -39,10 +41,10 @@
    <!-- Or include the protobufjs script -->
    <script src="https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js"></script>

    Getting started

    Have a look at the quick start guide and comprehensive tutorials to learn how to build applications using @waku/sdk:

    -
    GuideDescription
    Send and Receive Messages in a Reliable ChannelLearn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.
    Send and Receive Messages Using Light Push and FilterLearn how to send and receive messages on light nodes using the Light Push and Filter protocols
    Retrieve Messages Using Store ProtocolLearn how to retrieve and filter historical messages on light nodes using the Store protocol
    Encrypt, Decrypt, and Sign Your MessagesLearn how to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages
    Build React DApps Using @waku/reactLearn how to use the @waku/react package seamlessly integrate @waku/sdk into a React application
    Scaffold DApps Using @waku/create-appLearn how to use the @waku/create-app package to bootstrap your next @waku/sdk project from various example templates
    Bootstrap Nodes and Discover PeersLearn how to bootstrap your node using Static Peers and discover peers using DNS Discovery
    Run @waku/sdk in a NodeJS ApplicationLearn our suggested approach for using the @waku/sdk package within a NodeJS application
    Debug Your Waku DApp and WebSocketLearn how to troubleshoot your Waku DApp using debug logs and check WebSocket connections in nwaku
    Manage Your Filter SubscriptionsLearn how to manage filter subscriptions and handle node disconnections in your application
    -
    tip

    Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.

    +
    GuideDescription
    Send and Receive Messages in a Reliable ChannelLearn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.
    Send and Receive Messages Using Light Push and FilterLearn how to send and receive messages on light nodes using the Light Push and Filter protocols
    Retrieve Messages Using Store ProtocolLearn how to retrieve and filter historical messages on light nodes using the Store protocol
    Encrypt, Decrypt, and Sign Your MessagesLearn how to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages
    Build React DApps Using @waku/reactLearn how to use the @waku/react package seamlessly integrate @waku/sdk into a React application
    Scaffold DApps Using @waku/create-appLearn how to use the @waku/create-app package to bootstrap your next @waku/sdk project from various example templates
    Bootstrap Nodes and Discover PeersLearn how to bootstrap your node using Static Peers and discover peers using DNS Discovery
    Run @waku/sdk in a NodeJS ApplicationLearn our suggested approach for using the @waku/sdk package within a NodeJS application
    Debug Your Waku DApp and WebSocketLearn how to troubleshoot your Waku DApp using debug logs and check WebSocket connections in nwaku
    Manage Your Filter SubscriptionsLearn how to manage filter subscriptions and handle node disconnections in your application
    +
    tip

    Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.

    Get help and report issues

    To engage in general discussions, seek assistance, or stay updated with the latest news, visit the #support and #js-waku-contribute channels on the Waku Discord.

    -

    If you discover bugs or want to suggest new features, do not hesitate to open an issue in the js-waku repository. Your feedback and contributions are highly valued and will help improve the @waku/sdk package.

    +

    If you discover bugs or want to suggest new features, do not hesitate to open an issue in the js-waku repository. Your feedback and contributions are highly valued and will help improve the @waku/sdk package.

    \ No newline at end of file diff --git a/guides/js-waku/light-send-receive/index.html b/build/javascript/light-send-receive/index.html similarity index 84% rename from guides/js-waku/light-send-receive/index.html rename to build/javascript/light-send-receive/index.html index f8b4508..0068846 100644 --- a/guides/js-waku/light-send-receive/index.html +++ b/build/javascript/light-send-receive/index.html @@ -3,10 +3,10 @@ -Send and Receive Messages Using Light Push and Filter | Waku Documentation - - - +Send and Receive Messages Using Light Push and Filter | Waku Documentation + + + @@ -16,11 +16,11 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Send and Receive Messages Using Light Push and Filter

    This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Send and Receive Messages Using Light Push and Filter

    This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.

    Create a light node

    Use the createLightNode() function to create a Light Node and interact with the Waku Network:

    import { createLightNode } from "@waku/sdk";

    // Create and start a Light Node
    const node = await createLightNode({ defaultBootstrap: true });
    await node.start();

    // Use the stop() function to stop a running node
    // await node.stop();
    -
    info

    When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes.

    +
    info

    When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes.

    A node needs to know how to route messages. By default, it will use The Waku Network configuration ({ clusterId: 1, shards: [0,1,2,3,4,5,6,7] }). For most applications, it's recommended to use autosharding:

    // Create node with auto sharding (recommended)
    const node = await createLightNode({
    defaultBootstrap: true,
    networkConfig: {
    clusterId: 1,
    contentTopics: ["/my-app/1/notifications/proto"],
    },
    });

    Alternative network configuration

    @@ -34,7 +34,7 @@

    Choose a content topic

    Choose a content topic for your application and create a message encoder and decoder:

    import { createEncoder, createDecoder } from "@waku/sdk";

    // Choose a content topic
    const contentTopic = "/light-guide/1/message/proto";

    // Create a message encoder and decoder
    const encoder = createEncoder({ contentTopic });
    const decoder = createDecoder(contentTopic);
    -

    The ephemeral parameter allows you to specify whether messages should NOT be stored by Store peers:

    +

    The ephemeral parameter allows you to specify whether messages should NOT be stored by Store peers:

    const encoder = createEncoder({
    contentTopic: contentTopic, // message content topic
    ephemeral: true, // allows messages NOT be stored on the network
    });

    The pubsubTopicShardInfo parameter allows you to configure a different network configuration for your encoder and decoder:

    // Create the network config
    const networkConfig = { clusterId: 3, shards: [1, 2] };

    // Create encoder and decoder with custom network config
    const encoder = createEncoder({
    contentTopic: contentTopic,
    pubsubTopicShardInfo: networkConfig,
    });
    const decoder = createDecoder(contentTopic, networkConfig);
    @@ -42,7 +42,7 @@

    Create a message structure

    Create your application's message structure using Protobuf's valid message fields:

    import protobuf from "protobufjs";

    // Create a message structure using Protobuf
    const DataPacket = new protobuf.Type("DataPacket")
    .add(new protobuf.Field("timestamp", 1, "uint64"))
    .add(new protobuf.Field("sender", 2, "string"))
    .add(new protobuf.Field("message", 3, "string"));
    -
    info

    Have a look at the Protobuf installation guide for adding the protobufjs package to your project.

    +
    info

    Have a look at the Protobuf installation guide for adding the protobufjs package to your project.

    Send messages using light push

    To send messages over the Waku Network using the Light Push protocol, create a new message object and use the lightPush.send() function:

    // Create a new message object
    const protoMessage = DataPacket.create({
    timestamp: Date.now(),
    sender: "Alice",
    message: "Hello, World!",
    });

    // Serialise the message using Protobuf
    const serialisedMessage = DataPacket.encode(protoMessage).finish();

    // Send the message using Light Push
    await node.lightPush.send(encoder, {
    payload: serialisedMessage,
    });
    @@ -53,6 +53,6 @@
    // Create the network config
    const networkConfig = { clusterId: 3, shards: [1, 2] };

    // Create Filter subscription with custom network config
    const subscription = await node.filter.createSubscription(networkConfig);

    You can use the subscription.unsubscribe() function to stop receiving messages from a content topic:

    await subscription.unsubscribe([contentTopic]);
    -
    Congratulations!

    You have successfully sent and received messages over the Waku Network using the Light Push and Filter protocols. Have a look at the light-js and light-chat examples for working demos.

    +
    Congratulations!

    You have successfully sent and received messages over the Waku Network using the Light Push and Filter protocols. Have a look at the light-js and light-chat examples for working demos.

    \ No newline at end of file diff --git a/guides/js-waku/manage-filter/index.html b/build/javascript/manage-filter/index.html similarity index 78% rename from guides/js-waku/manage-filter/index.html rename to build/javascript/manage-filter/index.html index 0671dc8..c6ee9da 100644 --- a/guides/js-waku/manage-filter/index.html +++ b/build/javascript/manage-filter/index.html @@ -3,10 +3,10 @@ -Manage Your Filter Subscriptions | Waku Documentation - - - +Manage Your Filter Subscriptions | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Manage Your Filter Subscriptions

    This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Manage Your Filter Subscriptions

    This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.

    Overview

    Occasionally, your Filter subscriptions might disconnect from the Waku Network, resulting in messages not being received by your application. To manage your subscriptions, periodically ping peers to check for an active connection. The error message "peer has no subscriptions" indicates a failed ping due to disconnection. You can stop the pings if the disconnection/unsubscription is deliberate.

    @@ -27,6 +27,6 @@

    Next, create a function to ping and reinitiate the subscription:

    const pingAndReinitiateSubscription = async () => {
    try {
    // Ping the subscription
    await subscription.ping();
    } catch (error) {
    if (
    // Check if the error message includes "peer has no subscriptions"
    error instanceof Error &&
    error.message.includes("peer has no subscriptions")
    ) {
    // Reinitiate the subscription if the ping fails
    await subscription.subscribe([decoder], callback);
    } else {
    throw error;
    }
    }
    };

    // Periodically ping the subscription
    await pingAndReinitiateSubscription();
    info

    Pings will fail when there are temporary network degradations or reachability issues. This does not mean that the underlying connection has been closed.

    -
    Congratulations!

    You have successfully managed your Filter subscriptions to handle node disconnections in your application.

    +
    Congratulations!

    You have successfully managed your Filter subscriptions to handle node disconnections in your application.

    \ No newline at end of file diff --git a/guides/js-waku/message-encryption/index.html b/build/javascript/message-encryption/index.html similarity index 86% rename from guides/js-waku/message-encryption/index.html rename to build/javascript/message-encryption/index.html index 2b85bff..1f61be2 100644 --- a/guides/js-waku/message-encryption/index.html +++ b/build/javascript/message-encryption/index.html @@ -3,10 +3,10 @@ -Encrypt, Decrypt, and Sign Your Messages | Waku Documentation - - - +Encrypt, Decrypt, and Sign Your Messages | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Encrypt, Decrypt, and Sign Your Messages

    This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Encrypt, Decrypt, and Sign Your Messages

    This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.

    info

    Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to freely use custom protocols or Waku message payload encryption methods.

    Installation

    Install the required packages for integrating @waku/message-encryption using your preferred package manager:

    @@ -49,6 +49,6 @@

    We used randomly generated keys for encryption and message signing in the provided examples, but real-world applications require consistent keys among client restarts. Have a look at the Key Pair Handling example, which demonstrates the secure storage and retrieval of key information from local storage using Subtle Crypto.

    If you need a simple way to store your keys in hexadecimal format across your application, you can use the @waku/utils package:

    import { bytesToHex, hexToBytes } from "@waku/utils/bytes";

    // Generate random symmetric and private keys
    const symmetricKey = generateSymmetricKey();
    const privateKey = generatePrivateKey();

    // Store the keys in hexadecimal format
    const symmetricKeyHex = bytesToHex(symmetricKey);
    const privateKeyHex = bytesToHex(privateKey);

    // Restore the keys from hexadecimal format
    const restoredSymmetricKey = hexToBytes(symmetricKeyHex);
    const restoredPrivateKey = hexToBytes(privateKeyHex);
    -
    Congratulations!

    You have successfully encrypted, decrypted, and signed your messages using Symmetric and ECIES encryption methods. Have a look at the eth-pm example for a working demo.

    +
    Congratulations!

    You have successfully encrypted, decrypted, and signed your messages using Symmetric and ECIES encryption methods. Have a look at the eth-pm example for a working demo.

    \ No newline at end of file diff --git a/guides/js-waku/reliable-channels/index.html b/build/javascript/reliable-channels/index.html similarity index 84% rename from guides/js-waku/reliable-channels/index.html rename to build/javascript/reliable-channels/index.html index d7af585..d49c0f8 100644 --- a/guides/js-waku/reliable-channels/index.html +++ b/build/javascript/reliable-channels/index.html @@ -3,10 +3,10 @@ -Send and Receive Messages in a Reliable Channel | Waku Documentation - - - +Send and Receive Messages in a Reliable Channel | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Send and Receive Messages in a Reliable Channel

    Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Send and Receive Messages in a Reliable Channel

    Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.

    danger

    This is an experimental feature and has a number of limitations.

    Import Waku SDK

    npm install @waku/sdk@latest
    @@ -25,11 +25,11 @@

    Create a Waku node

    Use the createLightNode() function to create a Light Node and interact with the Waku Network:

    import { createLightNode } from "@waku/sdk";

    // Create a Light Node
    const node = await createLightNode({ defaultBootstrap: true });
    -
    info

    When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes.

    +
    info

    When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes.

    Create encoders and decoders

    Choose a content topic for your application and create a message encoder and decoder:

    import { createEncoder, createDecoder } from "@waku/sdk";

    // Choose a content topic
    const ct = "/my-app/1/messages/proto";

    // Create a message encoder and decoder
    const encoder = node.createEncoder({ contentTopic: ct });
    const decoder = node.createDecoder({ contentTopic: ct });
    -

    You can also use @waku/message-encryption to encrypt and decrypt messages using Waku libraries.

    +

    You can also use @waku/message-encryption to encrypt and decrypt messages using Waku libraries.

    info

    In this example, users send and receive messages on a shared content topic. However, real applications may have users broadcasting messages while others listen or only have 1:1 exchanges. Waku supports all these use cases.

    Listen for connection status

    The Waku node will emit health events to help you know whether the node is connected to the network. @@ -48,7 +48,7 @@ messages within a given channel.

    Create a message structure

    Create your application's message structure using Protobufjs:

    import protobuf from "protobufjs";

    // Create a message structure using Protobuf
    const DataPacket = new protobuf.Type("DataPacket")
    .add(new protobuf.Field("timestamp", 1, "uint64"))
    .add(new protobuf.Field("sender", 2, "string"))
    .add(new protobuf.Field("message", 3, "string"));
    -
    info

    Have a look at the Protobuf installation guide for adding the protobufjs package to your project.

    +
    info

    Have a look at the Protobuf installation guide for adding the protobufjs package to your project.

    Listen to incoming messages

    The reliable channel will emit incoming messages. To process them, simply add a listener:

    reliableChannel.addEventListener("message-received", (event) => {
    const wakuMessage = event.detail;

    // decode your payload using the protobuf object previously created
    const { timestamp, sender, message } = DataPacket.decode(wakuMessage.payload);

    // ... process the message as you wish
    })
    @@ -62,6 +62,6 @@ messages within a given channel.

  • has encountered an error
  • // Send the message, and get the id to track events
    const messageId = reliableChannel.send(payload);

    reliableChannel.addEventListener("sending-message-irrecoverable-error", (event) => {
    if (messageId === event.detail.messageId) {
    console.error('Failed to send message:', event.detail.error);
    // Show an error to the user
    }
    })

    reliableChannel.addEventListener("message-sent", (event) => {
    if (messageId === event.detail) {
    // Message sent, show '✔' to the user, etc
    }
    })

    reliableChannel.addEventListener("message-acknowledged", (event) => {
    if (messageId === event.detail) {
    // Message acknowledged by other participants, show '✔✔' to the user, etc
    }
    })
    -
    Congratulations!

    You have successfully sent and received messages over the Waku Network using our reliable protocols such as Scalable Data Sync (SDS) and P2P Reliability.

    +
    Congratulations!

    You have successfully sent and received messages over the Waku Network using our reliable protocols such as Scalable Data Sync (SDS) and P2P Reliability.

    \ No newline at end of file diff --git a/guides/js-waku/run-waku-nodejs/index.html b/build/javascript/run-waku-nodejs/index.html similarity index 73% rename from guides/js-waku/run-waku-nodejs/index.html rename to build/javascript/run-waku-nodejs/index.html index f0be4c1..95617cf 100644 --- a/guides/js-waku/run-waku-nodejs/index.html +++ b/build/javascript/run-waku-nodejs/index.html @@ -3,10 +3,10 @@ -Run @waku/sdk in a NodeJS Application | Waku Documentation - - - +Run @waku/sdk in a NodeJS Application | Waku Documentation + + + @@ -16,20 +16,20 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Run @waku/sdk in a NodeJS Application

    While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Run @waku/sdk in a NodeJS Application

    While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.

    Limitations

    API compatibility

    @waku/sdk prioritises browser compatibility, avoiding NodeJS APIs for simpler bundling. This design choice enhances browser API compatibility but sacrifices NodeJS optimisation. While many browser APIs work in NodeJS, they might need better optimisation.

    Protocol implementation

    -

    @waku/sdk focuses on the client side of the Request/Response protocol. We'll have to replicate all the functionalities added to nwaku to implement extra features.

    +

    @waku/sdk focuses on the client side of the Request/Response protocol. We'll have to replicate all the functionalities added to nwaku to implement extra features.

    Codebase complexity

    @waku/sdk aims to provide optimal default for the browser, striking a balance between browser and NodeJS compatibility while ensuring simplicity will add complexity.

    Browser-specific protocols

    Certain features in @waku/sdk are tailored for browsers and might not translate seamlessly to NodeJS. For example, only WebSocket is supported in the browser, whereas a NodeJS application can benefit from using transport methods like TCP.

    @waku/sdk default peer management caters to the browser's ephemeral nature, which is different for NodeJS. This is why DNS Discovery and Peer Exchange are the default discovery mechanisms for the browser but not for NodeJS and desktop applications.

    Recommendations

    -

    Before using @waku/sdk in a NodeJS environment, take into account these limitations. For a more optimised solution, we recommend running nwaku in a Docker container and consuming its REST API.

    +

    Before using @waku/sdk in a NodeJS environment, take into account these limitations. For a more optimised solution, we recommend running nwaku in a Docker container and consuming its REST API.

    Future developments

    -

    There are plans to release a NodeJS package based on nwaku to streamline the process of using Waku Network features in NodeJS applications. You can track the progress and updates here: https://github.com/waku-org/nwaku/issues/1332.

    +

    There are plans to release a NodeJS package based on nwaku to streamline the process of using Waku Network features in NodeJS applications. You can track the progress and updates here: https://github.com/waku-org/nwaku/issues/1332.

    \ No newline at end of file diff --git a/guides/js-waku/store-retrieve-messages/index.html b/build/javascript/store-retrieve-messages/index.html similarity index 84% rename from guides/js-waku/store-retrieve-messages/index.html rename to build/javascript/store-retrieve-messages/index.html index 83dcefa..a9f8ba8 100644 --- a/guides/js-waku/store-retrieve-messages/index.html +++ b/build/javascript/store-retrieve-messages/index.html @@ -3,10 +3,10 @@ -Retrieve Messages Using Store Protocol | Waku Documentation - - - +Retrieve Messages Using Store Protocol | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Retrieve Messages Using Store Protocol

    This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Retrieve Messages Using Store Protocol

    This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.

    Create a light node

    Use the createLightNode() function to create a Light Node and interact with the Waku Network:

    import { createLightNode } from "@waku/sdk";

    // Create and start a Light Node
    const node = await createLightNode({ defaultBootstrap: true });
    await node.start();
    @@ -36,7 +36,7 @@
    • decoders: List of decoders that specify the content topic to query for and their message decryption methods.
    • callback: The callback function for processing the retrieved messages.
    • -
    • options (optional): Query options to filter the retrieved messages.
    • +
    • options (optional): Query options to filter the retrieved messages.
    // Create the callback function
    const callback = (wakuMessage) => {
    // Render the message/payload in your application
    console.log(wakuMessage);
    };

    // Query the Store peer
    await node.store.queryWithOrderedCallback([decoder], callback);
    info

    The queryWithOrderedCallback() function always returns the most recent messages in a page first.

    @@ -44,7 +44,7 @@

    The store.queryGenerator() function provides more control and flexibility over processing messages retrieved from Store nodes through Async Generators. It accepts these parameters:

    • decoders: List of decoders that specify the content topic to query for and their message decryption methods.
    • -
    • options (optional): Query options to filter the retrieved messages.
    • +
    • options (optional): Query options to filter the retrieved messages.
    // Create the store query
    const storeQuery = node.store.queryGenerator([decoder]);

    // Process the messages
    for await (const messagesPromises of storeQuery) {
    // Fulfil the messages promises
    const messages = await Promise.all(
    messagesPromises.map(async (p) => {
    const msg = await p;
    // Render the message/payload in your application
    console.log(msg);
    })
    );
    }
    info

    The queryGenerator() function always returns the oldest messages in a page first.

    @@ -64,6 +64,6 @@

    The timeFilter option specifies a time frame to retrieve messages from. For example, consider a query that retrieves messages from the previous week:

    // Get the time frame
    const endTime = new Date();
    const startTime = new Date();
    startTime.setDate(endTime.getDate() - 7);

    // Retrieve a week of messages
    const queryOptions = {
    timeFilter: {
    startTime,
    endTime,
    },
    };

    // Query the Store peer with options
    await node.store.queryWithOrderedCallback([decoder], callback, options);
    const storeQuery = node.store.queryGenerator([decoder, options]);
    info

    The timeFilter option significantly reduces message retrieval performance. To optimise it, consider resuming message retrieval using a cursor that starts from the last seen message.

    -
    Congratulations!

    You have successfully retrieved and filtered historical messages on a Light Node using the Store protocol. Have a look at the store-js and store-reactjs-chat examples for working demos.

    +
    Congratulations!

    You have successfully retrieved and filtered historical messages on a Light Node using the Store protocol. Have a look at the store-js and store-reactjs-chat examples for working demos.

    \ No newline at end of file diff --git a/guides/js-waku/use-waku-create-app/index.html b/build/javascript/use-waku-create-app/index.html similarity index 75% rename from guides/js-waku/use-waku-create-app/index.html rename to build/javascript/use-waku-create-app/index.html index 6e72100..cdc38b6 100644 --- a/guides/js-waku/use-waku-create-app/index.html +++ b/build/javascript/use-waku-create-app/index.html @@ -3,10 +3,10 @@ -Scaffold DApps Using @waku/create-app | Waku Documentation - - - +Scaffold DApps Using @waku/create-app | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Scaffold DApps Using @waku/create-app

    This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Scaffold DApps Using @waku/create-app

    This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.

    Usage

    Initialise a new @waku/sdk template using any of the following methods:

    @@ -33,6 +33,6 @@
  • Finally, submit a pull request to the js-waku-examples repository.
  • Our team will carefully review and merge your submission upon approval.
  • -

    Waku also provides bounties to encourage community members to contribute to the network and earn rewards. To participate in the bounty program, head to https://github.com/waku-org/bounties.

    +

    Waku also provides bounties to encourage community members to contribute to the network and earn rewards. To participate in the bounty program, head to https://github.com/waku-org/bounties.

    \ No newline at end of file diff --git a/guides/js-waku/use-waku-react/index.html b/build/javascript/use-waku-react/index.html similarity index 87% rename from guides/js-waku/use-waku-react/index.html rename to build/javascript/use-waku-react/index.html index 147e9ae..f1afbad 100644 --- a/guides/js-waku/use-waku-react/index.html +++ b/build/javascript/use-waku-react/index.html @@ -3,10 +3,10 @@ -Build React DApps Using @waku/react | Waku Documentation - - - +Build React DApps Using @waku/react | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Build React DApps Using @waku/react

    caution

    Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Build React DApps Using @waku/react

    caution

    Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.

    The @waku/react package provides components and UI adapters to integrate @waku/sdk into React applications effortlessly. This guide provides detailed steps for using @waku/react in your project.

    Install the dependencies

    First, set up a project using any production-grade React framework or an existing React application. For this guide, we will create a boilerplate using ViteJS:

    @@ -32,22 +32,22 @@

    Build the application interface

    Let's build a user interface for sending messages and viewing past messages, modify the App.jsx file with the following code block:

    src/App.jsx
    import { useState, useEffect } from 'react';
    import { useWaku } from "@waku/react";
    import { createEncoder, createDecoder } from "@waku/sdk";
    import protobuf from 'protobufjs';
    import './App.css'

    function App() {
    const [inputMessage, setInputMessage] = useState("");
    const [messages, setMessages] = useState([]);

    // Update the inputMessage state as the user input changes
    const handleInputChange = (e) => {
    setInputMessage(e.target.value);
    };

    // Create and start a Light Node
    const { node, error, isLoading } = useWaku();

    // Create a message encoder and decoder
    const contentTopic = "/waku-react-guide/1/chat/proto";
    const encoder = createEncoder({ contentTopic });
    const decoder = createDecoder(contentTopic);

    // Create a message structure using Protobuf
    const DataPacket = new protobuf.Type("DataPacket")
    .add(new protobuf.Field("timestamp", 1, "uint64"))
    .add(new protobuf.Field("message", 2, "string"));

    // Send the message using Light Push
    const sendMessage = async () => {}

    return (
    <>
    <div className="chat-interface">
    <h1>Waku React Demo</h1>
    <div className="chat-body">
    {messages.map((message, index) => (
    <div key={index} className="chat-message">
    <span>{new Date(message.timestamp).toUTCString()}</span>
    <div className="message-text">{message.message}</div>
    </div>
    ))}
    </div>
    <div className="chat-footer">
    <input
    type="text"
    id="message-input"
    value={inputMessage}
    onChange={handleInputChange}
    placeholder="Type your message..."
    />
    <button className="send-button" onClick={sendMessage}>Send</button>
    </div>
    </div>
    </>
    )
    }

    export default App
    -
    info

    In the code above, we also created a message encoder and decoder using the createEncoder() and createDecoder() functions, along with the application message structure with Protobuf.

    +
    info

    In the code above, we also created a message encoder and decoder using the createEncoder() and createDecoder() functions, along with the application message structure with Protobuf.

    Next, modify the App.css file with the following code block:

    src/App.css
    #root {
    margin: 0 auto;
    }

    .chat-interface {
    display: flex;
    flex-direction: column;
    height: 100vh;
    border: 1px solid #ccc;
    }

    .chat-body {
    flex-grow: 1;
    overflow-y: auto;
    padding: 10px;
    }

    .message-text {
    background-color: #f1f1f1;
    color: #000;
    padding: 10px;
    margin-bottom: 10px;
    }

    .chat-footer {
    display: flex;
    padding: 10px;
    background-color: #f1f1f1;
    align-items: center;
    }

    #message-input {
    flex-grow: 1;
    border-radius: 4px;
    padding: 10px;
    margin-right: 10px;
    }

    .send-button {
    background-color: #007bff;
    border-radius: 4px;
    }

    Send messages using light push

    -

    To send messages in our application, we need to modify the sendMessage() function to serialize user input into our Protobuf structure and push it to the network using the useLightPush() function:

    +

    To send messages in our application, we need to modify the sendMessage() function to serialize user input into our Protobuf structure and push it to the network using the useLightPush() function:

    src/App.jsx
    import { useLightPush } from "@waku/react";

    function App() {
    // Bind push method to a node and encoder
    const { push } = useLightPush({ node, encoder });

    // Send the message using Light Push
    const sendMessage = async () => {
    if (!push || inputMessage.length === 0) return;

    // Create a new message object
    const timestamp = Date.now();
    const protoMessage = DataPacket.create({
    timestamp: timestamp,
    message: inputMessage
    });

    // Serialise the message and push to the network
    const payload = DataPacket.encode(protoMessage).finish();
    const { recipients, errors } = await push({ payload, timestamp });

    // Check for errors
    if (errors.length === 0) {
    setInputMessage("");
    console.log("MESSAGE PUSHED");
    } else {
    console.log(errors);
    }
    };
    }

    Receive messages using filter

    -

    To display messages in our application, we need to use the useFilterMessages() function to create a Filter subscription, receive incoming messages, and render them in our interface:

    +

    To display messages in our application, we need to use the useFilterMessages() function to create a Filter subscription, receive incoming messages, and render them in our interface:

    src/App.jsx
    import { useFilterMessages } from "@waku/react";

    function App() {
    // Receive messages from Filter subscription
    const { messages: filterMessages } = useFilterMessages({ node, decoder });

    // Render the list of messages
    useEffect(() => {
    setMessages(filterMessages.map((wakuMessage) => {
    if (!wakuMessage.payload) return;
    return DataPacket.decode(wakuMessage.payload);
    }));
    }, [filterMessages]);
    }

    Retrieve messages using store

    -

    To display messages from the past, we need to retrieve them from the Store protocol using the useStoreMessages() function when our application initialises and then render them alongside newly received messages:

    +

    To display messages from the past, we need to retrieve them from the Store protocol using the useStoreMessages() function when our application initialises and then render them alongside newly received messages:

    src/App.jsx
    import { useFilterMessages, useStoreMessages } from "@waku/react";

    function App() {
    // Query Store peers for past messages
    const { messages: storeMessages } = useStoreMessages({ node, decoder });

    // Receive messages from Filter subscription
    const { messages: filterMessages } = useFilterMessages({ node, decoder });

    // Render both past and new messages
    useEffect(() => {
    const allMessages = storeMessages.concat(filterMessages);
    setMessages(allMessages.map((wakuMessage) => {
    if (!wakuMessage.payload) return;
    return DataPacket.decode(wakuMessage.payload);
    }));
    }, [filterMessages, storeMessages]);
    }

    You can also configure a specific Store peer when creating the node, which is useful when running your own Store node or using a specific node in the network:

    const node = await createLightNode({ 
    defaultBootstrap: true,
    store: {
    peer: "/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm..." // multiaddr or PeerId of your Store node
    }
    });

    If the specified Store peer is not available, the node will fall back to using random Store peers in the network.

    -
    info

    To explore the available Store query options, have a look at the Retrieve Messages Using Store Protocol guide.

    -
    tip

    You have successfully integrated @waku/sdk into a React application using the @waku/react package. Have a look at the web-chat example for a working demo and the Building a Tic-Tac-Toe Game with Waku tutorial to learn more.

    +
    info

    To explore the available Store query options, have a look at the Retrieve Messages Using Store Protocol guide.

    +
    tip

    You have successfully integrated @waku/sdk into a React application using the @waku/react package. Have a look at the web-chat example for a working demo and the Building a Tic-Tac-Toe Game with Waku tutorial to learn more.

    \ No newline at end of file diff --git a/guides/nwaku/run-node/index.html b/guides/nwaku/run-node/index.html deleted file mode 100644 index b6c810e..0000000 --- a/guides/nwaku/run-node/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - -Run a Nwaku Node | Waku Documentation - - - - - - - - -

    Run a Nwaku Node

    Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources.

    -

    waku architecture

    -

    This guide provides detailed steps to download, build, configure, and connect a nwaku node to the Waku Network. It also includes interacting with the node and finding its addresses.

    -
    info

    We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.

    -

    Get the node binary

    -

    To run a node, you must have the nwaku binary. Nwaku provides multiple options for running a node:

    - -

    We recommend using Docker Compose to run a node because it's the simplest and fastest way to configure and run one:

    -
    DescriptionDocumentation
    Docker ComposeRun a nwaku node with Docker ComposeRun Nwaku with Docker Compose
    Docker ContainerRun a nwaku node in a Docker ContainerRun Nwaku in a Docker Container
    -

    Download the binary

    -
    DescriptionDocumentation
    Precompiled BinaryDownload a precompiled binary of the nwaku nodeDownload Nwaku Binary
    Nightly ReleaseTry the latest nwaku updates without compiling the binariesDownload Nightly Release
    -

    Build the binary

    -
    DescriptionDocumentation
    Build from SourceBuild the node from the nwaku source codeBuild Nwaku from Source
    -
    tip

    You can run the nwaku binaries and Docker images on cloud service providers like Google Cloud, Microsoft Azure, Amazon Web Services, and DigitalOcean.

    -

    Run the node

    -

    Once you have gotten the nwaku binary, run it using the default configuration:

    -
    # Run the Docker Compose
    docker-compose up -d

    # Run the standalone binary
    ./build/wakunode2
    -
    tip

    To learn how to customise the configuration of a nwaku node, have a look at the Node Configuration Methods and Node Configuration Examples guides.

    -

    Bootstrap the node

    -

    To join the Waku Network, nodes must bootstrap for an entry point before discovering more peers. Nwaku provides multiple peer discovery mechanisms:

    -
    DescriptionDocumentation
    Static PeersConfigure the bootstrap nodes that nwaku should establish connections upon startupConfigure Static Peers
    DNS DiscoveryEnable nwaku to bootstrap nodes using the DNS Discovery mechanismConfigure DNS Discovery
    Discv5Enable nwaku to discover peers using the Discv5 mechanismConfigure Discv5
    Peer ExchangeEnable Peer Exchange protocol for light nodes to request peers from your nwaku nodeConfigure Peer Exchange
    -
    tip

    We suggest configuring WebSocket transport for your node to enable support and serving of browser peers using @waku/sdk.

    -

    Interact with the node

    -

    You can interact with a running nwaku node through the REST API, such as querying the node information using the Get node info endpoint:

    - -
    curl --location 'http://127.0.0.1:8645/debug/v1/info' \
    --header 'Accept: application/json'
    -
    info

    The listenAddresses field stores the node's listening addresses, while the enrUri field stores the discoverable ENR URI for peer discovery.

    -

    Check the node health status

    -

    You can check the health status of the node by calling the Get node health status endpoint of the REST API:

    -
    curl --location 'http://127.0.0.1:8645/health' \
    --header 'Accept: text/plain'
    -
    tip

    If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord.

    -
    Congratulations!

    You have successfully started, configured, and connected a nwaku node to the Waku Network. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.

    - - \ No newline at end of file diff --git a/index.html b/index.html index 98c2711..fff1b6a 100644 --- a/index.html +++ b/index.html @@ -4,9 +4,9 @@ Introduction to Waku | Waku Documentation - - - + + + @@ -16,10 +16,10 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Introduction to Waku

    Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy.

    -
    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Introduction to Waku

    Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy.

    +
    -
    tip

    Check out our Learn section, YouTube channel, and Blog to dive into how Waku works behind the scenes!

    +
    tip

    Check out our Learn section, YouTube channel, and Blog to dive into how Waku works behind the scenes!

    What isn’t Waku?

    • Waku is not a blockchain but a network composed of protocols designed for Web3 communication, operating without the need for gas fees.
    • @@ -39,18 +39,6 @@
      tip

      Looking for what to build with Waku? Discover a collection of sample ideas and use cases for inspiration, curated by our community at: https://ideas.waku.org/ and Awesome Waku.

      Case studies

      -
      -

      Getting started

      -
      -

      Run a Waku node

      -

      Waku is a decentralised, permissionless system where anyone can run a node, use the network, and contribute to its support. We recommend following the Run Nwaku with Docker Compose guide and Waku Node Operator Cheatsheet to easily run a node.

      -
      -
      tip

      If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord.

      -

      Integrate using SDKs

      -

      Waku is implemented in multiple SDKs, allowing it to integrate with different languages and address various use cases efficiently.

      -
      DescriptionDocumentation
      @waku/sdkJavaScript/TypeScript SDK designed for browser environmentsJavaScript Waku SDK
      @waku/reactReact components and UI adapters designed for seamless integration with @waku/sdkBuild React DApps Using @waku/react
      -

      Other integrations

      -
      DescriptionDocumentation
      REST APIREST API interface provided by nwaku and go-waku to interact with the Waku NetworkWaku Node REST API Reference
      @waku/create-appStarter kit to bootstrap your next @waku/sdk project from various example templatesScaffold DApps Using @waku/create-app
      -
      tip

      Explore some example apps built using Waku at https://examples.waku.org/ and view a list of projects and workshops from previous hackathons at Awesome Waku.

    +
    \ No newline at end of file diff --git a/learn/concepts/content-topics/index.html b/learn/concepts/content-topics/index.html index d3c5f13..5dcfcae 100644 --- a/learn/concepts/content-topics/index.html +++ b/learn/concepts/content-topics/index.html @@ -4,9 +4,9 @@ Content Topics | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Content Topics

    Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Content Topics

    Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.

    Naming format

    Here is the recommended format for content topics:

    /{application-name}/{version}/{content-topic-name}/{encoding}

    @@ -45,6 +45,6 @@

    Creating buckets help in distributing traffic

    When an application uses a single content topic, all users using request/response protocols (Filter, Store) receive all its messages. For heavy traffic, developers can create buckets by hashing a unique identifier (e.g., recipient's ID, public key, or app domain topic) and adding its first byte to the content topic, like /my-app/0/a/proto.

    This approach divides traffic into multiple topics, reducing the messages users have to download. Developers can add more first bytes to the content topic over time to improve efficiency and privacy based on messages and user needs.

    -
    info

    The k value of k-anonymity equals the number of IDs for which the first character of the hash is "a". For example, using a single content topic in an application with 10,000 users results in k = 10,000. However, using the hash ID's first character, k reduces to 10,000 / 16 = 625.

    +
    info

    The k value of k-anonymity equals the number of IDs for which the first character of the hash is "a". For example, using a single content topic in an application with 10,000 users results in k = 10,000. However, using the hash ID's first character, k reduces to 10,000 / 16 = 625.

    \ No newline at end of file diff --git a/learn/concepts/discv5/index.html b/learn/concepts/discv5/index.html index e2f8cd0..917f7e4 100644 --- a/learn/concepts/discv5/index.html +++ b/learn/concepts/discv5/index.html @@ -4,9 +4,9 @@ Discv5 | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Discv5

    Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Discv5

    Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.

    Pros

    • Decentralised with random sampling from a global view.
    • @@ -41,6 +41,6 @@
    • Alice decodes ENRs and extracts Frank's, Gwen's and Harry's TCP and UDP connection details.
    • Alice selects to dial David, Frank and Gwen.
    • Alice dials David, Frank and Gwen over libp2p using TCP connection details from ENRs.
    • -
    +
    \ No newline at end of file diff --git a/learn/concepts/dns-discovery/index.html b/learn/concepts/dns-discovery/index.html index 812ae9c..dc65b79 100644 --- a/learn/concepts/dns-discovery/index.html +++ b/learn/concepts/dns-discovery/index.html @@ -4,9 +4,9 @@ DNS Discovery | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    DNS Discovery

    Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    DNS Discovery

    Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr.

    This bootstrapping method allows anyone to register and publish a domain name for the network, promoting increased decentralisation.

    Pros

      @@ -40,6 +40,6 @@
    • DNS lookup query to retrieve TXT data stored on DU...VQ.example.com domain, the first leaf of enrtree-branch.
    • enr record is returned.
    • Returned value is decoded, and peer connection details such as IP address and port are learned.
    • -
    +
    \ No newline at end of file diff --git a/learn/concepts/network-domains/index.html b/learn/concepts/network-domains/index.html index ba9d87e..7ca0d36 100644 --- a/learn/concepts/network-domains/index.html +++ b/learn/concepts/network-domains/index.html @@ -4,9 +4,9 @@ Network Domains | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Network Domains

    Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Network Domains

    Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.

    Discovery domain

    Peer discovery in Waku facilitates locating other nodes within the network. As a modular protocol, Waku incorporates various discovery mechanisms, such as Discv5 and Peer Exchange. These mechanisms allow developers to choose the most suitable option(s) for their specific use cases and user environments, including mobile phones, desktop browsers, servers, and more.

    Gossip domain

    @@ -41,6 +41,6 @@
  • Node D, upon receiving msg1, stores the message for future retrieval by other nodes and forwards it to Node C.
  • Node D also pushes msg1 to Node F, informing it about the arrival of a new message.
  • At a later time, Node E comes online and requests messages matching pubtopic1 and contentTopic1 from Node D. Node D responds with msg1 and potentially other messages that match the query.
  • -
    +
    \ No newline at end of file diff --git a/learn/concepts/peer-discovery/index.html b/learn/concepts/peer-discovery/index.html index d2b0bfd..814ef58 100644 --- a/learn/concepts/peer-discovery/index.html +++ b/learn/concepts/peer-discovery/index.html @@ -4,9 +4,9 @@ Peer Discovery | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Peer Discovery

    When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Peer Discovery

    When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping.

    Once a connection is established, the node must actively seek out additional peers to have:

    +
    \ No newline at end of file diff --git a/learn/concepts/peer-exchange/index.html b/learn/concepts/peer-exchange/index.html index b3b26d9..2aeb662 100644 --- a/learn/concepts/peer-exchange/index.html +++ b/learn/concepts/peer-exchange/index.html @@ -4,9 +4,9 @@ Peer Exchange | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Peer Exchange

    The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Peer Exchange

    The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network.

    info

    Peer Exchange enables requesting random peers from other network nodes without revealing information about their connectivity or neighbourhood.

    Pros

      @@ -40,6 +40,6 @@
    • Alice decodes ENRs and extracts Carol's and David's websocket multiaddrs.
    • Alice dials Carol and David.
    • Alice can now drop the connection with Bob (bootstrap node); Alice has 2 connections to the Waku Network.
    • -
    +
    \ No newline at end of file diff --git a/learn/concepts/protocols/index.html b/learn/concepts/protocols/index.html index 9abe7b5..2bb207a 100644 --- a/learn/concepts/protocols/index.html +++ b/learn/concepts/protocols/index.html @@ -4,9 +4,9 @@ Protocols | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Protocols

    Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Protocols

    Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:

    Relay

    Relay protocol employs a Pub/Sub architecture to facilitate the sending and receiving of messages among peers. It extends the libp2p GossipSub protocol to create a privacy-focused peer-to-peer messaging protocol that enables secure communication channels, encryption, and protection against censorship. It also scales the Waku Network to accommodate many nodes efficiently.

    RLN relay

    @@ -38,6 +38,6 @@
  • meta attribute for conveying additional details to various protocols for application-specific processing.
  • timestamp attribute signifying the time at which the message was generated by its sender.
  • ephemeral attribute specifying whether the network should not store the message.
  • -
    +
    \ No newline at end of file diff --git a/learn/concepts/static-peers/index.html b/learn/concepts/static-peers/index.html index d772e55..5e142b5 100644 --- a/learn/concepts/static-peers/index.html +++ b/learn/concepts/static-peers/index.html @@ -4,9 +4,9 @@ Static Peers | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Static Peers

    Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Static Peers

    Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node.

    Pros

    • Low latency.
    • @@ -31,6 +31,6 @@

      Overview

      -

      Alice establishes connections with Bob and Carol using their node details, which are predefined (hard-coded) into Alice's node.

    +

    Alice establishes connections with Bob and Carol using their node details, which are predefined (hard-coded) into Alice's node.

    \ No newline at end of file diff --git a/learn/concepts/transports/index.html b/learn/concepts/transports/index.html index 20b1130..46a29ee 100644 --- a/learn/concepts/transports/index.html +++ b/learn/concepts/transports/index.html @@ -4,9 +4,9 @@ Transports | Waku Documentation - - - + + + @@ -16,13 +16,13 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Transports

    Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Transports

    Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery.

    Waku is a transport-agnostic framework that allows developers to choose and support multiple protocols according to their requirements. For Waku nodes, the following transports are recommended:

    • TCP: By default, Waku nodes use TCP for communication. Service nodes should employ TCP for listening to and connecting with other nodes.
    • Secure WebSocket: In browser environments, secure WebSocket is used. Service nodes are encouraged to set up SSL certificates to enable incoming connections from browsers and serve them securely.
    • Other protocols like WebRTC, WebTransport, and QUIC have been researched and studied for potential integration.
    -
    info

    Waku ensures compatibility and improved communication capabilities by following these recommended transports.

    +
    info

    Waku ensures compatibility and improved communication capabilities by following these recommended transports.

    \ No newline at end of file diff --git a/learn/faq/index.html b/learn/faq/index.html index 73e7400..c08f79e 100644 --- a/learn/faq/index.html +++ b/learn/faq/index.html @@ -4,9 +4,9 @@ Waku FAQ | Waku Documentation - - - + + + @@ -16,13 +16,13 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Waku FAQ

    Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.

    -

    No, sending and receiving messages on Waku involves no gas fee.

    -

    Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to use custom protocols or Waku message payload encryption methods freely.

    -

    Waku's Store protocol is designed to temporarily store messages within the network. However, Waku does not guarantee the message's availability and recommends using Codex for long-term storage.

    -

    No, Waku is flexible and imposes no specific rules on identifiers.

    -

    Waku focuses on short, ephemeral, real-time messages, while IPFS focuses on large, long-term data storage. Although there's an overlap between the two technologies, Waku does not currently support large data for privacy reasons.

    -

    Rate Limiting Nullifier is a zero-knowledge (ZK) protocol enabling spam protection in a decentralized network while preserving privacy. Each message must be accompanied by a ZK proof, which Relay nodes verify to ensure the publishers do not send more messages than they are allowed. The ZK proof does not leak any private information about message publishers - it only proves they are members of a set of users allowed to publish a certain number of messages per given time frame.

    -

    Follow the README instructions at nwaku-compose.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Waku FAQ

    Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.

    +

    No, sending and receiving messages on Waku involves no gas fee.

    +

    Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to use custom protocols or Waku message payload encryption methods freely.

    +

    Waku's Store protocol is designed to temporarily store messages within the network. However, Waku does not guarantee the message's availability and recommends using Codex for long-term storage.

    +

    No, Waku is flexible and imposes no specific rules on identifiers.

    +

    Waku focuses on short, ephemeral, real-time messages, while IPFS focuses on large, long-term data storage. Although there's an overlap between the two technologies, Waku does not currently support large data for privacy reasons.

    +

    Rate Limiting Nullifier is a zero-knowledge (ZK) protocol enabling spam protection in a decentralized network while preserving privacy. Each message must be accompanied by a ZK proof, which Relay nodes verify to ensure the publishers do not send more messages than they are allowed. The ZK proof does not leak any private information about message publishers - it only proves they are members of a set of users allowed to publish a certain number of messages per given time frame.

    +

    Follow the README instructions at nwaku-compose.

    \ No newline at end of file diff --git a/learn/glossary/index.html b/learn/glossary/index.html index 0c55e87..ba3d471 100644 --- a/learn/glossary/index.html +++ b/learn/glossary/index.html @@ -4,9 +4,9 @@ Glossary | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Waku Docs Glossary

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Waku Docs Glossary

    Definitions and usage of the terminology used in the Waku ecosystem.

    Bootstrapping

    Bootstrapping is the initial entry point of a node to the Waku Network. Once connected, other peer discovery methods can be employed to locate other peers in the network.

    @@ -84,9 +84,9 @@

    Waku Message defines the structure of messages in the Waku Network, including the content topic, payload, and metadata for application-specific processing.

    Waku message payload encryption

    Waku Message Payload Encryption provides guidelines for implementing secure and private communication in the Waku Network. It covers encryption, decryption, and signing methods for message payloads, focusing on confidentiality, authenticity, integrity, and unlinkability.

    -

    Waku network

    +

    Waku network

    The Waku Network is an open-access, scalable peer-to-peer messaging network emphasizing privacy protection and accessibility to resource limited devices.

    Waku noise

    -

    Waku Noise is a specified way to use the Noise Protocol Framework to build protocols that enable secure key-exchange mechanisms for encrypted communication with confidentiality, authenticity, integrity, strong forward secrecy, and identity-hiding properties.

    +

    Waku Noise is a specified way to use the Noise Protocol Framework to build protocols that enable secure key-exchange mechanisms for encrypted communication with confidentiality, authenticity, integrity, strong forward secrecy, and identity-hiding properties.

    \ No newline at end of file diff --git a/learn/waku-network/index.html b/learn/index.html similarity index 79% rename from learn/waku-network/index.html rename to learn/index.html index 3c39bb7..7e6d26b 100644 --- a/learn/waku-network/index.html +++ b/learn/index.html @@ -3,10 +3,10 @@ -The Waku Network | Waku Documentation - - - +The Waku Network | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    The Waku Network

    The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include:

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    The Waku Network

    The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include:

    1. DoS/spam protection with privacy-preserving Rate-Limiting Nullifiers.
    2. Scalability by sharding traffic into 8 pubsub topics.
    3. @@ -36,7 +36,7 @@
    4. Wallet with Sepolia Ethereum (less than 0.1 Sepolia ETH). Have a look at the Create a Sepolia Ethereum Wallet and Obtain Sepolia Ethereum from Faucet guides to get a Sepolia wallet and fund it with some Sepolia Ethereum. This wallet is required to register RLN membership, which is essential for publishing on the network.

    Running a Waku network node

    -

    Have a look at the Run Nwaku with Docker Compose guide for instructions on running a nwaku node in the Waku Network. Use the Sepolia node and wallet you obtained above.

    -
    info

    The public Waku Network replaces the previous experimental shared routing layer based on a default pubsub topic (/waku/2/default-waku/proto). If your project currently uses this or any other shared pubsub topics, we encourage you to migrate to the public Waku Network with built-in DoS protection, scalability, and reasonable bandwidth usage.

    +

    Have a look at the Run Nwaku with Docker Compose guide for instructions on running a nwaku node in the Waku Network. Use the Sepolia node and wallet you obtained above.

    +
    info

    The public Waku Network replaces the previous experimental shared routing layer based on a default pubsub topic (/waku/2/default-waku/proto). If your project currently uses this or any other shared pubsub topics, we encourage you to migrate to the public Waku Network with built-in DoS protection, scalability, and reasonable bandwidth usage.

    \ No newline at end of file diff --git a/research/benchmarks/postgres-adoption/index.html b/learn/research/benchmarks/postgres-adoption/index.html similarity index 81% rename from research/benchmarks/postgres-adoption/index.html rename to learn/research/benchmarks/postgres-adoption/index.html index 95e0f9b..673495e 100644 --- a/research/benchmarks/postgres-adoption/index.html +++ b/learn/research/benchmarks/postgres-adoption/index.html @@ -3,10 +3,10 @@ -PostgreSQL | Waku Documentation - - - +PostgreSQL | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    PostgreSQL

    Introduction

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    PostgreSQL

    Introduction

    The Nim Waku Node, nwaku, has the capability of archiving messages until a certain limit (e.g. 30 days) so that other nodes can synchronize their message history throughout the Store protocol.

    The nwaku originally used SQLite to archive messages but this has an impact on the node. Nwaku is single-threaded and therefore, any SQLite operation impacts the performance of other protocols, like Relay.

    Therefore, the Postgres adoption is needed to enhance that.

    @@ -151,6 +151,6 @@ The following diagram shows the scenery used for such analysis.

    This case is similar to 2. but stressing more the database.
    Insert time distribution Postgres
    Query time distribution Postgres
    -
    +
    \ No newline at end of file diff --git a/research/benchmarks/test-results-summary/index.html b/learn/research/benchmarks/test-results-summary/index.html similarity index 75% rename from research/benchmarks/test-results-summary/index.html rename to learn/research/benchmarks/test-results-summary/index.html index 33f0e6e..6094f1a 100644 --- a/research/benchmarks/test-results-summary/index.html +++ b/learn/research/benchmarks/test-results-summary/index.html @@ -3,10 +3,10 @@ -Performance Benchmarks and Test Reports | Waku Documentation - - - +Performance Benchmarks and Test Reports | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Performance Benchmarks and Test Reports

    Introduction

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Performance Benchmarks and Test Reports

    Introduction

    This page summarises key performance metrics for nwaku and provides links to detailed test reports.

    TL;DR

    @@ -72,6 +72,6 @@ This involves deploying RCs to status.staging fleet for validation

    The Waku Research team conducts a variety of benchmarking, performance testing, proof-of-concept validations and debugging efforts.
    They also maintain a Waku simulator designed for small-scale, single-purpose, on-demand testing.

    Test Reports: Waku Research Reports

    -

    Waku Simulator: Waku Simulator Book

    +

    Waku Simulator: Waku Simulator Book

    \ No newline at end of file diff --git a/learn/research/index.html b/learn/research/index.html index 7b62f69..0309b7a 100644 --- a/learn/research/index.html +++ b/learn/research/index.html @@ -3,10 +3,10 @@ -Research | Waku Documentation - - - +Research | Waku Documentation + + + @@ -16,14 +16,26 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Research

    The following features are currently experimental and under research and initial implementation:

    -

    Economic spam resistance

    -

    We aim to enable an incentivised spam protection technique to enhance Relay by using Rate Limit Nullifiers (RLN). In this advanced method, peers are limited to a certain messaging rate per epoch, and an immediate financial penalty is enforced for spammers who break this rate. You can find more details in the RLN Relay blog post.

    -

    We have prepared a PoC implementation of this method in JS: https://examples.waku.org/rln-js/

    -

    Prevention of denial of service (DoS) and node incentivisation

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Research

    Experimental features

    +

    The following features are currently experimental and under research and initial implementation:

    +

    Economic spam resistance

    +

    We aim to enable an incentivised spam protection technique to enhance Relay by using Rate Limit Nullifiers (RLN). +In this advanced method, peers are limited to a certain messaging rate per epoch, and an immediate financial penalty is enforced for spammers who break this rate. You can find more details in the RLN Relay blog post.

    +

    Prevention of denial of service (DoS) and node incentivisation

    Denial of service signifies the case where an adversarial peer exhausts another node's service capacity (e.g., by making a large number of requests) and makes it unavailable to the rest of the system. RnD on DoS attack mitigation can be tracked from here: https://github.com/vacp2p/research/issues/148.

    In a nutshell, peers have to pay for the service they obtain from each other. In addition to incentivising the service provider, accounting also makes DoS attacks costly for malicious peers. The accounting model can be used in Store and Filter to protect against DoS attacks.

    Additionally, along with RLN, this gives node operators who provide a useful service to the network an incentive to perform that service. Read more here: https://vac.dev/building-privacy-protecting-infrastructure

    -

    You can also read more about the ongoing challenges the Waku team is working on here: https://github.com/waku-org/research

    +

    You can also read more about the ongoing challenges the Waku team is working on here: https://github.com/waku-org/research

    +

    Research resources

    +

    Research and Studies: Protocol simulations and theoretical analysis to support the design of Waku protocols. The protocol definitions are on the Waku RFCs website.

    +

    Benchmarks: Results of implementations and engineering-related benchmarks for Waku clients.

    +

    Research papers

    +

    Waku also has the following published research papers:

    +
    \ No newline at end of file diff --git a/research/research-and-studies/capped-bandwidth/index.html b/learn/research/research-and-studies/capped-bandwidth/index.html similarity index 75% rename from research/research-and-studies/capped-bandwidth/index.html rename to learn/research/research-and-studies/capped-bandwidth/index.html index 1e8abfd..da6af6b 100644 --- a/research/research-and-studies/capped-bandwidth/index.html +++ b/learn/research/research-and-studies/capped-bandwidth/index.html @@ -3,10 +3,10 @@ -Capped Bandwidth in Waku | Waku Documentation - - - +Capped Bandwidth in Waku | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Capped Bandwidth in Waku

    This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Capped Bandwidth in Waku

    This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.

    Problem

    First of all, let's begin with the terminology. We have talked in the past about "predictable" bandwidth, but a better name would be "capped" bandwidth. This is because it is totally fine that the waku traffic is not predictable, as long as it is capped. And it has to be capped because otherwise, no one will be able to run a node.

    Since we aim that everyone can run a full waku node (at least subscribed to a single shard) it is of paramount importance that the bandwidth requirements (up/down) are i) reasonable to run with a residential internet connection in every country and ii) limited to an upper value, aka capped. If the required bandwidth to stay up to date with a topic is higher than what the node has available, then it will start losing messages and won't be able to stay up to date with the topic messages. And not to mention the problems this will cause to other services and applications being used by the user.

    @@ -56,6 +56,6 @@
    • 33 msg/second per shard.
    • 0.75 MBps per shard.
    • -
    +
    \ No newline at end of file diff --git a/research/research-and-studies/incentivisation/index.html b/learn/research/research-and-studies/incentivisation/index.html similarity index 78% rename from research/research-and-studies/incentivisation/index.html rename to learn/research/research-and-studies/incentivisation/index.html index ced74bf..e7d35a8 100644 --- a/research/research-and-studies/incentivisation/index.html +++ b/learn/research/research-and-studies/incentivisation/index.html @@ -3,10 +3,10 @@ -Incentivisation | Waku Documentation - - - +Incentivisation | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Waku is a family of decentralised communication protocols. The Waku Network (TWN) consists of independent nodes running Waku protocols. TWN needs incentivisation (shortened to i13n) to ensure proper node behaviour.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Waku is a family of decentralised communication protocols. The Waku Network (TWN) consists of independent nodes running Waku protocols. TWN needs incentivisation (shortened to i13n) to ensure proper node behaviour.

    The goal of this document is to outline and contextualize our approach to TWN i13n. After providing an overview of Waku and relevant prior work, we focus on Waku Store - a client-server protocol for querying historical messages. We introduce a minimal viable addition to Store to enable i13n, and list research directions for future work.

    Incentivisation in decentralised networks

    Incentivisation tools

    @@ -178,6 +178,6 @@
  • Analyze decentralised storage protocols and their relevance e.g. as back-end storage for Store servers - see https://github.com/waku-org/research/issues/34
  • Analyze the role of message senders, in particular, whether they should pay for sending non-ephemeral messages - see https://github.com/waku-org/research/issues/32
  • Generalise incentivisation protocol to other Waku light protocols (Lightpush and Filter) - see https://github.com/waku-org/research/issues/67.
  • -
    +
    \ No newline at end of file diff --git a/research/research-and-studies/maximum-bandwidth/index.html b/learn/research/research-and-studies/maximum-bandwidth/index.html similarity index 75% rename from research/research-and-studies/maximum-bandwidth/index.html rename to learn/research/research-and-studies/maximum-bandwidth/index.html index c33072b..1b0644b 100644 --- a/research/research-and-studies/maximum-bandwidth/index.html +++ b/learn/research/research-and-studies/maximum-bandwidth/index.html @@ -3,10 +3,10 @@ -Maximum Bandwidth for Global Adoption | Waku Documentation - - - +Maximum Bandwidth for Global Adoption | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Maximum Bandwidth for Global Adoption

    TLDR: This issue aims to set the maximum bandwidth in x Mbps that each waku shard should consume so that the maximum amount of people can run a full waku node. It is up to https://github.com/waku-org/research/issues/22 to specify how this maximum will be enforced.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Maximum Bandwidth for Global Adoption

    TLDR: This issue aims to set the maximum bandwidth in x Mbps that each waku shard should consume so that the maximum amount of people can run a full waku node. It is up to https://github.com/waku-org/research/issues/22 to specify how this maximum will be enforced.

    Conclusion: Limit to 10 Mbps each waku shard.

    Introduction

    Waku is designed in a way that everyone should be able to run a full node on an average laptop with a residential Internet connection, at least in one shard. This will enable true decentralization and give power to the users, since they won't need to rely on third parties to send/receive messages. Professional node operators running in data centers, can of course contribute to multiple shards, but we should keep the bandwidth/hardware requirements of single shard rather low.

    @@ -73,6 +73,6 @@

    Conclusion: Limit to 10 Mbps each waku shard. How? Not trivial, see https://github.com/waku-org/research/issues/22#issuecomment-1727795042

    -

    Note: This number is not set in stone and is subject to modifications, but it will most likely stay in the same order of magnitude if changed.

    +

    Note: This number is not set in stone and is subject to modifications, but it will most likely stay in the same order of magnitude if changed.

    \ No newline at end of file diff --git a/research/research-and-studies/message-propagation/index.html b/learn/research/research-and-studies/message-propagation/index.html similarity index 75% rename from research/research-and-studies/message-propagation/index.html rename to learn/research/research-and-studies/message-propagation/index.html index d2bda64..d7fad71 100644 --- a/research/research-and-studies/message-propagation/index.html +++ b/learn/research/research-and-studies/message-propagation/index.html @@ -3,10 +3,10 @@ -Message Propagation Times With Waku-RLN | Waku Documentation - - - +Message Propagation Times With Waku-RLN | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Message Propagation Times With Waku-RLN

    TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it's affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Message Propagation Times With Waku-RLN

    TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it's affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.

    Introduction

    Waku uses relay as a routing protocol, which is an adaptation of gossipsub. It routes messages following a publisher/subscriber architecture, where nodes can publish messages or subscribe to topics. If message m is published to topic t, all i nodes n_1...n_i subscribed to t will get m. The relay protocol ensures that every node gets the messages of the topics it is subscribed to.

    However, since relay works in a decentralized manner, all nodes contribute to the gossiping of a message, until it has successfully reached all the interested nodes (subscribed to it). This means that a message can travel multiple hops until it reaches all nodes. The amount of hops determines the message propagation time, which is measured as the time difference of when the node published the message and when another node received.

    @@ -67,6 +67,6 @@
    • Current waku D values (average of 6 ranging from 4 to 12) have a huge impact on the bandwidth that a node consumes. Are we willing to lower D in order to reduce bandwidth but increase message propagation times?
    • Since shadow doesn't take CPU time into account, it's currently simulated for rln, which should be the biggest bottleneck. Once shadow has this feature times would be more accurate.
    • -
    +
    \ No newline at end of file diff --git a/research/research-and-studies/rln-key-benchmarks/index.html b/learn/research/research-and-studies/rln-key-benchmarks/index.html similarity index 77% rename from research/research-and-studies/rln-key-benchmarks/index.html rename to learn/research/research-and-studies/rln-key-benchmarks/index.html index 76d48d9..df3ed81 100644 --- a/research/research-and-studies/rln-key-benchmarks/index.html +++ b/learn/research/research-and-studies/rln-key-benchmarks/index.html @@ -3,10 +3,10 @@ -RLN Key Benchmarks | Waku Documentation - - - +RLN Key Benchmarks | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    RLN Key Benchmarks

    Introduction

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    RLN Key Benchmarks

    Introduction

    Since RLN has been chosen as the spamming protection mechanism for waku, we must understand the practical implications of using it. This issue explains the main differences between relay and rln-relay and gives some benchmarks after running simulations using waku-simulator, in a network with the following characteristics:

    • 100 nwaku nodes, each one with a valid rln membership and publishing a message every 10 seconds to a common topic.
    • @@ -68,6 +68,6 @@
      • Couldn't capture cpu metrics
      • Minor differences in messages per seconds is due to injection technique, nothing related to rln itself.
      • -
    +
    \ No newline at end of file diff --git a/learn/security-features/index.html b/learn/security-features/index.html index 9d0d83a..665b1ab 100644 --- a/learn/security-features/index.html +++ b/learn/security-features/index.html @@ -4,9 +4,9 @@ Security Features | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Security Features

    Waku's protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol's security guarantees and limitations.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Security Features

    Waku's protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol's security guarantees and limitations.

    Some of Waku's security features include the following:

    Pseudonymity

    Waku ensures pseudonymity across its protocol layers, using libp2p PeerID as identifiers instead of disclosing true identities. However, it is important to note that pseudonymity does not provide complete anonymity. Actions performed under the same pseudonym (PeerID) can be linked, leading to the potential re-identification of the actual actor.

    @@ -32,6 +32,6 @@

    Data confidentiality, integrity, and authenticity

    Confidentiality in Waku is ensured through data encryption, while integrity and authenticity are achieved through digital signatures. These security measures are available in Waku Message (version 1) and Noise protocols, which offer payload encryption and encrypted signatures. Noise protocols also facilitate secure channel negotiation within the Waku Network.

    Security considerations

    -

    In protocols like Store and Filter, where direct connections are required for the designated service, anonymity or unlinkability is not guaranteed. This is because nodes use their PeerID to identify each other during direct connections, making the service obtained in these protocols linkable to the beneficiary's PeerID, considered Personally Identifiable Information (PII). In Store, the queried node can link the querying node's PeerID to the topics being queried. Similarly, in Filter, a node can link the PeerID of a light node to its content filter.

    +

    In protocols like Store and Filter, where direct connections are required for the designated service, anonymity or unlinkability is not guaranteed. This is because nodes use their PeerID to identify each other during direct connections, making the service obtained in these protocols linkable to the beneficiary's PeerID, considered Personally Identifiable Information (PII). In Store, the queried node can link the querying node's PeerID to the topics being queried. Similarly, in Filter, a node can link the PeerID of a light node to its content filter.

    \ No newline at end of file diff --git a/learn/waku-vs-libp2p/index.html b/learn/waku-vs-libp2p/index.html index 7c1e253..f38f204 100644 --- a/learn/waku-vs-libp2p/index.html +++ b/learn/waku-vs-libp2p/index.html @@ -4,9 +4,9 @@ Comparing Waku and libp2p | Waku Documentation - - - + + + @@ -16,13 +16,13 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Comparing Waku and libp2p

    Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Comparing Waku and libp2p

    Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.

    Waku as a service network

    -

    Waku intends to incentivise mechanisms to run nodes, but it is not part of libp2p's scope. Additionally, users or developers do not have to deploy their infrastructure as a prerequisite to use Waku. It is a service network. However, you are encouraged to run a node to support and decentralise the network.

    +

    Waku intends to incentivise mechanisms to run nodes, but it is not part of libp2p's scope. Additionally, users or developers do not have to deploy their infrastructure as a prerequisite to use Waku. It is a service network. However, you are encouraged to run a node to support and decentralise the network.

    Waku as a turnkey solution

    Waku includes various protocols covering the following domains: privacy preservation, censorship resistance, and platform agnosticism, allowing it to run on any platform or environment.

    Waku provides out-of-the-box protocols to enable mostly offline/resource-limited devices, Store/Light Push/Filter caters to those use cases.

    Economic spam protection

    -

    libp2p does not have strong spam protection guarantees, RLN Relay is a protocol being developed by the Waku team towards this goal.

    +

    libp2p does not have strong spam protection guarantees, RLN Relay is a protocol being developed by the Waku team towards this goal.

    \ No newline at end of file diff --git a/migrations/js-waku/migration_v0.026_0.027/index.html b/migrations/js-waku/migration_v0.026_0.027/index.html deleted file mode 100644 index 678d124..0000000 --- a/migrations/js-waku/migration_v0.026_0.027/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - -Migrating to Waku v0.027 | Waku Documentation - - - - - - - - -

    Migrating to Waku v0.027

    -

    A migration guide for refactoring your application code from Waku v0.026 to v0.027.

    -

    Table of Contents

    - -

    Network Configuration

    -

    The way to configure network settings for a Waku node has been simplified. The new NetworkConfig type only allows for Static Sharding or Auto Sharding.

    -

    Default Network Configuration

    -

    If no network configuration is provided when creating a Light Node, The Waku Network configuration will be used by default.

    -

    Before

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode();
    // This would use the default pubsub topic, that was, `/waku/2/default-waku/proto`
    -

    After

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode();
    // This will now use The Waku Network configuration by default:
    // { clusterId: 1, shards: [0,1,2,3,4,5,6,7] }
    -

    Static Sharding

    -

    Before

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    shardInfo: {
    clusterId: 1,
    shards: [0, 1, 2, 3]
    }
    });
    -

    After

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    networkConfig: {
    clusterId: 1,
    shards: [0, 1, 2, 3]
    }
    });
    -

    Auto Sharding

    -

    Before

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    shardInfo: {
    clusterId: 1,
    contentTopics: ["/my-app/1/notifications/proto"]
    }
    });
    -

    After

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    networkConfig: {
    clusterId: 1,
    contentTopics: ["/my-app/1/notifications/proto"]
    }
    });
    -

    Pubsub Topic Configuration

    -

    Named pubsub topics are no longer supported. You must use either Static Sharding or Auto Sharding to configure pubsub topics.

    -

    Before

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    pubsubTopics: ["/waku/2/default-waku/proto"]
    });
    -

    After

    -

    Use Static Sharding:

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    networkConfig: {
    clusterId: 1,
    shards: [0, 1, 2, 3, 4, 5, 6, 7]
    }
    });
    -

    Or use Auto Sharding:

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    networkConfig: {
    clusterId: 1,
    contentTopics: ["/your-app/1/default/proto"]
    }
    });
    -

    Removed APIs

    -

    The following APIs have been removed:

    -
      -
    • ApplicationInfo type: Use string for application and version in NetworkConfig instead.
    • -
    • shardInfo option in createLightNode: Use networkConfig instead.
    • -
    • pubsubTopics option in createLightNode: Use networkConfig with Static Sharding or Auto Sharding instead.
    • -
    -

    If you were using ApplicationInfo before, you should now use ContentTopicInfo (Auto Sharding) and specify your application and version in the content topic string.

    -

    Before

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    shardInfo: {
    clusterId: 1,
    application: "my-app",
    version: "1"
    }
    });
    -

    After

    -
    import { createLightNode } from "@waku/sdk";

    const waku = await createLightNode({
    networkConfig: {
    clusterId: 1,
    contentTopics: ["/my-app/1/default/proto"]
    }
    });
    -

    Type Changes

    -
      -
    • ShardingParams has been removed. Use NetworkConfig instead.
    • -
    • NetworkConfig is now defined as StaticSharding | AutoSharding.
    • -
    • StaticSharding is equivalent to the previous ShardInfo.
    • -
    • AutoSharding is equivalent to the previous ContentTopicInfo.
    • -
    -

    Internal/Private Utility Function Changes

    -

    Several utility functions have been updated or added:

    -
      -
    • ensureShardingConfigured has been removed. Use derivePubsubTopicsFromNetworkConfig instead.
    • -
    • New function derivePubsubTopicsFromNetworkConfig has been added to derive pubsub topics from the network configuration.
    • -
    • shardInfoToPubsubTopics now accepts Partial<NetworkConfig> instead of Partial<ShardingParams>.
    • -
    • New function pubsubTopicsToShardInfo has been added to convert pubsub topics to a ShardInfo object.
    • -
    -

    If you were using any of these utility functions directly, you'll need to update your code accordingly.

    -

    Before

    -
    import { ensureShardingConfigured } from "@waku/utils";

    const result = ensureShardingConfigured(shardInfo);
    -

    After

    -
    import { derivePubsubTopicsFromNetworkConfig } from "@waku/utils";

    const pubsubTopics = derivePubsubTopicsFromNetworkConfig(networkConfig);
    -

    Note: The default NetworkConfig for The Waku Network is now { clusterId: 1, shards: [0,1,2,3,4,5,6,7] }.

    - - \ No newline at end of file diff --git a/privacy-policy/index.html b/privacy-policy/index.html index 743dd22..1a47126 100644 --- a/privacy-policy/index.html +++ b/privacy-policy/index.html @@ -4,9 +4,9 @@ Privacy Policy | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Privacy Policy

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Privacy Policy

    Last updated: 9 February 2024

    This Privacy Policy is intended to inform users of our approach to privacy in respect of this website ("Website"). In this regard, if you are visiting our Website, this Privacy Policy applies to you.

    1) Who we are

    @@ -63,6 +63,6 @@

    We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.

    9) Contact information

    To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology.

    -

    This document is licensed under CC-BY-SA.

    +

    This document is licensed under CC-BY-SA.

    \ No newline at end of file diff --git a/rules-of-engagement/index.html b/rules-of-engagement/index.html index c8b6ca6..e5ba793 100644 --- a/rules-of-engagement/index.html +++ b/rules-of-engagement/index.html @@ -4,9 +4,9 @@ Rules of Engagement | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Rules of Engagement

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Rules of Engagement

    Waku is a nascent technology and the Waku community is still growing. Hence, the Waku team is keen to work closely with projects to help leverage Waku technology to drive the success of their own applications.

    We describe below the expected flow for working with Waku and some rules of engagement to set expectations for project teams interacting with the Waku team.

    1. Initial discussion

    @@ -45,6 +45,6 @@ If the project is open-source, then the Waku team might try to further investiga

    5. Ongoing relation

    Once the project application is live, the Waku team is keen to maintain regular contact. This can include discussion around performance, bugs found by users, etc.

    The Waku team is keen to regularly present new and upcoming development to project team, highlight items that are particularly relevant.

    -

    If a project wishes to take onboard any new Waku protocol, or decide to extend their product with a new functionality using Waku, the circle can resume from step 1.

    +

    If a project wishes to take onboard any new Waku protocol, or decide to extend their product with a new functionality using Waku, the circle can resume from step 1.

    \ No newline at end of file diff --git a/guides/nwaku/build-source/index.html b/run-node/build-source/index.html similarity index 80% rename from guides/nwaku/build-source/index.html rename to run-node/build-source/index.html index aa0c60b..728c229 100644 --- a/guides/nwaku/build-source/index.html +++ b/run-node/build-source/index.html @@ -3,10 +3,10 @@ -Build Nwaku from Source | Waku Documentation - - - +Build Nwaku from Source | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Build Nwaku from Source

    This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Build Nwaku from Source

    This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead.

    info
    +
    Congratulations!

    You have successfully built the nwaku binary from the source code. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.

    \ No newline at end of file diff --git a/guides/nwaku/config-methods/index.html b/run-node/config-methods/index.html similarity index 80% rename from guides/nwaku/config-methods/index.html rename to run-node/config-methods/index.html index 6ee07cc..ad7b5ad 100644 --- a/guides/nwaku/config-methods/index.html +++ b/run-node/config-methods/index.html @@ -3,10 +3,10 @@ -Node Configuration Methods | Waku Documentation - - - +Node Configuration Methods | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Node Configuration Methods

    Waku nodes can be configured using a combination of the following methods:

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Node Configuration Methods

    Waku nodes can be configured using a combination of the following methods:

    1. Command line options and flags
    2. Environment variables
    3. @@ -25,7 +25,7 @@
    info

    Take note of the precedence order: Each configuration method overrides the one below it (e.g., command line options override environment variables and configuration files).

    Command line options

    -

    Node configuration is primarily done using command line options, which override other methods. Specify configuration options by providing them in this format after the binary name:

    +

    Node configuration is primarily done using command line options, which override other methods. Specify configuration options by providing them in this format after the binary name:

    ./build/wakunode2 --tcp-port=65000

    When running your node with Docker, provide the command line options after the image name in this format:

    docker run wakuorg/nwaku --tcp-port=65000
    @@ -39,7 +39,7 @@

    Configuration files

    Nodes can be configured using a configuration file following the TOML format:

    TOML Config File
    log-level = "DEBUG"
    tcp-port = 65000
    topic = ["/waku/2/default-waku/proto"]
    metrics-logging = false
    -

    The config-file configuration option lets you specify the configuration file path:

    +

    The config-file configuration option lets you specify the configuration file path:

    ./build/wakunode2 --config-file=[TOML CONFIGURATION FILE]

    You can also specify the configuration file via environment variables:

    # Using environment variables
    WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE] ./build/wakunode2

    # Using environment variables with Docker
    docker run -e "WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE]" wakuorg/nwaku
    @@ -53,8 +53,8 @@
  • Enable the Relay protocol for relaying messages.
  • Enable the Store protocol as a client, allowing it to query peers for historical messages but not store any message itself.
  • -

    To see the default values of all configuration options, run wakunode2 --help:

    +

    To see the default values of all configuration options, run wakunode2 --help:

    ./build/wakunode2 --help
    -
    tip

    To explore the available node configuration options, have a look at the Node Configuration Options guide.

    +
    tip

    To explore the available node configuration options, have a look at the Node Configuration Options guide.

    \ No newline at end of file diff --git a/guides/nwaku/config-options/index.html b/run-node/config-options/index.html similarity index 81% rename from guides/nwaku/config-options/index.html rename to run-node/config-options/index.html index f21a44f..a8a2d1a 100644 --- a/guides/nwaku/config-options/index.html +++ b/run-node/config-options/index.html @@ -3,10 +3,10 @@ -Node Configuration Options | Waku Documentation - - - +Node Configuration Options | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Node Configuration Options

    Here are the available node configuration options, along with their default values and descriptions:

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Node Configuration Options

    Here are the available node configuration options, along with their default values and descriptions:

    Application-level config

    NameDefault ValueDescription
    config-fileLoads configuration from a TOML file (cmd-line parameters take precedence)
    protected-shardnewSeq[ProtectedShard](0)Shards and its public keys to be used for message validation, shard:pubkey. Argument may be repeated

    Log config

    @@ -52,6 +52,6 @@
    NameDefault ValueDescription
    websocket-supportfalseEnable websocket: true|false
    websocket-port8000WebSocket listening port
    websocket-secure-supportfalseEnable secure websocket: true|false
    websocket-secure-key-pathSecure websocket key path: '/path/to/key.txt'
    websocket-secure-cert-pathSecure websocket Certificate path: '/path/to/cert.txt'

    Non-relay, request-response protocol DOS protection configuration

    NameDefault ValueDescription
    rate-limitThis is a repeatable option. Each can describe a specific rate limit configuration for a particular protocol.
    Formatted as:<protocol>:volume/period<time-unit>
    - if protocol is not given, settings will be taken as default for un-set protocols. Ex: 80/2s
    -Supported protocols are: lightpush|filter|px|store|storev2|storev3
    -volume must be an integer value, representing number of requests over the period of time allowed.
    -period<time-unit> must be an integer with defined unit as one of h|m|s|ms
    - storev2 and storev3 takes precedence over store which can easy set both store protocols at once.
    - In case of multiple set of the same protocol limit, last one will take place.
    - if config is not set, - which is the default - means unlimited requests are allowed.
    -filter has a bit different approach. It has a default setting applied if not overridden. Rate limit setting for filter will be applied per subscriber-peers, not globally - it must be considered when changing the setting.

    Examples:
    --rate-limit="100/1s" - default for all protocols if not set otherwise.
    --rate-limit="lightpush:0/0s" - lightpush protocol will not be rate-limited.
    --rate-limit="store:130/1500ms" - both store-v3 and store-v2 will apply 130 request per each 1500ms separately.
    --rate-limit="px:10/1h" PeerExchange will serve only 10 requests every hour.
    --rate-limit="filter:8/5m" - will allow 8 subs/unsubs/ping requests for each subscriber within every 5 min.
    -
    tip

    To configure your node using the provided configuration options, have a look at the Node Configuration Methods guide.

    +
    tip

    To configure your node using the provided configuration options, have a look at the Node Configuration Methods guide.

    \ No newline at end of file diff --git a/guides/nwaku/configure-discovery/index.html b/run-node/configure-discovery/index.html similarity index 81% rename from guides/nwaku/configure-discovery/index.html rename to run-node/configure-discovery/index.html index d9e7fee..4767994 100644 --- a/guides/nwaku/configure-discovery/index.html +++ b/run-node/configure-discovery/index.html @@ -3,10 +3,10 @@ -Configure Peer Discovery | Waku Documentation - - - +Configure Peer Discovery | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Configure Peer Discovery

    This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Configure Peer Discovery

    This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network.

    info

    You can configure a nwaku node to use multiple peer discovery mechanisms simultaneously.

    Configure static peers

    You can provide static peers to a nwaku node during startup using the staticnode configuration option. To connect to multiple peers on startup, repeat the staticnode option:

    @@ -54,6 +54,6 @@

    For example, consider two nwaku nodes configured as a server (peer exchange responder node) and client (node using peer exchange) on the same local host (IP: 0.0.0.0):

    Server: Nwaku Node with Peer Exchange Enabled
    ./build/wakunode2 --peer-exchange=true
    Client: Nwaku Node Bootstrapping with Peer Exchange
    ./build/wakunode2 \
    --tcp-port=30305 \
    --ports-shift=1 \
    --peer-exchange-node=/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmLCe6zVqCS6KMqqRbbhyoJjfYZGr1Q3thTSbyKzibQkFR
    -
    info

    nwaku provides a relay-peer-exchange option via libp2p for peer exchange, allowing network growth through neighbouring nodes. However, this feature can compromise security and network robustness, so we recommend only using it in high-trust environments.

    +
    info

    nwaku provides a relay-peer-exchange option via libp2p for peer exchange, allowing network growth through neighbouring nodes. However, this feature can compromise security and network robustness, so we recommend only using it in high-trust environments.

    \ No newline at end of file diff --git a/guides/nwaku/configure-nwaku/index.html b/run-node/configure-nwaku/index.html similarity index 82% rename from guides/nwaku/configure-nwaku/index.html rename to run-node/configure-nwaku/index.html index c8050dc..97e8c7d 100644 --- a/guides/nwaku/configure-nwaku/index.html +++ b/run-node/configure-nwaku/index.html @@ -3,10 +3,10 @@ -Node Configuration Examples | Waku Documentation - - - +Node Configuration Examples | Waku Documentation + + + @@ -16,14 +16,14 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Node Configuration Examples

    This guide provides detailed steps to configure a nwaku node for different use cases.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Node Configuration Examples

    This guide provides detailed steps to configure a nwaku node for different use cases.

    Connect to other peers

    To join the Waku Network, nodes must bootstrap for an entry point before discovering more peers. Nwaku provides multiple peer discovery mechanisms:

    Configure a domain name

    You can set up an IPv4 DNS domain name that resolves to the public IPv4 address of a node using the dns4-domain-name option. This allows the node's publicly announced multiaddrs to use the /dns4 scheme.

    @@ -74,7 +74,7 @@

    You can use the output 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 as a Node Key for nwaku:

    ./build/wakunode2 --nodekey=286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8

    Configure WebSocket transport

    -

    WebSocket is the only transport method browser nodes support using @waku/sdk. To enable WebSocket in nwaku to serve browser peers, use the following configuration options:

    +

    WebSocket is the only transport method browser nodes support using @waku/sdk. To enable WebSocket in nwaku to serve browser peers, use the following configuration options:

    • websocket-support: Enables WebSocket (ws) on the node (disabled by default).
    • websocket-port (optional): WebSocket listening port. If you omit this option, it will default to 8000.
    • @@ -121,6 +121,6 @@

      Run nwaku behind a reverse proxy

      When using a reverse proxy server for SSL/TLS encryption, you only want to announce the proxy server's IP or domain. Nwaku provides the ext-multiaddr-only and ext-multiaddr options for specifying published multiaddr:

      ./build/wakunode2 \
      --ext-multiaddr-only=true \
      --ext-multiaddr=[MULTIADDR TO PUBLISH]
      -
      info

      The ext-multiaddr-only option takes precedence over the nat and dns4-domain-name options, using the values provided by the ext-multiaddr option instead.

    +
    info

    The ext-multiaddr-only option takes precedence over the nat and dns4-domain-name options, using the values provided by the ext-multiaddr option instead.

    \ No newline at end of file diff --git a/guides/nwaku/faq/index.html b/run-node/faq/index.html similarity index 73% rename from guides/nwaku/faq/index.html rename to run-node/faq/index.html index 2399bad..953cd86 100644 --- a/guides/nwaku/faq/index.html +++ b/run-node/faq/index.html @@ -3,10 +3,10 @@ -Nwaku FAQ | Waku Documentation - - - +Nwaku FAQ | Waku Documentation + + + @@ -16,13 +16,13 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Nwaku FAQ

    Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.

    -

    We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.

    -

    You can interact with a running nwaku node using the REST API interface or the JavaScript Waku SDK.

    -

    To check your node logs in Docker, use the command: "docker-compose logs -f nwaku"

    -

    You can configure Nwaku nodes using command line options and flags, environment variables, and TOML configuration files. Check out the Node Configuration Methods guide to understand their usage and priority.

    -

    Check out the Node Configuration Options guide for available node configuration options, their default values and descriptions. For examples of common configuration use cases, visit the Node Configuration Examples guide.

    -

    You can configure peer discovery for nwaku nodes through options like Static Peers, DNS Discovery, DiscV5, and Peer Exchange. Check out the Configure Peer Discovery guide for setting up your node.

    -

    The node listening and ENR addresses can be found through the node's logs and REST API. Check out the Find the node addresses section to understand how to locate your node addresses.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Nwaku FAQ

    Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.

    +

    We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.

    +

    You can interact with a running nwaku node using the REST API interface or the JavaScript Waku SDK.

    +

    To check your node logs in Docker, use the command: "docker-compose logs -f nwaku"

    +

    You can configure Nwaku nodes using command line options and flags, environment variables, and TOML configuration files. Check out the Node Configuration Methods guide to understand their usage and priority.

    +

    Check out the Node Configuration Options guide for available node configuration options, their default values and descriptions. For examples of common configuration use cases, visit the Node Configuration Examples guide.

    +

    You can configure peer discovery for nwaku nodes through options like Static Peers, DNS Discovery, DiscV5, and Peer Exchange. Check out the Configure Peer Discovery guide for setting up your node.

    +

    The node listening and ENR addresses can be found through the node's logs and REST API. Check out the Find the node addresses section to understand how to locate your node addresses.

    \ No newline at end of file diff --git a/guides/nwaku/find-node-address/index.html b/run-node/find-node-address/index.html similarity index 77% rename from guides/nwaku/find-node-address/index.html rename to run-node/find-node-address/index.html index 3b51605..0c70f82 100644 --- a/guides/nwaku/find-node-address/index.html +++ b/run-node/find-node-address/index.html @@ -3,10 +3,10 @@ -Find Your Node Address | Waku Documentation - - - +Find Your Node Address | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Find Your Node Address

    info

    When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Find Your Node Address

    info

    When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level.

    You can find the addresses of a running node through its logs or by calling the Get node info endpoint of the REST API.

    Listening addresses

    Look for the log entry that begins with Listening on, for example:

    @@ -32,6 +32,6 @@

    Look for the log entry that begins with Discv5: discoverable ENR, for example:

    Nwaku Log Output
    INF 2023-06-15 16:09:54.448+01:00 Discv5: discoverable ENR                   topics="waku node" tid=1623445 file=waku_node.nim:924 enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw
    # ENR the node addresses are encoded in
    enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw
    -
    Congratulations!

    You have successfully found the listening and discoverable addresses for your nwaku node. Have a look at the Configure Peer Discovery guide to learn how to discover and connect with peers in the network.

    +
    Congratulations!

    You have successfully found the listening and discoverable addresses for your nwaku node. Have a look at the Configure Peer Discovery guide to learn how to discover and connect with peers in the network.

    \ No newline at end of file diff --git a/research/index.html b/run-node/index.html similarity index 69% rename from research/index.html rename to run-node/index.html index 88dc0f5..9cbe738 100644 --- a/research/index.html +++ b/run-node/index.html @@ -3,11 +3,11 @@ -Research | Waku Documentation - - - - +Run a Waku Node | Waku Documentation + + + + @@ -16,14 +16,53 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Research

    Research and Studies: Protocol simulations and theoretical analysis to support the design of Waku protocols. The protocol definitions are on the Waku RFCs website.

    -

    Benchmarks: Results of implementations and engineering-related benchmarks for Waku clients.

    -

    Waku also has the following published research papers:

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
    +
  • A nwaku node with Relay, Store, and RLN protocols
  • +
  • A simple web interface to send and receive messages
  • +
  • Grafana dashboard for monitoring your node
  • + +

    Prerequisites

    +
      +
    • Git
    • +
    • Docker and Docker Compose
    • +
    • Linea Sepolia RPC endpoint: You can get a free endpoint from Infura or any other Linea Sepolia RPC provider.
    • +
    +
    System Requirements

    We recommend at least 2GB of RAM, especially if WSS is enabled. For a Relay-only node, 0.5GB of RAM is sufficient.

    +

    Get Started

    +
    # Clone the repository
    git clone https://github.com/waku-org/nwaku-compose
    cd nwaku-compose

    # Configure your node
    cp .env.example .env
    # Edit .env with your settings

    # Start your node
    docker-compose up -d
    +

    For detailed setup instructions, see Run Nwaku with Docker Compose.

    +

    Alternative Installation Methods

    +

    While Docker Compose is recommended, you can also:

    + +

    Node Configuration

    +

    Once your node is running, you can:

    + +

    Monitoring and Maintenance

    +
      +
    • Access the Grafana dashboard at http://localhost:3000 (if using Docker Compose)
    • +
    • Use the REST API to interact with your node
    • +
    • Check node health at http://localhost:8645/health
    • +
    +
    tip

    Download the Waku Node Operator Cheatsheet for quick reference on operating your node.

    +

    Get Help

    +

    If you encounter issues or need assistance:

    +
    \ No newline at end of file diff --git a/guides/nwaku/run-docker-compose/index.html b/run-node/run-docker-compose/index.html similarity index 75% rename from guides/nwaku/run-docker-compose/index.html rename to run-node/run-docker-compose/index.html index 5359b1a..6b904ce 100644 --- a/guides/nwaku/run-docker-compose/index.html +++ b/run-node/run-docker-compose/index.html @@ -3,10 +3,10 @@ -Run Nwaku with Docker Compose | Waku Documentation - - - +Run Nwaku with Docker Compose | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Run Nwaku with Docker Compose

    nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically:

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Run Nwaku with Docker Compose

    nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically:

    • nwaku node running Relay and Store protocols with RLN enabled.
    • Simple frontend to interact with the node and Waku network to send and receive messages.
    • @@ -29,9 +29,7 @@
      info

      We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.

      Clone the repository

      @@ -40,11 +38,6 @@

      Docker Compose reads the .env file from the filesystem. You can use .env.example as a template to provide the configuration values. The recommended process for working with .env files is to duplicate .env.example, rename it as .env, and then make the necessary value edits.

      cp .env.example .env
      ${EDITOR} .env
      caution

      Ensure that you do NOT include any secrets in the .env.example file, as it could accidentally be shared in your Git repository.

      -

      Register for RLN membership

      -

      The RLN membership is your access key to The Waku Network. Its registration is done on-chain, allowing your nwaku node to send messages decentralised and privately, respecting some rate limits. Other peers won't relay messages that exceed the rate limit.

      -

      This command registers your membership and saves it in the keystore/keystore.json file. You should have Docker running at this step:

      -
      ./register_rln.sh
      -
      tip

      If you only want to relay traffic without sending messages to the network, you don't need to register for RLN membership.

      Run the node

      Launch all the processes: nwaku node, database for storing messages, and Grafana for metrics with the following command. Your RLN membership is loaded into nwaku under the hood:

      docker-compose up -d
      @@ -57,11 +50,9 @@

      Interact with the node

      Your nwaku node provides a REST API on port 8645 for interacting with it:

      # Get nwaku version
      curl --location 'http://127.0.0.1:8645/debug/v1/version'

      # Get nwaku info
      curl --location 'http://127.0.0.1:8645/debug/v1/info'
      -

      Send a message to a contentTopic, which all subscribers will receive. Please note that the payload is encoded in base64.

      -
      curl --location 'http://127.0.0.1:8645/relay/v1/auto/messages' \
      --header 'Content-Type: application/json' \
      --data '{
      "payload": "'$(echo -n "Hello Waku Network - from Anonymous User" | base64)'",
      "contentTopic": "/my-app/2/chatroom-1/proto"
      }'

      Retrieve messages sent to a contentTopic. Please note that this query can be made to any Store node within the network:

      curl --location 'http://127.0.0.1:8645/store/v1/messages?contentTopics=%2Fmy-app%2F2%2Fchatroom-1%2Fproto&pageSize=50&ascending=true' \
      --header 'Accept: application/json'
      -
      tip

      If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord.

      -
      Congratulations!

      You have successfully started a nwaku node with RLN enabled using Docker Compose. Have a look at the Node Configuration Examples and Advanced Configuration guides to learn how to configure nwaku for different use cases.

    +
    tip

    If you encounter issues running your node or require assistance with anything, please visit the - Visit the #help-desk channel on Discord.

    +
    Congratulations!

    You have successfully started a nwaku node with RLN enabled using Docker Compose. Have a look at the Node Configuration Examples and Advanced Configuration guides to learn how to configure nwaku for different use cases.

    \ No newline at end of file diff --git a/guides/nwaku/run-docker/index.html b/run-node/run-docker/index.html similarity index 80% rename from guides/nwaku/run-docker/index.html rename to run-node/run-docker/index.html index b730617..acde108 100644 --- a/guides/nwaku/run-docker/index.html +++ b/run-node/run-docker/index.html @@ -3,10 +3,10 @@ -Run Nwaku in a Docker Container | Waku Documentation - - - +Run Nwaku in a Docker Container | Waku Documentation + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Run Nwaku in a Docker Container

    This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Run Nwaku in a Docker Container

    This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.

    Prerequisites

    Ensure Docker is installed on your system using the appropriate instructions provided in the Docker documentation.

    info

    We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.

    @@ -31,7 +31,7 @@

    Run nwaku using the most typical configuration:

    docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.32.0 \
    --dns-discovery=true \
    --dns-discovery-url=enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im \
    --discv5-discovery=true \
    --nat=extip:[YOUR PUBLIC IP] # or, if you are behind a nat: --nat=any
    @@ -41,7 +41,7 @@
    docker run -t wakuorg/nwaku:v0.32.0 --help
    info

    Note that running a node in The Waku Network (--cluster-id=1) requires a special set of configurations and therefore, it is recommended to run in this case with docker compose

    info

    We recommend using explicit port mappings (-p) when exposing ports accessible from outside the host (listening and discovery ports, API servers).

    -
    tip

    If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord.

    -
    Congratulations!

    You have successfully built and started a nwaku node in a Docker container. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.

    +
    tip

    If you encounter issues running your node or require assistance with anything, please visit the - Visit the #help-desk channel on Discord.

    +
    Congratulations!

    You have successfully built and started a nwaku node in a Docker container. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.

    \ No newline at end of file diff --git a/guides/nwaku/upgrade-instructions/index.html b/run-node/upgrade-instructions/index.html similarity index 75% rename from guides/nwaku/upgrade-instructions/index.html rename to run-node/upgrade-instructions/index.html index e168cc7..fec7e7e 100644 --- a/guides/nwaku/upgrade-instructions/index.html +++ b/run-node/upgrade-instructions/index.html @@ -3,10 +3,10 @@ -Upgrade Instructions | Waku Documentation - - - +Upgrade Instructions | Waku Documentation + + + @@ -16,14 +16,14 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Upgrade Instructions

    If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order.

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Upgrade Instructions

    If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order.

    For example, if you are interested in the version v0.32.0 and are currently running v0.30.0, follow the instructions for v0.31.0 and then the ones for v0.32.0

    Target Releases

    -

    The --protected-topic CLI config was deprecated and is replaced by the new --protected-shard configuration. Instead of configuring topic:public_key you will now need to configure shard:public_key

    For example, if you used to run your node with --protected-topic="waku/2/rs/3/4:your_public_key" you will need to replace this configuration for --protected-shard="4:your_public_key"

    -

    Named sharding was deprecated in this version. This means that pubsub topics will only be supported if they comply with the static sharding format: /waku/2/rs/<CLUSTER_ID>/<SHARD_ID>

    In order to migrate your existing application, you need to:

      +

      The --protected-topic CLI config was deprecated and is replaced by the new --protected-shard configuration. Instead of configuring topic:public_key you will now need to configure shard:public_key

      For example, if you used to run your node with --protected-topic="waku/2/rs/3/4:your_public_key" you will need to replace this configuration for --protected-shard="4:your_public_key"

      +

      Named sharding was deprecated in this version. This means that pubsub topics will only be supported if they comply with the static sharding format: /waku/2/rs/<CLUSTER_ID>/<SHARD_ID>

      In order to migrate your existing application, you need to:

      1. Make sure that your clients are sending messages to pubsub topics in the required format. Check that in your interactions with Nwaku's REST API or when using js-waku, the configured pubsub topics follow the static sharding format defined above.
      2. When running a node with the --pubsub-topic CLI flag, the values provided should comply with the static sharding format.
      3. If your application relies on nodes or clients that may not be updated immediately, keep your node on an older version while subscribing to both the current pubsub topic and the new pubsub topic that will comply with the static sharding format. In that case, you can keep backward compatibility for a migration period.
      4. -
    +
    \ No newline at end of file diff --git a/search-index.json b/search-index.json index 5469353..5de712f 100644 --- a/search-index.json +++ b/search-index.json @@ -1 +1 @@ -[{"documents":[{"i":1,"t":"Debug Your Waku DApp and WebSocket","u":"/guides/js-waku/debug-waku-dapp","b":["Guides","JavaScript Waku SDK"]},{"i":17,"t":"JavaScript Waku SDK","u":"/guides/js-waku/","b":["Guides","JavaScript Waku SDK"]},{"i":27,"t":"Build React DApps Using @waku/react","u":"/guides/js-waku/use-waku-react","b":["Guides","JavaScript Waku SDK"]},{"i":41,"t":"Scaffold DApps Using @waku/create-app","u":"/guides/js-waku/use-waku-create-app","b":["Guides","JavaScript Waku SDK"]},{"i":47,"t":"Manage Your Filter Subscriptions","u":"/guides/js-waku/manage-filter","b":["Guides","JavaScript Waku SDK"]},{"i":53,"t":"JavaScript SDK FAQ","u":"/guides/js-waku/faq","b":["Guides","JavaScript Waku SDK"]},{"i":55,"t":"Nwaku FAQ","u":"/guides/nwaku/faq","b":["Guides","Run a Nwaku Node"]},{"i":57,"t":"Bootstrap Nodes and Discover Peers","u":"/guides/js-waku/configure-discovery","b":["Guides","JavaScript Waku SDK"]},{"i":69,"t":"Run Nwaku in a Docker Container","u":"/guides/nwaku/run-docker","b":["Guides","Run a Nwaku Node"]},{"i":79,"t":"Send and Receive Messages in a Reliable Channel","u":"/guides/js-waku/reliable-channels","b":["Guides","JavaScript Waku SDK"]},{"i":97,"t":"Run @waku/sdk in a NodeJS Application","u":"/guides/js-waku/run-waku-nodejs","b":["Guides","JavaScript Waku SDK"]},{"i":112,"t":"Encrypt, Decrypt, and Sign Your Messages","u":"/guides/js-waku/message-encryption","b":["Guides","JavaScript Waku SDK"]},{"i":124,"t":"Build Nwaku from Source","u":"/guides/nwaku/build-source","b":["Guides","Run a Nwaku Node"]},{"i":136,"t":"Send and Receive Messages Using Light Push and Filter","u":"/guides/js-waku/light-send-receive","b":["Guides","JavaScript Waku SDK"]},{"i":152,"t":"Node Configuration Methods","u":"/guides/nwaku/config-methods","b":["Guides","Run a Nwaku Node"]},{"i":162,"t":"Retrieve Messages Using Store Protocol","u":"/guides/js-waku/store-retrieve-messages","b":["Guides","JavaScript Waku SDK"]},{"i":183,"t":"Run Nwaku with Docker Compose","u":"/guides/nwaku/run-docker-compose","b":["Guides","Run a Nwaku Node"]},{"i":201,"t":"Node Configuration Options","u":"/guides/nwaku/config-options","b":["Guides","Run a Nwaku Node"]},{"i":235,"t":"Find Your Node Address","u":"/guides/nwaku/find-node-address","b":["Guides","Run a Nwaku Node"]},{"i":245,"t":"Run a Nwaku Node","u":"/guides/nwaku/run-node","b":["Guides","Run a Nwaku Node"]},{"i":257,"t":"Upgrade Instructions","u":"/guides/nwaku/upgrade-instructions","b":["Guides","Run a Nwaku Node"]},{"i":261,"t":"Content Topics","u":"/learn/concepts/content-topics","b":["Learn","Concepts"]},{"i":273,"t":"Configure Peer Discovery","u":"/guides/nwaku/configure-discovery","b":["Guides","Run a Nwaku Node"]},{"i":283,"t":"Peer Discovery","u":"/learn/concepts/peer-discovery","b":["Learn","Concepts","Peer Discovery"]},{"i":285,"t":"Discv5","u":"/learn/concepts/discv5","b":["Learn","Concepts","Peer Discovery"]},{"i":289,"t":"DNS Discovery","u":"/learn/concepts/dns-discovery","b":["Learn","Concepts","Peer Discovery"]},{"i":293,"t":"Node Configuration Examples","u":"/guides/nwaku/configure-nwaku","b":["Guides","Run a Nwaku Node"]},{"i":315,"t":"Peer Exchange","u":"/learn/concepts/peer-exchange","b":["Learn","Concepts","Peer Discovery"]},{"i":319,"t":"Static Peers","u":"/learn/concepts/static-peers","b":["Learn","Concepts","Peer Discovery"]},{"i":323,"t":"Security Features","u":"/learn/security-features","b":["Learn"]},{"i":335,"t":"Transports","u":"/learn/concepts/transports","b":["Learn","Concepts"]},{"i":337,"t":"Research","u":"/learn/research","b":["Learn"]},{"i":343,"t":"Network Domains","u":"/learn/concepts/network-domains","b":["Learn","Concepts"]},{"i":353,"t":"Waku FAQ","u":"/learn/faq","b":["Learn"]},{"i":355,"t":"The Waku Network","u":"/learn/waku-network","b":["Learn"]},{"i":363,"t":"Waku Docs Glossary","u":"/learn/glossary","b":["Learn"]},{"i":435,"t":"Migrating to Waku v0.027","u":"/migrations/js-waku/migration_v0.026_0.027","b":[]},{"i":455,"t":"Incentivisation in decentralised networks","u":"/research/research-and-studies/incentivisation","b":["Research","Research and Studies"]},{"i":494,"t":"Comparing Waku and libp2p","u":"/learn/waku-vs-libp2p","b":["Learn"]},{"i":502,"t":"Protocols","u":"/learn/concepts/protocols","b":["Learn","Concepts"]},{"i":516,"t":"Capped Bandwidth in Waku","u":"/research/research-and-studies/capped-bandwidth","b":["Research","Research and Studies"]},{"i":524,"t":"Privacy Policy","u":"/privacy-policy","b":[]},{"i":544,"t":"Message Propagation Times With Waku-RLN","u":"/research/research-and-studies/message-propagation","b":["Research","Research and Studies"]},{"i":554,"t":"Research","u":"/research/","b":["Research"]},{"i":556,"t":"Terms of Use","u":"/terms","b":[]},{"i":580,"t":"Performance Benchmarks and Test Reports","u":"/research/benchmarks/test-results-summary","b":["Research","Benchmarks"]},{"i":601,"t":"Rules of Engagement","u":"/rules-of-engagement","b":[]},{"i":613,"t":"Maximum Bandwidth for Global Adoption","u":"/research/research-and-studies/maximum-bandwidth","b":["Research","Research and Studies"]},{"i":621,"t":"PostgreSQL","u":"/research/benchmarks/postgres-adoption","b":["Research","Benchmarks"]},{"i":638,"t":"RLN Key Benchmarks","u":"/research/research-and-studies/rln-key-benchmarks","b":["Research","Research and Studies"]},{"i":653,"t":"Security","u":"/security","b":[]},{"i":655,"t":"Introduction to Waku","u":"/","b":["Guides"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,3.068,1,1.393,2,2.339,3,3.068]],["t/17",[1,1.588,4,2.996,5,2.996]],["t/27",[2,2.083,6,2.341,7,2.732,8,1.736,9,2.732]],["t/41",[2,2.083,8,1.736,10,2.732,11,2.732,12,2.732]],["t/47",[13,3.498,14,2.996,15,3.498]],["t/53",[4,2.996,5,2.996,16,2.666]],["t/55",[16,3.101,17,2.585]],["t/57",[18,3.068,19,1.806,20,3.068,21,1.95]],["t/69",[17,1.95,22,2.122,23,2.628,24,3.068]],["t/79",[25,2.341,26,2.341,27,1.736,28,2.732,29,2.732]],["t/97",[22,2.122,30,3.068,31,3.068,32,3.068]],["t/112",[27,1.95,33,3.068,34,3.068,35,3.068]],["t/124",[6,2.996,17,2.223,36,3.498]],["t/136",[8,1.425,14,1.92,25,1.92,26,1.92,27,1.425,37,2.242,38,2.242]],["t/152",[19,2.059,39,2.42,40,3.498]],["t/162",[8,1.736,27,1.736,41,2.732,42,2.732,43,2.341]],["t/183",[17,1.95,22,2.122,23,2.628,44,3.068]],["t/201",[19,2.059,39,2.42,45,3.498]],["t/235",[19,2.059,46,3.498,47,3.498]],["t/245",[17,2.223,19,2.059,22,2.42]],["t/257",[48,4.067,49,4.067]],["t/261",[50,4.067,51,4.067]],["t/273",[21,2.223,39,2.42,52,2.666]],["t/283",[21,2.585,52,3.101]],["t/285",[53,4.859]],["t/289",[52,3.101,54,4.067]],["t/293",[19,2.059,39,2.42,55,3.498]],["t/315",[21,2.585,56,4.067]],["t/319",[21,2.585,57,4.067]],["t/323",[58,3.485,59,4.067]],["t/335",[60,4.859]],["t/337",[61,4.163]],["t/343",[62,3.101,63,4.067]],["t/353",[1,1.847,16,3.101]],["t/355",[1,1.847,62,3.101]],["t/363",[1,1.588,64,3.498,65,3.498]],["t/435",[1,1.588,66,3.498,67,3.498]],["t/455",[62,2.666,68,3.498,69,3.498]],["t/494",[1,1.588,70,3.498,71,3.498]],["t/502",[43,4.163]],["t/516",[1,1.588,72,3.498,73,2.996]],["t/524",[74,4.067,75,4.067]],["t/544",[1,1.241,27,1.736,76,2.732,77,2.732,78,2.341]],["t/554",[61,4.163]],["t/556",[8,2.585,79,4.067]],["t/580",[80,3.068,81,2.628,82,3.068,83,3.068]],["t/601",[84,4.067,85,4.067]],["t/613",[73,2.628,86,3.068,87,3.068,88,3.068]],["t/621",[89,4.859]],["t/638",[78,2.996,81,2.996,90,3.498]],["t/653",[58,4.163]],["t/655",[1,1.847,91,4.067]]],"invertedIndex":[["address",{"_index":47,"t":{"235":{"position":[[15,7]]}}}],["adopt",{"_index":88,"t":{"613":{"position":[[29,8]]}}}],["app",{"_index":12,"t":{"41":{"position":[[34,3]]}}}],["applic",{"_index":32,"t":{"97":{"position":[[26,11]]}}}],["bandwidth",{"_index":73,"t":{"516":{"position":[[7,9]]},"613":{"position":[[8,9]]}}}],["benchmark",{"_index":81,"t":{"580":{"position":[[12,10]]},"638":{"position":[[8,10]]}}}],["bootstrap",{"_index":18,"t":{"57":{"position":[[0,9]]}}}],["build",{"_index":6,"t":{"27":{"position":[[0,5]]},"124":{"position":[[0,5]]}}}],["cap",{"_index":72,"t":{"516":{"position":[[0,6]]}}}],["channel",{"_index":29,"t":{"79":{"position":[[40,7]]}}}],["compar",{"_index":70,"t":{"494":{"position":[[0,9]]}}}],["compos",{"_index":44,"t":{"183":{"position":[[22,7]]}}}],["configur",{"_index":39,"t":{"152":{"position":[[5,13]]},"201":{"position":[[5,13]]},"273":{"position":[[0,9]]},"293":{"position":[[5,13]]}}}],["contain",{"_index":24,"t":{"69":{"position":[[22,9]]}}}],["content",{"_index":50,"t":{"261":{"position":[[0,7]]}}}],["dapp",{"_index":2,"t":{"1":{"position":[[16,4]]},"27":{"position":[[12,5]]},"41":{"position":[[9,5]]}}}],["debug",{"_index":0,"t":{"1":{"position":[[0,5]]}}}],["decentralis",{"_index":69,"t":{"455":{"position":[[19,13]]}}}],["decrypt",{"_index":34,"t":{"112":{"position":[[9,8]]}}}],["discov",{"_index":20,"t":{"57":{"position":[[20,8]]}}}],["discoveri",{"_index":52,"t":{"273":{"position":[[15,9]]},"283":{"position":[[5,9]]},"289":{"position":[[4,9]]}}}],["discv5",{"_index":53,"t":{"285":{"position":[[0,6]]}}}],["dn",{"_index":54,"t":{"289":{"position":[[0,3]]}}}],["doc",{"_index":64,"t":{"363":{"position":[[5,4]]}}}],["docker",{"_index":23,"t":{"69":{"position":[[15,6]]},"183":{"position":[[15,6]]}}}],["domain",{"_index":63,"t":{"343":{"position":[[8,7]]}}}],["encrypt",{"_index":33,"t":{"112":{"position":[[0,8]]}}}],["engag",{"_index":85,"t":{"601":{"position":[[9,10]]}}}],["exampl",{"_index":55,"t":{"293":{"position":[[19,8]]}}}],["exchang",{"_index":56,"t":{"315":{"position":[[5,8]]}}}],["faq",{"_index":16,"t":{"53":{"position":[[15,3]]},"55":{"position":[[6,3]]},"353":{"position":[[5,3]]}}}],["featur",{"_index":59,"t":{"323":{"position":[[9,8]]}}}],["filter",{"_index":14,"t":{"47":{"position":[[12,6]]},"136":{"position":[[47,6]]}}}],["find",{"_index":46,"t":{"235":{"position":[[0,4]]}}}],["global",{"_index":87,"t":{"613":{"position":[[22,6]]}}}],["glossari",{"_index":65,"t":{"363":{"position":[[10,8]]}}}],["incentivis",{"_index":68,"t":{"455":{"position":[[0,15]]}}}],["instruct",{"_index":49,"t":{"257":{"position":[[8,12]]}}}],["introduct",{"_index":91,"t":{"655":{"position":[[0,12]]}}}],["javascript",{"_index":4,"t":{"17":{"position":[[0,10]]},"53":{"position":[[0,10]]}}}],["key",{"_index":90,"t":{"638":{"position":[[4,3]]}}}],["libp2p",{"_index":71,"t":{"494":{"position":[[19,6]]}}}],["light",{"_index":37,"t":{"136":{"position":[[32,5]]}}}],["manag",{"_index":13,"t":{"47":{"position":[[0,6]]}}}],["maximum",{"_index":86,"t":{"613":{"position":[[0,7]]}}}],["messag",{"_index":27,"t":{"79":{"position":[[17,8]]},"112":{"position":[[32,8]]},"136":{"position":[[17,8]]},"162":{"position":[[9,8]]},"544":{"position":[[0,7]]}}}],["method",{"_index":40,"t":{"152":{"position":[[19,7]]}}}],["migrat",{"_index":66,"t":{"435":{"position":[[0,9]]}}}],["network",{"_index":62,"t":{"343":{"position":[[0,7]]},"355":{"position":[[9,7]]},"455":{"position":[[33,8]]}}}],["node",{"_index":19,"t":{"57":{"position":[[10,5]]},"152":{"position":[[0,4]]},"201":{"position":[[0,4]]},"235":{"position":[[10,4]]},"245":{"position":[[12,4]]},"293":{"position":[[0,4]]}}}],["nodej",{"_index":31,"t":{"97":{"position":[[19,6]]}}}],["nwaku",{"_index":17,"t":{"55":{"position":[[0,5]]},"69":{"position":[[4,5]]},"124":{"position":[[6,5]]},"183":{"position":[[4,5]]},"245":{"position":[[6,5]]}}}],["option",{"_index":45,"t":{"201":{"position":[[19,7]]}}}],["peer",{"_index":21,"t":{"57":{"position":[[29,5]]},"273":{"position":[[10,4]]},"283":{"position":[[0,4]]},"315":{"position":[[0,4]]},"319":{"position":[[7,5]]}}}],["perform",{"_index":80,"t":{"580":{"position":[[0,11]]}}}],["polici",{"_index":75,"t":{"524":{"position":[[8,6]]}}}],["postgresql",{"_index":89,"t":{"621":{"position":[[0,10]]}}}],["privaci",{"_index":74,"t":{"524":{"position":[[0,7]]}}}],["propag",{"_index":76,"t":{"544":{"position":[[8,11]]}}}],["protocol",{"_index":43,"t":{"162":{"position":[[30,8]]},"502":{"position":[[0,9]]}}}],["push",{"_index":38,"t":{"136":{"position":[[38,4]]}}}],["react",{"_index":7,"t":{"27":{"position":[[6,5]]}}}],["receiv",{"_index":26,"t":{"79":{"position":[[9,7]]},"136":{"position":[[9,7]]}}}],["reliabl",{"_index":28,"t":{"79":{"position":[[31,8]]}}}],["report",{"_index":83,"t":{"580":{"position":[[32,7]]}}}],["research",{"_index":61,"t":{"337":{"position":[[0,8]]},"554":{"position":[[0,8]]}}}],["retriev",{"_index":41,"t":{"162":{"position":[[0,8]]}}}],["rln",{"_index":78,"t":{"544":{"position":[[36,3]]},"638":{"position":[[0,3]]}}}],["rule",{"_index":84,"t":{"601":{"position":[[0,5]]}}}],["run",{"_index":22,"t":{"69":{"position":[[0,3]]},"97":{"position":[[0,3]]},"183":{"position":[[0,3]]},"245":{"position":[[0,3]]}}}],["scaffold",{"_index":10,"t":{"41":{"position":[[0,8]]}}}],["sdk",{"_index":5,"t":{"17":{"position":[[16,3]]},"53":{"position":[[11,3]]}}}],["secur",{"_index":58,"t":{"323":{"position":[[0,8]]},"653":{"position":[[0,8]]}}}],["send",{"_index":25,"t":{"79":{"position":[[0,4]]},"136":{"position":[[0,4]]}}}],["sign",{"_index":35,"t":{"112":{"position":[[22,4]]}}}],["sourc",{"_index":36,"t":{"124":{"position":[[17,6]]}}}],["static",{"_index":57,"t":{"319":{"position":[[0,6]]}}}],["store",{"_index":42,"t":{"162":{"position":[[24,5]]}}}],["subscript",{"_index":15,"t":{"47":{"position":[[19,13]]}}}],["term",{"_index":79,"t":{"556":{"position":[[0,5]]}}}],["test",{"_index":82,"t":{"580":{"position":[[27,4]]}}}],["time",{"_index":77,"t":{"544":{"position":[[20,5]]}}}],["topic",{"_index":51,"t":{"261":{"position":[[8,6]]}}}],["transport",{"_index":60,"t":{"335":{"position":[[0,10]]}}}],["upgrad",{"_index":48,"t":{"257":{"position":[[0,7]]}}}],["us",{"_index":8,"t":{"27":{"position":[[18,5]]},"41":{"position":[[15,5]]},"136":{"position":[[26,5]]},"162":{"position":[[18,5]]},"556":{"position":[[9,3]]}}}],["v0.027",{"_index":67,"t":{"435":{"position":[[18,6]]}}}],["waku",{"_index":1,"t":{"1":{"position":[[11,4]]},"17":{"position":[[11,4]]},"353":{"position":[[0,4]]},"355":{"position":[[4,4]]},"363":{"position":[[0,4]]},"435":{"position":[[13,4]]},"494":{"position":[[10,4]]},"516":{"position":[[20,4]]},"544":{"position":[[31,4]]},"655":{"position":[[16,4]]}}}],["waku/cr",{"_index":11,"t":{"41":{"position":[[21,12]]}}}],["waku/react",{"_index":9,"t":{"27":{"position":[[24,11]]}}}],["waku/sdk",{"_index":30,"t":{"97":{"position":[[4,9]]}}}],["websocket",{"_index":3,"t":{"1":{"position":[[25,9]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Enabling debug logs","u":"/guides/js-waku/debug-waku-dapp","h":"#enabling-debug-logs","p":1},{"i":5,"t":"NodeJS environments","u":"/guides/js-waku/debug-waku-dapp","h":"#nodejs-environments","p":1},{"i":7,"t":"Browser environments","u":"/guides/js-waku/debug-waku-dapp","h":"#browser-environments","p":1},{"i":9,"t":"Checking WebSocket setup","u":"/guides/js-waku/debug-waku-dapp","h":"#checking-websocket-setup","p":1},{"i":11,"t":"Try Websocat for connection","u":"/guides/js-waku/debug-waku-dapp","h":"#try-websocat-for-connection","p":1},{"i":13,"t":"Check certificate validity","u":"/guides/js-waku/debug-waku-dapp","h":"#check-certificate-validity","p":1},{"i":15,"t":"Check WebSocket port accessibility","u":"/guides/js-waku/debug-waku-dapp","h":"#check-websocket-port-accessibility","p":1},{"i":19,"t":"Installation","u":"/guides/js-waku/","h":"#installation","p":17},{"i":21,"t":"Message structure","u":"/guides/js-waku/","h":"#message-structure","p":17},{"i":23,"t":"Getting started","u":"/guides/js-waku/","h":"#getting-started","p":17},{"i":25,"t":"Get help and report issues","u":"/guides/js-waku/","h":"#get-help-and-report-issues","p":17},{"i":29,"t":"Install the dependencies","u":"/guides/js-waku/use-waku-react","h":"#install-the-dependencies","p":27},{"i":31,"t":"Initialise the Waku provider","u":"/guides/js-waku/use-waku-react","h":"#initialise-the-waku-provider","p":27},{"i":33,"t":"Build the application interface","u":"/guides/js-waku/use-waku-react","h":"#build-the-application-interface","p":27},{"i":35,"t":"Send messages using light push","u":"/guides/js-waku/use-waku-react","h":"#send-messages-using-light-push","p":27},{"i":37,"t":"Receive messages using filter","u":"/guides/js-waku/use-waku-react","h":"#receive-messages-using-filter","p":27},{"i":39,"t":"Retrieve messages using store","u":"/guides/js-waku/use-waku-react","h":"#retrieve-messages-using-store","p":27},{"i":43,"t":"Usage","u":"/guides/js-waku/use-waku-create-app","h":"#usage","p":41},{"i":45,"t":"Contributing new templates","u":"/guides/js-waku/use-waku-create-app","h":"#contributing-new-templates","p":41},{"i":49,"t":"Overview","u":"/guides/js-waku/manage-filter","h":"#overview","p":47},{"i":51,"t":"Pinging filter subscriptions","u":"/guides/js-waku/manage-filter","h":"#pinging-filter-subscriptions","p":47},{"i":59,"t":"Default bootstrap method","u":"/guides/js-waku/configure-discovery","h":"#default-bootstrap-method","p":57},{"i":61,"t":"Configure static peers","u":"/guides/js-waku/configure-discovery","h":"#configure-static-peers","p":57},{"i":63,"t":"Configure DNS discovery","u":"/guides/js-waku/configure-discovery","h":"#configure-dns-discovery","p":57},{"i":65,"t":"Configure DNS discovery and static peers","u":"/guides/js-waku/configure-discovery","h":"#configure-dns-discovery-and-static-peers","p":57},{"i":67,"t":"Retrieving connected peers","u":"/guides/js-waku/configure-discovery","h":"#retrieving-connected-peers","p":57},{"i":71,"t":"Prerequisites","u":"/guides/nwaku/run-docker","h":"#prerequisites","p":69},{"i":73,"t":"Get Docker image","u":"/guides/nwaku/run-docker","h":"#get-docker-image","p":69},{"i":75,"t":"Build Docker image","u":"/guides/nwaku/run-docker","h":"#build-docker-image","p":69},{"i":77,"t":"Run Docker container","u":"/guides/nwaku/run-docker","h":"#run-docker-container","p":69},{"i":81,"t":"Import Waku SDK","u":"/guides/js-waku/reliable-channels","h":"#import-waku-sdk","p":79},{"i":83,"t":"Create a Waku node","u":"/guides/js-waku/reliable-channels","h":"#create-a-waku-node","p":79},{"i":85,"t":"Create encoders and decoders","u":"/guides/js-waku/reliable-channels","h":"#create-encoders-and-decoders","p":79},{"i":87,"t":"Listen for connection status","u":"/guides/js-waku/reliable-channels","h":"#listen-for-connection-status","p":79},{"i":89,"t":"Create a reliable channel","u":"/guides/js-waku/reliable-channels","h":"#create-a-reliable-channel","p":79},{"i":91,"t":"Create a message structure","u":"/guides/js-waku/reliable-channels","h":"#create-a-message-structure","p":79},{"i":93,"t":"Listen to incoming messages","u":"/guides/js-waku/reliable-channels","h":"#listen-to-incoming-messages","p":79},{"i":95,"t":"Send messages","u":"/guides/js-waku/reliable-channels","h":"#send-messages","p":79},{"i":99,"t":"Limitations","u":"/guides/js-waku/run-waku-nodejs","h":"#limitations","p":97},{"i":100,"t":"API compatibility","u":"/guides/js-waku/run-waku-nodejs","h":"#api-compatibility","p":97},{"i":102,"t":"Protocol implementation","u":"/guides/js-waku/run-waku-nodejs","h":"#protocol-implementation","p":97},{"i":104,"t":"Codebase complexity","u":"/guides/js-waku/run-waku-nodejs","h":"#codebase-complexity","p":97},{"i":106,"t":"Browser-specific protocols","u":"/guides/js-waku/run-waku-nodejs","h":"#browser-specific-protocols","p":97},{"i":108,"t":"Recommendations","u":"/guides/js-waku/run-waku-nodejs","h":"#recommendations","p":97},{"i":110,"t":"Future developments","u":"/guides/js-waku/run-waku-nodejs","h":"#future-developments","p":97},{"i":114,"t":"Installation","u":"/guides/js-waku/message-encryption","h":"#installation","p":112},{"i":116,"t":"Symmetric encryption","u":"/guides/js-waku/message-encryption","h":"#symmetric-encryption","p":112},{"i":118,"t":"ECIES encryption","u":"/guides/js-waku/message-encryption","h":"#ecies-encryption","p":112},{"i":120,"t":"Signing encrypted messages","u":"/guides/js-waku/message-encryption","h":"#signing-encrypted-messages","p":112},{"i":122,"t":"Storing encryption keys","u":"/guides/js-waku/message-encryption","h":"#storing-encryption-keys","p":112},{"i":126,"t":"Prerequisites","u":"/guides/nwaku/build-source","h":"#prerequisites","p":124},{"i":128,"t":"Clone the repository","u":"/guides/nwaku/build-source","h":"#clone-the-repository","p":124},{"i":130,"t":"Build the binary","u":"/guides/nwaku/build-source","h":"#build-the-binary","p":124},{"i":132,"t":"Run the binary","u":"/guides/nwaku/build-source","h":"#run-the-binary","p":124},{"i":134,"t":"Run test suite","u":"/guides/nwaku/build-source","h":"#run-test-suite","p":124},{"i":138,"t":"Create a light node","u":"/guides/js-waku/light-send-receive","h":"#create-a-light-node","p":136},{"i":140,"t":"Alternative network configuration","u":"/guides/js-waku/light-send-receive","h":"#alternative-network-configuration","p":136},{"i":142,"t":"Connect to remote peers","u":"/guides/js-waku/light-send-receive","h":"#connect-to-remote-peers","p":136},{"i":144,"t":"Choose a content topic","u":"/guides/js-waku/light-send-receive","h":"#choose-a-content-topic","p":136},{"i":146,"t":"Create a message structure","u":"/guides/js-waku/light-send-receive","h":"#create-a-message-structure","p":136},{"i":148,"t":"Send messages using light push","u":"/guides/js-waku/light-send-receive","h":"#send-messages-using-light-push","p":136},{"i":150,"t":"Receive messages using filter","u":"/guides/js-waku/light-send-receive","h":"#receive-messages-using-filter","p":136},{"i":154,"t":"Command line options","u":"/guides/nwaku/config-methods","h":"#command-line-options","p":152},{"i":156,"t":"Environment variables","u":"/guides/nwaku/config-methods","h":"#environment-variables","p":152},{"i":158,"t":"Configuration files","u":"/guides/nwaku/config-methods","h":"#configuration-files","p":152},{"i":160,"t":"Default configuration values","u":"/guides/nwaku/config-methods","h":"#default-configuration-values","p":152},{"i":164,"t":"Create a light node","u":"/guides/js-waku/store-retrieve-messages","h":"#create-a-light-node","p":162},{"i":166,"t":"Connect to store peers","u":"/guides/js-waku/store-retrieve-messages","h":"#connect-to-store-peers","p":162},{"i":168,"t":"Choose a content topic","u":"/guides/js-waku/store-retrieve-messages","h":"#choose-a-content-topic","p":162},{"i":170,"t":"Retrieve messages","u":"/guides/js-waku/store-retrieve-messages","h":"#retrieve-messages","p":162},{"i":172,"t":"queryWithOrderedCallback","u":"/guides/js-waku/store-retrieve-messages","h":"#querywithorderedcallback","p":162},{"i":174,"t":"queryGenerator","u":"/guides/js-waku/store-retrieve-messages","h":"#querygenerator","p":162},{"i":176,"t":"Store query options","u":"/guides/js-waku/store-retrieve-messages","h":"#store-query-options","p":162},{"i":177,"t":"pageDirection","u":"/guides/js-waku/store-retrieve-messages","h":"#pagedirection","p":162},{"i":179,"t":"cursor","u":"/guides/js-waku/store-retrieve-messages","h":"#cursor","p":162},{"i":181,"t":"timeFilter","u":"/guides/js-waku/store-retrieve-messages","h":"#timefilter","p":162},{"i":185,"t":"Video tutorial","u":"/guides/nwaku/run-docker-compose","h":"#video-tutorial","p":183},{"i":187,"t":"Prerequisites","u":"/guides/nwaku/run-docker-compose","h":"#prerequisites","p":183},{"i":189,"t":"Clone the repository","u":"/guides/nwaku/run-docker-compose","h":"#clone-the-repository","p":183},{"i":191,"t":"Configure the setup","u":"/guides/nwaku/run-docker-compose","h":"#configure-the-setup","p":183},{"i":193,"t":"Register for RLN membership","u":"/guides/nwaku/run-docker-compose","h":"#register-for-rln-membership","p":183},{"i":195,"t":"Run the node","u":"/guides/nwaku/run-docker-compose","h":"#run-the-node","p":183},{"i":197,"t":"Monitor the node","u":"/guides/nwaku/run-docker-compose","h":"#monitor-the-node","p":183},{"i":199,"t":"Interact with the node","u":"/guides/nwaku/run-docker-compose","h":"#interact-with-the-node","p":183},{"i":203,"t":"Application-level config","u":"/guides/nwaku/config-options","h":"#application-level-config","p":201},{"i":205,"t":"Log config","u":"/guides/nwaku/config-options","h":"#log-config","p":201},{"i":207,"t":"General node config","u":"/guides/nwaku/config-options","h":"#general-node-config","p":201},{"i":209,"t":"DNS addrs config","u":"/guides/nwaku/config-options","h":"#dns-addrs-config","p":201},{"i":211,"t":"Relay config","u":"/guides/nwaku/config-options","h":"#relay-config","p":201},{"i":213,"t":"Store and message store config","u":"/guides/nwaku/config-options","h":"#store-and-message-store-config","p":201},{"i":215,"t":"Store Sync","u":"/guides/nwaku/config-options","h":"#store-sync","p":201},{"i":217,"t":"Filter config","u":"/guides/nwaku/config-options","h":"#filter-config","p":201},{"i":219,"t":"Light push config","u":"/guides/nwaku/config-options","h":"#light-push-config","p":201},{"i":221,"t":"REST HTTP config","u":"/guides/nwaku/config-options","h":"#rest-http-config","p":201},{"i":223,"t":"Metrics config","u":"/guides/nwaku/config-options","h":"#metrics-config","p":201},{"i":225,"t":"DNS discovery config","u":"/guides/nwaku/config-options","h":"#dns-discovery-config","p":201},{"i":227,"t":"Discv5 config","u":"/guides/nwaku/config-options","h":"#discv5-config","p":201},{"i":229,"t":"Waku peer exchange config","u":"/guides/nwaku/config-options","h":"#waku-peer-exchange-config","p":201},{"i":231,"t":"WebSocket config","u":"/guides/nwaku/config-options","h":"#websocket-config","p":201},{"i":233,"t":"Non-relay, request-response protocol DOS protection configuration","u":"/guides/nwaku/config-options","h":"#non-relay-request-response-protocol-dos-protection-configuration","p":201},{"i":237,"t":"Listening addresses","u":"/guides/nwaku/find-node-address","h":"#listening-addresses","p":235},{"i":239,"t":"Discoverable ENR addresses","u":"/guides/nwaku/find-node-address","h":"#discoverable-enr-addresses","p":235},{"i":241,"t":"ENR for DNS discovery","u":"/guides/nwaku/find-node-address","h":"#enr-for-dns-discovery","p":235},{"i":243,"t":"ENR for Discv5","u":"/guides/nwaku/find-node-address","h":"#enr-for-discv5","p":235},{"i":247,"t":"Get the node binary","u":"/guides/nwaku/run-node","h":"#get-the-node-binary","p":245},{"i":249,"t":"Run the node","u":"/guides/nwaku/run-node","h":"#run-the-node","p":245},{"i":251,"t":"Bootstrap the node","u":"/guides/nwaku/run-node","h":"#bootstrap-the-node","p":245},{"i":253,"t":"Interact with the node","u":"/guides/nwaku/run-node","h":"#interact-with-the-node","p":245},{"i":255,"t":"Check the node health status","u":"/guides/nwaku/run-node","h":"#check-the-node-health-status","p":245},{"i":259,"t":"Target Releases","u":"/guides/nwaku/upgrade-instructions","h":"#target-releases","p":257},{"i":263,"t":"Naming format","u":"/learn/concepts/content-topics","h":"#naming-format","p":261},{"i":265,"t":"Naming considerations","u":"/learn/concepts/content-topics","h":"#naming-considerations","p":261},{"i":267,"t":"Protocols disclose content topics to peers","u":"/learn/concepts/content-topics","h":"#protocols-disclose-content-topics-to-peers","p":261},{"i":269,"t":"Increasing k-anonymity preserves user anonymity","u":"/learn/concepts/content-topics","h":"#increasing-k-anonymity-preserves-user-anonymity","p":261},{"i":271,"t":"Creating buckets help in distributing traffic","u":"/learn/concepts/content-topics","h":"#creating-buckets-help-in-distributing-traffic","p":261},{"i":275,"t":"Configure static peers","u":"/guides/nwaku/configure-discovery","h":"#configure-static-peers","p":273},{"i":277,"t":"Configure DNS discovery","u":"/guides/nwaku/configure-discovery","h":"#configure-dns-discovery","p":273},{"i":279,"t":"Configure Discv5","u":"/guides/nwaku/configure-discovery","h":"#configure-discv5","p":273},{"i":281,"t":"Configure peer exchange","u":"/guides/nwaku/configure-discovery","h":"#configure-peer-exchange","p":273},{"i":287,"t":"Overview","u":"/learn/concepts/discv5","h":"#overview","p":285},{"i":291,"t":"Overview","u":"/learn/concepts/dns-discovery","h":"#overview","p":289},{"i":295,"t":"Connect to other peers","u":"/guides/nwaku/configure-nwaku","h":"#connect-to-other-peers","p":293},{"i":297,"t":"Configure a domain name","u":"/guides/nwaku/configure-nwaku","h":"#configure-a-domain-name","p":293},{"i":299,"t":"Configure store protocol and message store","u":"/guides/nwaku/configure-nwaku","h":"#configure-store-protocol-and-message-store","p":293},{"i":301,"t":"Configure store sync","u":"/guides/nwaku/configure-nwaku","h":"#configure-store-sync","p":293},{"i":303,"t":"Generate and configure a node key","u":"/guides/nwaku/configure-nwaku","h":"#generate-and-configure-a-node-key","p":293},{"i":305,"t":"Configure WebSocket transport","u":"/guides/nwaku/configure-nwaku","h":"#configure-websocket-transport","p":293},{"i":307,"t":"Configure REST API server","u":"/guides/nwaku/configure-nwaku","h":"#configure-rest-api-server","p":293},{"i":309,"t":"Configure filter protocol","u":"/guides/nwaku/configure-nwaku","h":"#configure-filter-protocol","p":293},{"i":311,"t":"Configure light push protocol","u":"/guides/nwaku/configure-nwaku","h":"#configure-light-push-protocol","p":293},{"i":313,"t":"Run nwaku behind a reverse proxy","u":"/guides/nwaku/configure-nwaku","h":"#run-nwaku-behind-a-reverse-proxy","p":293},{"i":317,"t":"Overview","u":"/learn/concepts/peer-exchange","h":"#overview","p":315},{"i":321,"t":"Overview","u":"/learn/concepts/static-peers","h":"#overview","p":319},{"i":325,"t":"Pseudonymity","u":"/learn/security-features","h":"#pseudonymity","p":323},{"i":327,"t":"Anonymity/unlinkability","u":"/learn/security-features","h":"#anonymityunlinkability","p":323},{"i":329,"t":"Spam protection","u":"/learn/security-features","h":"#spam-protection","p":323},{"i":331,"t":"Data confidentiality, integrity, and authenticity","u":"/learn/security-features","h":"#data-confidentiality-integrity-and-authenticity","p":323},{"i":333,"t":"Security considerations","u":"/learn/security-features","h":"#security-considerations","p":323},{"i":339,"t":"Economic spam resistance","u":"/learn/research","h":"#economic-spam-resistance","p":337},{"i":341,"t":"Prevention of denial of service (DoS) and node incentivisation","u":"/learn/research","h":"#prevention-of-denial-of-service-dos-and-node-incentivisation","p":337},{"i":345,"t":"Discovery domain","u":"/learn/concepts/network-domains","h":"#discovery-domain","p":343},{"i":347,"t":"Gossip domain","u":"/learn/concepts/network-domains","h":"#gossip-domain","p":343},{"i":349,"t":"Request/response domain","u":"/learn/concepts/network-domains","h":"#requestresponse-domain","p":343},{"i":351,"t":"Overview of protocol interaction","u":"/learn/concepts/network-domains","h":"#overview-of-protocol-interaction","p":343},{"i":357,"t":"Why join the Waku network?","u":"/learn/waku-network","h":"#why-join-the-waku-network","p":355},{"i":359,"t":"Prerequisites","u":"/learn/waku-network","h":"#prerequisites","p":355},{"i":361,"t":"Running a Waku network node","u":"/learn/waku-network","h":"#running-a-waku-network-node","p":355},{"i":365,"t":"Bootstrapping","u":"/learn/glossary","h":"#bootstrapping","p":363},{"i":367,"t":"Content topic","u":"/learn/glossary","h":"#content-topic","p":363},{"i":369,"t":"Dappnode","u":"/learn/glossary","h":"#dappnode","p":363},{"i":371,"t":"Discv5","u":"/learn/glossary","h":"#discv5","p":363},{"i":373,"t":"DNS discovery","u":"/learn/glossary","h":"#dns-discovery","p":363},{"i":375,"t":"ENR","u":"/learn/glossary","h":"#enr","p":363},{"i":377,"t":"Filter","u":"/learn/glossary","h":"#filter","p":363},{"i":379,"t":"GossipSub","u":"/learn/glossary","h":"#gossipsub","p":363},{"i":381,"t":"Libp2p","u":"/learn/glossary","h":"#libp2p","p":363},{"i":383,"t":"Light node","u":"/learn/glossary","h":"#light-node","p":363},{"i":385,"t":"Light push","u":"/learn/glossary","h":"#light-push","p":363},{"i":387,"t":"Mostly offline","u":"/learn/glossary","h":"#mostly-offline","p":363},{"i":389,"t":"Node","u":"/learn/glossary","h":"#node","p":363},{"i":391,"t":"Node key","u":"/learn/glossary","h":"#node-key","p":363},{"i":393,"t":"Out-of-band","u":"/learn/glossary","h":"#out-of-band","p":363},{"i":395,"t":"Payload","u":"/learn/glossary","h":"#payload","p":363},{"i":397,"t":"Peer","u":"/learn/glossary","h":"#peer","p":363},{"i":399,"t":"Peer discovery","u":"/learn/glossary","h":"#peer-discovery","p":363},{"i":401,"t":"Peer exchange","u":"/learn/glossary","h":"#peer-exchange","p":363},{"i":403,"t":"Peer ID","u":"/learn/glossary","h":"#peer-id","p":363},{"i":405,"t":"Protocol","u":"/learn/glossary","h":"#protocol","p":363},{"i":407,"t":"Pub/Sub","u":"/learn/glossary","h":"#pubsub","p":363},{"i":409,"t":"Pub/Sub topic","u":"/learn/glossary","h":"#pubsub-topic","p":363},{"i":411,"t":"Rate limit nullifiers","u":"/learn/glossary","h":"#rate-limit-nullifiers","p":363},{"i":413,"t":"Relay","u":"/learn/glossary","h":"#relay","p":363},{"i":415,"t":"Resource-limited","u":"/learn/glossary","h":"#resource-limited","p":363},{"i":417,"t":"RLN relay","u":"/learn/glossary","h":"#rln-relay","p":363},{"i":419,"t":"SDK","u":"/learn/glossary","h":"#sdk","p":363},{"i":421,"t":"Store","u":"/learn/glossary","h":"#store","p":363},{"i":423,"t":"Transport","u":"/learn/glossary","h":"#transport","p":363},{"i":425,"t":"Waku","u":"/learn/glossary","h":"#waku","p":363},{"i":427,"t":"Waku message","u":"/learn/glossary","h":"#waku-message","p":363},{"i":429,"t":"Waku message payload encryption","u":"/learn/glossary","h":"#waku-message-payload-encryption","p":363},{"i":431,"t":"Waku network","u":"/learn/glossary","h":"#waku-network","p":363},{"i":433,"t":"Waku noise","u":"/learn/glossary","h":"#waku-noise","p":363},{"i":437,"t":"Table of Contents","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#table-of-contents","p":435},{"i":439,"t":"Network Configuration","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#network-configuration","p":435},{"i":441,"t":"Default Network Configuration","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#default-network-configuration","p":435},{"i":443,"t":"Static Sharding","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#static-sharding","p":435},{"i":445,"t":"Auto Sharding","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#auto-sharding","p":435},{"i":447,"t":"Pubsub Topic Configuration","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#pubsub-topic-configuration","p":435},{"i":449,"t":"Removed APIs","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#removed-apis","p":435},{"i":451,"t":"Type Changes","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#type-changes","p":435},{"i":453,"t":"Internal/Private Utility Function Changes","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#internalprivate-utility-function-changes","p":435},{"i":456,"t":"Incentivisation tools","u":"/research/research-and-studies/incentivisation","h":"#incentivisation-tools","p":455},{"i":458,"t":"Prior work","u":"/research/research-and-studies/incentivisation","h":"#prior-work","p":455},{"i":460,"t":"Early P2P file-sharing","u":"/research/research-and-studies/incentivisation","h":"#early-p2p-file-sharing","p":455},{"i":462,"t":"Blockchains","u":"/research/research-and-studies/incentivisation","h":"#blockchains","p":455},{"i":464,"t":"Decentralised storage","u":"/research/research-and-studies/incentivisation","h":"#decentralised-storage","p":455},{"i":466,"t":"Waku background","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":468,"t":"Waku i13n challenges","u":"/research/research-and-studies/incentivisation","h":"#waku-i13n-challenges","p":455},{"i":470,"t":"Waku Store","u":"/research/research-and-studies/incentivisation","h":"#waku-store","p":455},{"i":472,"t":"Waku Store incentivisation","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":474,"t":"Pricing","u":"/research/research-and-studies/incentivisation","h":"#pricing","p":455},{"i":476,"t":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work","p":455},{"i":478,"t":"Payment","u":"/research/research-and-studies/incentivisation","h":"#payment","p":455},{"i":480,"t":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work-1","p":455},{"i":482,"t":"Reputation","u":"/research/research-and-studies/incentivisation","h":"#reputation","p":455},{"i":484,"t":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work-2","p":455},{"i":486,"t":"Results cross-checking","u":"/research/research-and-studies/incentivisation","h":"#results-cross-checking","p":455},{"i":488,"t":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work-3","p":455},{"i":490,"t":"Evaluation","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":492,"t":"Longer-term future work","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":496,"t":"Waku as a service network","u":"/learn/waku-vs-libp2p","h":"#waku-as-a-service-network","p":494},{"i":498,"t":"Waku as a turnkey solution","u":"/learn/waku-vs-libp2p","h":"#waku-as-a-turnkey-solution","p":494},{"i":500,"t":"Economic spam protection","u":"/learn/waku-vs-libp2p","h":"#economic-spam-protection","p":494},{"i":504,"t":"Relay","u":"/learn/concepts/protocols","h":"#relay","p":502},{"i":506,"t":"RLN relay","u":"/learn/concepts/protocols","h":"#rln-relay","p":502},{"i":508,"t":"Filter","u":"/learn/concepts/protocols","h":"#filter","p":502},{"i":510,"t":"Store","u":"/learn/concepts/protocols","h":"#store","p":502},{"i":512,"t":"Light push","u":"/learn/concepts/protocols","h":"#light-push","p":502},{"i":514,"t":"Waku message","u":"/learn/concepts/protocols","h":"#waku-message","p":502},{"i":518,"t":"Problem","u":"/research/research-and-studies/capped-bandwidth","h":"#problem","p":516},{"i":520,"t":"Previous Work","u":"/research/research-and-studies/capped-bandwidth","h":"#previous-work","p":516},{"i":522,"t":"Current Solution (RLN v2)","u":"/research/research-and-studies/capped-bandwidth","h":"#current-solution-rln-v2","p":516},{"i":526,"t":"1) Who we are","u":"/privacy-policy","h":"#1-who-we-are","p":524},{"i":528,"t":"2) We limit the collection and processing of personal data from your use of the Website","u":"/privacy-policy","h":"#2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website","p":524},{"i":530,"t":"3) Third party processing of personal data","u":"/privacy-policy","h":"#3-third-party-processing-of-personal-data","p":524},{"i":532,"t":"4) Security measures we take in respect of the Website","u":"/privacy-policy","h":"#4-security-measures-we-take-in-respect-of-the-website","p":524},{"i":534,"t":"5) Exporting data outside the European Union and Switzerland","u":"/privacy-policy","h":"#5-exporting-data-outside-the-european-union-and-switzerland","p":524},{"i":536,"t":"6) Your choices and rights","u":"/privacy-policy","h":"#6-your-choices-and-rights","p":524},{"i":538,"t":"7) Third party links","u":"/privacy-policy","h":"#7-third-party-links","p":524},{"i":540,"t":"8) This Privacy Policy might change","u":"/privacy-policy","h":"#8-this-privacy-policy-might-change","p":524},{"i":542,"t":"9) Contact information","u":"/privacy-policy","h":"#9-contact-information","p":524},{"i":546,"t":"Introduction","u":"/research/research-and-studies/message-propagation","h":"#introduction","p":544},{"i":548,"t":"Theory","u":"/research/research-and-studies/message-propagation","h":"#theory","p":544},{"i":550,"t":"Simulations","u":"/research/research-and-studies/message-propagation","h":"#simulations","p":544},{"i":552,"t":"Results","u":"/research/research-and-studies/message-propagation","h":"#results","p":544},{"i":558,"t":"1) Who we are","u":"/terms","h":"#1-who-we-are","p":556},{"i":560,"t":"2) Disclaimers","u":"/terms","h":"#2-disclaimers","p":556},{"i":562,"t":"3) Forward looking statements","u":"/terms","h":"#3-forward-looking-statements","p":556},{"i":564,"t":"4) Intellectual property rights","u":"/terms","h":"#4-intellectual-property-rights","p":556},{"i":566,"t":"5) Third-party website links","u":"/terms","h":"#5-third-party-website-links","p":556},{"i":568,"t":"6) Limitation of liability","u":"/terms","h":"#6-limitation-of-liability","p":556},{"i":570,"t":"7) Indemnity","u":"/terms","h":"#7-indemnity","p":556},{"i":572,"t":"8) Modifications","u":"/terms","h":"#8-modifications","p":556},{"i":574,"t":"9) Governing law","u":"/terms","h":"#9-governing-law","p":556},{"i":576,"t":"10) Disputes","u":"/terms","h":"#10-disputes","p":556},{"i":578,"t":"11) About these Website Terms of Use","u":"/terms","h":"#11-about-these-website-terms-of-use","p":556},{"i":581,"t":"Introduction","u":"/research/benchmarks/test-results-summary","h":"#introduction","p":580},{"i":583,"t":"TL;DR","u":"/research/benchmarks/test-results-summary","h":"#tldr","p":580},{"i":585,"t":"Insights","u":"/research/benchmarks/test-results-summary","h":"#insights","p":580},{"i":586,"t":"Relay Bandwidth Usage: nwaku v0.34.0","u":"/research/benchmarks/test-results-summary","h":"#relay-bandwidth-usage-nwaku-v0340","p":580},{"i":588,"t":"Message Propagation Latency: nwaku v0.34.0-rc1","u":"/research/benchmarks/test-results-summary","h":"#message-propagation-latency-nwaku-v0340-rc1","p":580},{"i":590,"t":"Discv5 Bandwidth Usage: nwaku v0.34.0","u":"/research/benchmarks/test-results-summary","h":"#discv5-bandwidth-usage-nwaku-v0340","p":580},{"i":592,"t":"Testing","u":"/research/benchmarks/test-results-summary","h":"#testing","p":580},{"i":593,"t":"DST","u":"/research/benchmarks/test-results-summary","h":"#dst","p":580},{"i":595,"t":"QA","u":"/research/benchmarks/test-results-summary","h":"#qa","p":580},{"i":597,"t":"nwaku","u":"/research/benchmarks/test-results-summary","h":"#nwaku","p":580},{"i":599,"t":"Research","u":"/research/benchmarks/test-results-summary","h":"#research","p":580},{"i":603,"t":"1. Initial discussion","u":"/rules-of-engagement","h":"#1-initial-discussion","p":601},{"i":605,"t":"2. Solution design","u":"/rules-of-engagement","h":"#2-solution-design","p":601},{"i":607,"t":"3. Commitment","u":"/rules-of-engagement","h":"#3-commitment","p":601},{"i":609,"t":"4. Building","u":"/rules-of-engagement","h":"#4-building","p":601},{"i":611,"t":"5. Ongoing relation","u":"/rules-of-engagement","h":"#5-ongoing-relation","p":601},{"i":615,"t":"Introduction","u":"/research/research-and-studies/maximum-bandwidth","h":"#introduction","p":613},{"i":617,"t":"Bandwidth availability and usage","u":"/research/research-and-studies/maximum-bandwidth","h":"#bandwidth-availability-and-usage","p":613},{"i":619,"t":"Selecting a maximum bandwidth","u":"/research/research-and-studies/maximum-bandwidth","h":"#selecting-a-maximum-bandwidth","p":613},{"i":622,"t":"Introduction","u":"/research/benchmarks/postgres-adoption","h":"#introduction","p":621},{"i":624,"t":"How to connect the nwaku to Postgres","u":"/research/benchmarks/postgres-adoption","h":"#how-to-connect-the-nwaku-to-postgres","p":621},{"i":626,"t":"Examples of nwaku using Postgres","u":"/research/benchmarks/postgres-adoption","h":"#examples-of-nwaku-using-postgres","p":621},{"i":628,"t":"Stress tests","u":"/research/benchmarks/postgres-adoption","h":"#stress-tests","p":621},{"i":630,"t":"Insert test results","u":"/research/benchmarks/postgres-adoption","h":"#insert-test-results","p":621},{"i":632,"t":"Query test results (jmeter)","u":"/research/benchmarks/postgres-adoption","h":"#query-test-results-jmeter","p":621},{"i":634,"t":"Query test results (only Store protocol)","u":"/research/benchmarks/postgres-adoption","h":"#query-test-results-only-store-protocol","p":621},{"i":636,"t":"Multiple nodes & one single database","u":"/research/benchmarks/postgres-adoption","h":"#multiple-nodes--one-single-database","p":621},{"i":639,"t":"Introduction","u":"/research/research-and-studies/rln-key-benchmarks","h":"#introduction","p":638},{"i":641,"t":"TLDR:","u":"/research/research-and-studies/rln-key-benchmarks","h":"#tldr","p":638},{"i":643,"t":"Proof generation times","u":"/research/research-and-studies/rln-key-benchmarks","h":"#proof-generation-times","p":638},{"i":645,"t":"Proof verification times","u":"/research/research-and-studies/rln-key-benchmarks","h":"#proof-verification-times","p":638},{"i":647,"t":"Spam protection","u":"/research/research-and-studies/rln-key-benchmarks","h":"#spam-protection","p":638},{"i":649,"t":"RLN tree sync","u":"/research/research-and-studies/rln-key-benchmarks","h":"#rln-tree-sync","p":638},{"i":651,"t":"Performance relay vs. rln-relay","u":"/research/research-and-studies/rln-key-benchmarks","h":"#performance-relay-vs-rln-relay","p":638},{"i":657,"t":"What isn’t Waku?","u":"/","h":"#what-isnt-waku","p":655},{"i":659,"t":"What can Waku be used for?","u":"/","h":"#what-can-waku-be-used-for","p":655},{"i":661,"t":"Case studies","u":"/","h":"#case-studies","p":655},{"i":662,"t":"Getting started","u":"/","h":"#getting-started","p":655},{"i":663,"t":"Run a Waku node","u":"/","h":"#run-a-waku-node","p":655},{"i":665,"t":"Integrate using SDKs","u":"/","h":"#integrate-using-sdks","p":655},{"i":667,"t":"Other integrations","u":"/","h":"#other-integrations","p":655}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,4.849,1,4.849,2,4.378]],["t/5",[3,5.716,4,4.795]],["t/7",[4,4.795,5,5.161]],["t/9",[6,3.651,7,3.836,8,4.378]],["t/11",[9,4.849,10,4.849,11,3.365]],["t/13",[6,3.651,12,4.849,13,4.849]],["t/15",[6,3.17,7,3.331,14,4.21,15,4.21]],["t/19",[16,5.839]],["t/21",[17,2.985,18,4.795]],["t/23",[19,5.161,20,5.161]],["t/25",[21,4.378,22,4.849,23,4.849]],["t/29",[16,4.795,24,5.716]],["t/31",[25,4.849,26,2.393,27,4.849]],["t/33",[28,3.836,29,4.378,30,4.849]],["t/35",[17,1.943,31,3.121,32,2.343,33,2.414,34,2.683]],["t/37",[17,2.199,32,2.652,35,3.801,36,2.922]],["t/39",[17,2.199,32,2.652,37,3.532,38,2.451]],["t/43",[39,5.506]],["t/45",[40,4.849,41,4.849,42,4.849]],["t/49",[43,5.019]],["t/51",[36,3.365,44,4.849,45,4.849]],["t/59",[46,4.068,47,4.068,48,4.849]],["t/61",[49,2.311,50,3.836,51,2.757]],["t/63",[49,2.311,52,3.365,53,3.249]],["t/65",[49,1.773,50,2.943,51,2.115,52,2.582,53,2.493]],["t/67",[11,3.365,37,4.068,51,2.757]],["t/71",[54,5.506]],["t/73",[55,4.795,56,5.161]],["t/75",[28,3.836,55,4.068,56,4.378]],["t/77",[55,4.068,57,3.249,58,4.849]],["t/81",[26,2.393,59,4.849,60,4.068]],["t/83",[26,2.393,61,3.249,62,2.437]],["t/85",[61,3.249,63,4.849,64,4.849]],["t/87",[11,3.365,65,4.068,66,4.378]],["t/89",[61,3.249,67,4.849,68,4.849]],["t/91",[17,2.532,18,4.068,61,3.249]],["t/93",[17,2.532,65,4.068,69,4.849]],["t/95",[17,2.985,31,4.795]],["t/99",[70,5.24]],["t/100",[71,4.795,72,5.716]],["t/102",[73,3.6,74,5.716]],["t/104",[75,5.716,76,5.716]],["t/106",[5,4.378,73,3.054,77,4.849]],["t/108",[78,6.96]],["t/110",[79,4.122,80,5.716]],["t/114",[16,5.839]],["t/116",[81,5.716,82,4.303]],["t/118",[82,4.303,83,5.716]],["t/120",[17,2.532,82,3.651,84,4.849]],["t/122",[38,2.823,82,3.651,85,4.068]],["t/126",[54,5.506]],["t/128",[86,5.161,87,5.161]],["t/130",[28,4.522,88,4.795]],["t/132",[57,3.83,88,4.795]],["t/134",[57,3.249,89,3.497,90,4.849]],["t/138",[33,3.147,61,3.249,62,2.437]],["t/140",[49,2.311,91,4.849,92,3.365]],["t/142",[11,3.365,51,2.757,93,4.849]],["t/144",[94,4.378,95,3.651,96,3.497]],["t/146",[17,2.532,18,4.068,61,3.249]],["t/148",[17,1.943,31,3.121,32,2.343,33,2.414,34,2.683]],["t/150",[17,2.199,32,2.652,35,3.801,36,2.922]],["t/154",[97,4.849,98,4.849,99,4.378]],["t/156",[4,4.795,100,5.716]],["t/158",[49,2.725,101,5.161]],["t/160",[46,4.068,49,2.311,102,4.849]],["t/164",[33,3.147,61,3.249,62,2.437]],["t/166",[11,3.365,38,2.823,51,2.757]],["t/168",[94,4.378,95,3.651,96,3.497]],["t/170",[17,2.985,37,4.795]],["t/172",[103,6.96]],["t/174",[104,6.96]],["t/176",[38,2.823,99,4.378,105,4.068]],["t/177",[106,6.96]],["t/179",[107,6.96]],["t/181",[108,6.96]],["t/185",[109,5.716,110,5.716]],["t/187",[54,5.506]],["t/189",[86,5.161,87,5.161]],["t/191",[8,5.161,49,2.725]],["t/193",[111,4.849,112,3.497,113,4.849]],["t/195",[57,3.83,62,2.873]],["t/197",[62,2.873,114,5.716]],["t/199",[62,2.873,115,4.795]],["t/203",[29,4.378,116,4.849,117,2.757]],["t/205",[2,5.161,117,3.249]],["t/207",[62,2.437,117,2.757,118,4.068]],["t/209",[52,3.365,117,2.757,119,4.849]],["t/211",[117,3.249,120,3.83]],["t/213",[17,2.199,38,3.594,117,2.394]],["t/215",[38,3.327,121,4.795]],["t/217",[36,3.966,117,3.249]],["t/219",[33,3.147,34,3.497,117,2.757]],["t/221",[117,2.757,122,4.378,123,4.849]],["t/223",[117,3.249,124,5.716]],["t/225",[52,3.365,53,3.249,117,2.757]],["t/227",[117,3.249,125,4.303]],["t/229",[26,2.078,51,2.394,117,2.394,126,3.532]],["t/231",[7,4.522,117,3.249]],["t/233",[49,1.314,73,1.737,120,1.848,127,2.758,128,2.758,129,2.758,130,2.49,131,2.182]],["t/237",[65,4.795,132,5.161]],["t/239",[132,4.378,133,4.849,134,3.836]],["t/241",[52,3.365,53,3.249,134,3.836]],["t/243",[125,4.303,134,4.522]],["t/247",[62,2.873,88,4.795]],["t/249",[57,3.83,62,2.873]],["t/251",[47,4.795,62,2.873]],["t/253",[62,2.873,115,4.795]],["t/255",[6,3.17,62,2.116,66,3.801,135,4.21]],["t/259",[136,5.716,137,5.716]],["t/263",[138,4.795,139,5.716]],["t/265",[138,4.795,140,5.161]],["t/267",[51,2.115,73,2.343,95,2.801,96,2.683,141,3.721]],["t/269",[142,3.333,143,3.333,144,5.174,145,3.333,146,3.333]],["t/271",[21,3.359,61,2.493,147,3.721,148,3.721,149,3.721]],["t/275",[49,2.311,50,3.836,51,2.757]],["t/277",[49,2.311,52,3.365,53,3.249]],["t/279",[49,2.725,125,4.303]],["t/281",[49,2.311,51,2.757,126,4.068]],["t/287",[43,5.019]],["t/291",[43,5.019]],["t/295",[11,3.966,51,3.249]],["t/297",[49,2.311,138,4.068,150,3.836]],["t/299",[17,1.943,38,3.277,49,1.773,73,2.343]],["t/301",[38,2.823,49,2.311,121,4.068]],["t/303",[49,2.007,62,2.116,85,3.532,118,3.532]],["t/305",[7,3.836,49,2.311,151,4.378]],["t/307",[49,2.007,71,3.532,122,3.801,152,4.21]],["t/309",[36,3.365,49,2.311,73,3.054]],["t/311",[33,2.732,34,3.036,49,2.007,73,2.652]],["t/313",[57,2.493,153,2.582,154,3.721,155,3.721,156,3.721]],["t/317",[43,5.019]],["t/321",[43,5.019]],["t/325",[157,6.96]],["t/327",[158,6.96]],["t/329",[131,4.522,159,4.522]],["t/331",[160,3.331,161,4.21,162,3.532,163,4.21]],["t/333",[140,5.161,164,5.161]],["t/339",[159,3.836,165,4.378,166,4.849]],["t/341",[62,1.675,130,3.009,167,3.333,168,3.333,169,3.009,170,2.796]],["t/345",[53,3.83,150,4.522]],["t/347",[150,4.522,171,5.716]],["t/349",[150,4.522,172,5.716]],["t/351",[43,3.497,73,3.054,115,4.068]],["t/357",[26,2.393,92,3.365,173,4.849]],["t/359",[54,5.506]],["t/361",[26,2.078,57,2.821,62,2.116,92,2.922]],["t/365",[47,5.839]],["t/367",[95,4.303,96,4.122]],["t/369",[174,6.96]],["t/371",[125,5.24]],["t/373",[52,3.966,53,3.83]],["t/375",[134,5.506]],["t/377",[36,4.83]],["t/379",[175,6.96]],["t/381",[176,6.96]],["t/383",[33,3.709,62,2.873]],["t/385",[33,3.709,34,4.122]],["t/387",[177,5.716,178,5.716]],["t/389",[62,3.498]],["t/391",[62,2.873,85,4.795]],["t/393",[179,5.716,180,5.716]],["t/395",[181,6.284]],["t/397",[51,3.957]],["t/399",[51,3.249,53,3.83]],["t/401",[51,3.249,126,4.795]],["t/403",[51,3.249,182,5.716]],["t/405",[73,4.384]],["t/407",[183,6.284]],["t/409",[96,4.122,183,5.161]],["t/411",[70,3.651,184,4.849,185,4.849]],["t/413",[120,4.664]],["t/415",[70,4.303,186,5.716]],["t/417",[112,4.122,120,3.83]],["t/419",[60,5.839]],["t/421",[38,4.051]],["t/423",[151,6.284]],["t/425",[26,3.435]],["t/427",[17,2.985,26,2.821]],["t/429",[17,2.199,26,2.078,82,3.17,181,3.801]],["t/431",[26,2.821,92,3.966]],["t/433",[26,2.821,187,5.716]],["t/437",[95,4.303,188,5.716]],["t/439",[49,2.725,92,3.966]],["t/441",[46,4.068,49,2.311,92,3.365]],["t/443",[50,4.522,189,5.161]],["t/445",[189,5.161,190,5.716]],["t/447",[49,2.311,96,3.497,191,4.849]],["t/449",[71,4.795,192,5.716]],["t/451",[193,5.716,194,4.795]],["t/453",[194,3.532,195,4.21,196,4.21,197,4.21]],["t/456",[170,4.795,198,5.716]],["t/458",[199,5.716,200,3.966]],["t/460",[101,3.801,201,4.21,202,4.21,203,4.21]],["t/462",[204,6.96]],["t/464",[205,5.716,206,5.716]],["t/466",[26,2.821,207,5.716]],["t/468",[26,2.393,208,4.849,209,4.849]],["t/470",[26,2.821,38,3.327]],["t/472",[26,2.393,38,2.823,170,4.068]],["t/474",[210,6.96]],["t/476",[79,4.122,200,3.966]],["t/478",[211,6.96]],["t/480",[79,4.122,200,3.966]],["t/482",[212,6.96]],["t/484",[79,4.122,200,3.966]],["t/486",[6,3.651,213,3.651,214,4.849]],["t/488",[79,4.122,200,3.966]],["t/490",[215,6.96]],["t/492",[79,3.036,200,2.922,216,4.21,217,3.801]],["t/496",[26,2.393,92,3.365,169,4.378]],["t/498",[26,2.393,218,4.849,219,4.068]],["t/500",[131,3.836,159,3.836,165,4.378]],["t/504",[120,4.664]],["t/506",[112,4.122,120,3.83]],["t/508",[36,4.83]],["t/510",[38,4.051]],["t/512",[33,3.709,34,4.122]],["t/514",[17,2.985,26,2.821]],["t/518",[220,6.96]],["t/520",[200,3.966,221,5.716]],["t/522",[112,3.036,219,3.532,222,4.21,223,4.21]],["t/526",[224,5.839]],["t/528",[32,1.737,70,2.076,160,2.182,225,2.313,226,2.758,227,2.49,228,2.49,229,2.182]],["t/530",[160,2.636,227,3.009,228,3.009,230,2.796,231,2.796,232,2.796]],["t/532",[164,3.009,229,2.636,233,2.796,234,3.333,235,3.333,236,3.333]],["t/534",[160,2.387,237,2.532,238,3.018,239,3.018,240,3.018,241,3.018,242,3.018]],["t/536",[243,4.378,244,4.849,245,4.378]],["t/538",[231,3.532,232,3.532,246,3.801,247,3.801]],["t/540",[194,3.532,248,3.801,249,4.21,250,4.21]],["t/542",[251,4.378,252,4.849,253,4.849]],["t/546",[254,5.24]],["t/548",[255,6.96]],["t/550",[256,6.96]],["t/552",[213,5.24]],["t/558",[224,5.839]],["t/560",[225,4.795,257,5.716]],["t/562",[230,3.532,258,4.21,259,4.21,260,4.21]],["t/564",[233,3.532,245,3.801,261,4.21,262,4.21]],["t/566",[229,2.943,231,3.121,232,3.121,237,3.121,247,3.359]],["t/568",[70,3.651,243,4.378,263,4.849]],["t/570",[246,5.161,264,5.716]],["t/572",[248,5.161,265,5.716]],["t/574",[251,4.378,266,4.849,267,4.849]],["t/576",[268,5.716,269,5.716]],["t/578",[32,2.652,217,3.801,229,3.331,270,4.21]],["t/581",[254,5.24]],["t/583",[271,6.96]],["t/585",[272,6.96]],["t/586",[39,2.943,120,2.493,153,2.582,273,2.943,274,3.121]],["t/588",[17,1.74,153,2.312,274,2.796,275,3.333,276,3.333,277,3.333]],["t/590",[39,2.943,125,2.801,153,2.582,273,2.943,274,3.121]],["t/592",[89,5.019]],["t/593",[278,6.96]],["t/595",[279,6.96]],["t/597",[153,4.83]],["t/599",[280,6.96]],["t/603",[224,4.068,281,4.849,282,4.849]],["t/605",[219,4.068,225,4.068,283,4.849]],["t/607",[230,4.795,284,5.716]],["t/609",[28,4.522,233,4.795]],["t/611",[237,4.068,285,4.849,286,4.849]],["t/615",[254,5.24]],["t/617",[39,3.836,273,3.836,287,4.849]],["t/619",[273,3.836,288,4.849,289,4.849]],["t/622",[254,5.24]],["t/624",[11,3.365,153,3.365,290,4.378]],["t/626",[32,2.652,153,2.922,290,3.801,291,4.21]],["t/628",[89,4.122,292,5.716]],["t/630",[89,3.497,213,3.651,293,4.849]],["t/632",[89,3.036,105,3.532,213,3.17,294,4.21]],["t/634",[38,2.166,73,2.343,89,2.683,105,3.121,213,2.801]],["t/636",[62,1.675,295,3.333,296,3.333,297,3.333,298,3.333,299,3.333]],["t/639",[254,5.24]],["t/641",[300,6.96]],["t/643",[118,4.068,301,4.378,302,4.378]],["t/645",[301,4.378,302,4.378,303,4.849]],["t/647",[131,4.522,159,4.522]],["t/649",[112,3.497,121,4.068,304,4.849]],["t/651",[112,2.683,120,3.773,305,3.721,306,3.721]],["t/657",[26,2.821,307,5.716]],["t/659",[26,2.821,32,3.6]],["t/661",[308,5.716,309,5.716]],["t/662",[19,5.161,20,5.161]],["t/663",[26,2.393,57,3.249,62,2.437]],["t/665",[32,3.054,60,4.068,162,4.068]],["t/667",[162,5.839]]],"invertedIndex":[["",{"_index":296,"t":{"636":{"position":[[15,1]]}}}],["1",{"_index":224,"t":{"526":{"position":[[0,2]]},"558":{"position":[[0,2]]},"603":{"position":[[0,2]]}}}],["10",{"_index":268,"t":{"576":{"position":[[0,3]]}}}],["11",{"_index":270,"t":{"578":{"position":[[0,3]]}}}],["2",{"_index":225,"t":{"528":{"position":[[0,2]]},"560":{"position":[[0,2]]},"605":{"position":[[0,2]]}}}],["3",{"_index":230,"t":{"530":{"position":[[0,2]]},"562":{"position":[[0,2]]},"607":{"position":[[0,2]]}}}],["4",{"_index":233,"t":{"532":{"position":[[0,2]]},"564":{"position":[[0,2]]},"609":{"position":[[0,2]]}}}],["5",{"_index":237,"t":{"534":{"position":[[0,2]]},"566":{"position":[[0,2]]},"611":{"position":[[0,2]]}}}],["6",{"_index":243,"t":{"536":{"position":[[0,2]]},"568":{"position":[[0,2]]}}}],["7",{"_index":246,"t":{"538":{"position":[[0,2]]},"570":{"position":[[0,2]]}}}],["8",{"_index":248,"t":{"540":{"position":[[0,2]]},"572":{"position":[[0,2]]}}}],["9",{"_index":251,"t":{"542":{"position":[[0,2]]},"574":{"position":[[0,2]]}}}],["access",{"_index":15,"t":{"15":{"position":[[21,13]]}}}],["addr",{"_index":119,"t":{"209":{"position":[[4,5]]}}}],["address",{"_index":132,"t":{"237":{"position":[[10,9]]},"239":{"position":[[17,9]]}}}],["altern",{"_index":91,"t":{"140":{"position":[[0,11]]}}}],["anonym",{"_index":144,"t":{"269":{"position":[[13,9],[38,9]]}}}],["anonymity/unlink",{"_index":158,"t":{"327":{"position":[[0,23]]}}}],["api",{"_index":71,"t":{"100":{"position":[[0,3]]},"307":{"position":[[15,3]]},"449":{"position":[[8,4]]}}}],["applic",{"_index":29,"t":{"33":{"position":[[10,11]]},"203":{"position":[[0,11]]}}}],["authent",{"_index":163,"t":{"331":{"position":[[37,12]]}}}],["auto",{"_index":190,"t":{"445":{"position":[[0,4]]}}}],["avail",{"_index":287,"t":{"617":{"position":[[10,12]]}}}],["background",{"_index":207,"t":{"466":{"position":[[5,10]]}}}],["band",{"_index":180,"t":{"393":{"position":[[7,4]]}}}],["bandwidth",{"_index":273,"t":{"586":{"position":[[6,9]]},"590":{"position":[[7,9]]},"617":{"position":[[0,9]]},"619":{"position":[[20,9]]}}}],["behind",{"_index":154,"t":{"313":{"position":[[10,6]]}}}],["binari",{"_index":88,"t":{"130":{"position":[[10,6]]},"132":{"position":[[8,6]]},"247":{"position":[[13,6]]}}}],["blockchain",{"_index":204,"t":{"462":{"position":[[0,11]]}}}],["bootstrap",{"_index":47,"t":{"59":{"position":[[8,9]]},"251":{"position":[[0,9]]},"365":{"position":[[0,13]]}}}],["browser",{"_index":5,"t":{"7":{"position":[[0,7]]},"106":{"position":[[0,7]]}}}],["bucket",{"_index":147,"t":{"271":{"position":[[9,7]]}}}],["build",{"_index":28,"t":{"33":{"position":[[0,5]]},"75":{"position":[[0,5]]},"130":{"position":[[0,5]]},"609":{"position":[[3,8]]}}}],["case",{"_index":308,"t":{"661":{"position":[[0,4]]}}}],["certif",{"_index":12,"t":{"13":{"position":[[6,11]]}}}],["challeng",{"_index":209,"t":{"468":{"position":[[10,10]]}}}],["chang",{"_index":194,"t":{"451":{"position":[[5,7]]},"453":{"position":[[34,7]]},"540":{"position":[[29,6]]}}}],["channel",{"_index":68,"t":{"89":{"position":[[18,7]]}}}],["check",{"_index":6,"t":{"9":{"position":[[0,8]]},"13":{"position":[[0,5]]},"15":{"position":[[0,5]]},"255":{"position":[[0,5]]},"486":{"position":[[14,8]]}}}],["choic",{"_index":244,"t":{"536":{"position":[[8,7]]}}}],["choos",{"_index":94,"t":{"144":{"position":[[0,6]]},"168":{"position":[[0,6]]}}}],["clone",{"_index":86,"t":{"128":{"position":[[0,5]]},"189":{"position":[[0,5]]}}}],["codebas",{"_index":75,"t":{"104":{"position":[[0,8]]}}}],["collect",{"_index":226,"t":{"528":{"position":[[16,10]]}}}],["command",{"_index":97,"t":{"154":{"position":[[0,7]]}}}],["commit",{"_index":284,"t":{"607":{"position":[[3,10]]}}}],["compat",{"_index":72,"t":{"100":{"position":[[4,13]]}}}],["complex",{"_index":76,"t":{"104":{"position":[[9,10]]}}}],["confidenti",{"_index":161,"t":{"331":{"position":[[5,16]]}}}],["config",{"_index":117,"t":{"203":{"position":[[18,6]]},"205":{"position":[[4,6]]},"207":{"position":[[13,6]]},"209":{"position":[[10,6]]},"211":{"position":[[6,6]]},"213":{"position":[[24,6]]},"217":{"position":[[7,6]]},"219":{"position":[[11,6]]},"221":{"position":[[10,6]]},"223":{"position":[[8,6]]},"225":{"position":[[14,6]]},"227":{"position":[[7,6]]},"229":{"position":[[19,6]]},"231":{"position":[[10,6]]}}}],["configur",{"_index":49,"t":{"61":{"position":[[0,9]]},"63":{"position":[[0,9]]},"65":{"position":[[0,9]]},"140":{"position":[[20,13]]},"158":{"position":[[0,13]]},"160":{"position":[[8,13]]},"191":{"position":[[0,9]]},"233":{"position":[[52,13]]},"275":{"position":[[0,9]]},"277":{"position":[[0,9]]},"279":{"position":[[0,9]]},"281":{"position":[[0,9]]},"297":{"position":[[0,9]]},"299":{"position":[[0,9]]},"301":{"position":[[0,9]]},"303":{"position":[[13,9]]},"305":{"position":[[0,9]]},"307":{"position":[[0,9]]},"309":{"position":[[0,9]]},"311":{"position":[[0,9]]},"439":{"position":[[8,13]]},"441":{"position":[[16,13]]},"447":{"position":[[13,13]]}}}],["connect",{"_index":11,"t":{"11":{"position":[[17,10]]},"67":{"position":[[11,9]]},"87":{"position":[[11,10]]},"142":{"position":[[0,7]]},"166":{"position":[[0,7]]},"295":{"position":[[0,7]]},"624":{"position":[[7,7]]}}}],["consider",{"_index":140,"t":{"265":{"position":[[7,14]]},"333":{"position":[[9,14]]}}}],["contact",{"_index":252,"t":{"542":{"position":[[3,7]]}}}],["contain",{"_index":58,"t":{"77":{"position":[[11,9]]}}}],["content",{"_index":95,"t":{"144":{"position":[[9,7]]},"168":{"position":[[9,7]]},"267":{"position":[[19,7]]},"367":{"position":[[0,7]]},"437":{"position":[[9,8]]}}}],["contribut",{"_index":40,"t":{"45":{"position":[[0,12]]}}}],["creat",{"_index":61,"t":{"83":{"position":[[0,6]]},"85":{"position":[[0,6]]},"89":{"position":[[0,6]]},"91":{"position":[[0,6]]},"138":{"position":[[0,6]]},"146":{"position":[[0,6]]},"164":{"position":[[0,6]]},"271":{"position":[[0,8]]}}}],["cross",{"_index":214,"t":{"486":{"position":[[8,5]]}}}],["current",{"_index":222,"t":{"522":{"position":[[0,7]]}}}],["cursor",{"_index":107,"t":{"179":{"position":[[0,6]]}}}],["dappnod",{"_index":174,"t":{"369":{"position":[[0,8]]}}}],["data",{"_index":160,"t":{"331":{"position":[[0,4]]},"528":{"position":[[54,4]]},"530":{"position":[[38,4]]},"534":{"position":[[13,4]]}}}],["databas",{"_index":299,"t":{"636":{"position":[[28,8]]}}}],["debug",{"_index":1,"t":{"3":{"position":[[9,5]]}}}],["decentralis",{"_index":205,"t":{"464":{"position":[[0,13]]}}}],["decod",{"_index":64,"t":{"85":{"position":[[20,8]]}}}],["default",{"_index":46,"t":{"59":{"position":[[0,7]]},"160":{"position":[[0,7]]},"441":{"position":[[0,7]]}}}],["denial",{"_index":168,"t":{"341":{"position":[[14,6]]}}}],["depend",{"_index":24,"t":{"29":{"position":[[12,12]]}}}],["design",{"_index":283,"t":{"605":{"position":[[12,6]]}}}],["develop",{"_index":80,"t":{"110":{"position":[[7,12]]}}}],["disclaim",{"_index":257,"t":{"560":{"position":[[3,11]]}}}],["disclos",{"_index":141,"t":{"267":{"position":[[10,8]]}}}],["discover",{"_index":133,"t":{"239":{"position":[[0,12]]}}}],["discoveri",{"_index":53,"t":{"63":{"position":[[14,9]]},"65":{"position":[[14,9]]},"225":{"position":[[4,9]]},"241":{"position":[[12,9]]},"277":{"position":[[14,9]]},"345":{"position":[[0,9]]},"373":{"position":[[4,9]]},"399":{"position":[[5,9]]}}}],["discuss",{"_index":282,"t":{"603":{"position":[[11,10]]}}}],["discv5",{"_index":125,"t":{"227":{"position":[[0,6]]},"243":{"position":[[8,6]]},"279":{"position":[[10,6]]},"371":{"position":[[0,6]]},"590":{"position":[[0,6]]}}}],["disput",{"_index":269,"t":{"576":{"position":[[4,8]]}}}],["distribut",{"_index":148,"t":{"271":{"position":[[25,12]]}}}],["dn",{"_index":52,"t":{"63":{"position":[[10,3]]},"65":{"position":[[10,3]]},"209":{"position":[[0,3]]},"225":{"position":[[0,3]]},"241":{"position":[[8,3]]},"277":{"position":[[10,3]]},"373":{"position":[[0,3]]}}}],["do",{"_index":130,"t":{"233":{"position":[[37,3]]},"341":{"position":[[32,5]]}}}],["docker",{"_index":55,"t":{"73":{"position":[[4,6]]},"75":{"position":[[6,6]]},"77":{"position":[[4,6]]}}}],["domain",{"_index":150,"t":{"297":{"position":[[12,6]]},"345":{"position":[[10,6]]},"347":{"position":[[7,6]]},"349":{"position":[[17,6]]}}}],["dst",{"_index":278,"t":{"593":{"position":[[0,3]]}}}],["earli",{"_index":201,"t":{"460":{"position":[[0,5]]}}}],["eci",{"_index":83,"t":{"118":{"position":[[0,5]]}}}],["econom",{"_index":165,"t":{"339":{"position":[[0,8]]},"500":{"position":[[0,8]]}}}],["enabl",{"_index":0,"t":{"3":{"position":[[0,8]]}}}],["encod",{"_index":63,"t":{"85":{"position":[[7,8]]}}}],["encrypt",{"_index":82,"t":{"116":{"position":[[10,10]]},"118":{"position":[[6,10]]},"120":{"position":[[8,9]]},"122":{"position":[[8,10]]},"429":{"position":[[21,10]]}}}],["enr",{"_index":134,"t":{"239":{"position":[[13,3]]},"241":{"position":[[0,3]]},"243":{"position":[[0,3]]},"375":{"position":[[0,3]]}}}],["environ",{"_index":4,"t":{"5":{"position":[[7,12]]},"7":{"position":[[8,12]]},"156":{"position":[[0,11]]}}}],["european",{"_index":240,"t":{"534":{"position":[[30,8]]}}}],["evalu",{"_index":215,"t":{"490":{"position":[[0,10]]}}}],["exampl",{"_index":291,"t":{"626":{"position":[[0,8]]}}}],["exchang",{"_index":126,"t":{"229":{"position":[[10,8]]},"281":{"position":[[15,8]]},"401":{"position":[[5,8]]}}}],["export",{"_index":238,"t":{"534":{"position":[[3,9]]}}}],["file",{"_index":101,"t":{"158":{"position":[[14,5]]},"460":{"position":[[10,4]]}}}],["filter",{"_index":36,"t":{"37":{"position":[[23,6]]},"51":{"position":[[8,6]]},"150":{"position":[[23,6]]},"217":{"position":[[0,6]]},"309":{"position":[[10,6]]},"377":{"position":[[0,6]]},"508":{"position":[[0,6]]}}}],["format",{"_index":139,"t":{"263":{"position":[[7,6]]}}}],["forward",{"_index":258,"t":{"562":{"position":[[3,7]]}}}],["function",{"_index":197,"t":{"453":{"position":[[25,8]]}}}],["futur",{"_index":79,"t":{"110":{"position":[[0,6]]},"476":{"position":[[0,6]]},"480":{"position":[[0,6]]},"484":{"position":[[0,6]]},"488":{"position":[[0,6]]},"492":{"position":[[12,6]]}}}],["gener",{"_index":118,"t":{"207":{"position":[[0,7]]},"303":{"position":[[0,8]]},"643":{"position":[[6,10]]}}}],["get",{"_index":19,"t":{"23":{"position":[[0,7]]},"662":{"position":[[0,7]]}}}],["gossip",{"_index":171,"t":{"347":{"position":[[0,6]]}}}],["gossipsub",{"_index":175,"t":{"379":{"position":[[0,9]]}}}],["govern",{"_index":266,"t":{"574":{"position":[[3,9]]}}}],["health",{"_index":135,"t":{"255":{"position":[[15,6]]}}}],["help",{"_index":21,"t":{"25":{"position":[[4,4]]},"271":{"position":[[17,4]]}}}],["http",{"_index":123,"t":{"221":{"position":[[5,4]]}}}],["i13n",{"_index":208,"t":{"468":{"position":[[5,4]]}}}],["id",{"_index":182,"t":{"403":{"position":[[5,2]]}}}],["imag",{"_index":56,"t":{"73":{"position":[[11,5]]},"75":{"position":[[13,5]]}}}],["implement",{"_index":74,"t":{"102":{"position":[[9,14]]}}}],["import",{"_index":59,"t":{"81":{"position":[[0,6]]}}}],["incentivis",{"_index":170,"t":{"341":{"position":[[47,15]]},"456":{"position":[[0,15]]},"472":{"position":[[11,15]]}}}],["incom",{"_index":69,"t":{"93":{"position":[[10,8]]}}}],["increas",{"_index":142,"t":{"269":{"position":[[0,10]]}}}],["indemn",{"_index":264,"t":{"570":{"position":[[3,9]]}}}],["inform",{"_index":253,"t":{"542":{"position":[[11,11]]}}}],["initi",{"_index":281,"t":{"603":{"position":[[3,7]]}}}],["initialis",{"_index":25,"t":{"31":{"position":[[0,10]]}}}],["insert",{"_index":293,"t":{"630":{"position":[[0,6]]}}}],["insight",{"_index":272,"t":{"585":{"position":[[0,8]]}}}],["instal",{"_index":16,"t":{"19":{"position":[[0,12]]},"29":{"position":[[0,7]]},"114":{"position":[[0,12]]}}}],["integr",{"_index":162,"t":{"331":{"position":[[22,10]]},"665":{"position":[[0,9]]},"667":{"position":[[6,12]]}}}],["intellectu",{"_index":261,"t":{"564":{"position":[[3,12]]}}}],["interact",{"_index":115,"t":{"199":{"position":[[0,8]]},"253":{"position":[[0,8]]},"351":{"position":[[21,11]]}}}],["interfac",{"_index":30,"t":{"33":{"position":[[22,9]]}}}],["internal/priv",{"_index":195,"t":{"453":{"position":[[0,16]]}}}],["introduct",{"_index":254,"t":{"546":{"position":[[0,12]]},"581":{"position":[[0,12]]},"615":{"position":[[0,12]]},"622":{"position":[[0,12]]},"639":{"position":[[0,12]]}}}],["isn’t",{"_index":307,"t":{"657":{"position":[[5,5]]}}}],["issu",{"_index":23,"t":{"25":{"position":[[20,6]]}}}],["jmeter",{"_index":294,"t":{"632":{"position":[[19,8]]}}}],["join",{"_index":173,"t":{"357":{"position":[[4,4]]}}}],["k",{"_index":143,"t":{"269":{"position":[[11,1]]}}}],["key",{"_index":85,"t":{"122":{"position":[[19,4]]},"303":{"position":[[30,3]]},"391":{"position":[[5,3]]}}}],["latenc",{"_index":276,"t":{"588":{"position":[[20,8]]}}}],["law",{"_index":267,"t":{"574":{"position":[[13,3]]}}}],["level",{"_index":116,"t":{"203":{"position":[[12,5]]}}}],["liabil",{"_index":263,"t":{"568":{"position":[[17,9]]}}}],["libp2p",{"_index":176,"t":{"381":{"position":[[0,6]]}}}],["light",{"_index":33,"t":{"35":{"position":[[20,5]]},"138":{"position":[[9,5]]},"148":{"position":[[20,5]]},"164":{"position":[[9,5]]},"219":{"position":[[0,5]]},"311":{"position":[[10,5]]},"383":{"position":[[0,5]]},"385":{"position":[[0,5]]},"512":{"position":[[0,5]]}}}],["limit",{"_index":70,"t":{"99":{"position":[[0,11]]},"411":{"position":[[5,5]]},"415":{"position":[[9,7]]},"528":{"position":[[6,5]]},"568":{"position":[[3,10]]}}}],["line",{"_index":98,"t":{"154":{"position":[[8,4]]}}}],["link",{"_index":247,"t":{"538":{"position":[[15,5]]},"566":{"position":[[23,5]]}}}],["listen",{"_index":65,"t":{"87":{"position":[[0,6]]},"93":{"position":[[0,6]]},"237":{"position":[[0,9]]}}}],["log",{"_index":2,"t":{"3":{"position":[[15,4]]},"205":{"position":[[0,3]]}}}],["longer",{"_index":216,"t":{"492":{"position":[[0,6]]}}}],["look",{"_index":259,"t":{"562":{"position":[[11,7]]}}}],["maximum",{"_index":289,"t":{"619":{"position":[[12,7]]}}}],["measur",{"_index":234,"t":{"532":{"position":[[12,8]]}}}],["membership",{"_index":113,"t":{"193":{"position":[[17,10]]}}}],["messag",{"_index":17,"t":{"21":{"position":[[0,7]]},"35":{"position":[[5,8]]},"37":{"position":[[8,8]]},"39":{"position":[[9,8]]},"91":{"position":[[9,7]]},"93":{"position":[[19,8]]},"95":{"position":[[5,8]]},"120":{"position":[[18,8]]},"146":{"position":[[9,7]]},"148":{"position":[[5,8]]},"150":{"position":[[8,8]]},"170":{"position":[[9,8]]},"213":{"position":[[10,7]]},"299":{"position":[[29,7]]},"427":{"position":[[5,7]]},"429":{"position":[[5,7]]},"514":{"position":[[5,7]]},"588":{"position":[[0,7]]}}}],["method",{"_index":48,"t":{"59":{"position":[[18,6]]}}}],["metric",{"_index":124,"t":{"223":{"position":[[0,7]]}}}],["modif",{"_index":265,"t":{"572":{"position":[[3,13]]}}}],["monitor",{"_index":114,"t":{"197":{"position":[[0,7]]}}}],["mostli",{"_index":177,"t":{"387":{"position":[[0,6]]}}}],["multipl",{"_index":295,"t":{"636":{"position":[[0,8]]}}}],["name",{"_index":138,"t":{"263":{"position":[[0,6]]},"265":{"position":[[0,6]]},"297":{"position":[[19,4]]}}}],["network",{"_index":92,"t":{"140":{"position":[[12,7]]},"357":{"position":[[18,8]]},"361":{"position":[[15,7]]},"431":{"position":[[5,7]]},"439":{"position":[[0,7]]},"441":{"position":[[8,7]]},"496":{"position":[[18,7]]}}}],["new",{"_index":41,"t":{"45":{"position":[[13,3]]}}}],["node",{"_index":62,"t":{"83":{"position":[[14,4]]},"138":{"position":[[15,4]]},"164":{"position":[[15,4]]},"195":{"position":[[8,4]]},"197":{"position":[[12,4]]},"199":{"position":[[18,4]]},"207":{"position":[[8,4]]},"247":{"position":[[8,4]]},"249":{"position":[[8,4]]},"251":{"position":[[14,4]]},"253":{"position":[[18,4]]},"255":{"position":[[10,4]]},"303":{"position":[[25,4]]},"341":{"position":[[42,4]]},"361":{"position":[[23,4]]},"383":{"position":[[6,4]]},"389":{"position":[[0,4]]},"391":{"position":[[0,4]]},"636":{"position":[[9,5]]},"663":{"position":[[11,4]]}}}],["nodej",{"_index":3,"t":{"5":{"position":[[0,6]]}}}],["nois",{"_index":187,"t":{"433":{"position":[[5,5]]}}}],["non",{"_index":127,"t":{"233":{"position":[[0,3]]}}}],["nullifi",{"_index":185,"t":{"411":{"position":[[11,10]]}}}],["nwaku",{"_index":153,"t":{"313":{"position":[[4,5]]},"586":{"position":[[23,5]]},"588":{"position":[[29,5]]},"590":{"position":[[24,5]]},"597":{"position":[[0,5]]},"624":{"position":[[19,5]]},"626":{"position":[[12,5]]}}}],["offlin",{"_index":178,"t":{"387":{"position":[[7,7]]}}}],["on",{"_index":297,"t":{"636":{"position":[[17,3]]}}}],["ongo",{"_index":285,"t":{"611":{"position":[[3,7]]}}}],["option",{"_index":99,"t":{"154":{"position":[[13,7]]},"176":{"position":[[12,7]]}}}],["out",{"_index":179,"t":{"393":{"position":[[0,3]]}}}],["outsid",{"_index":239,"t":{"534":{"position":[[18,7]]}}}],["overview",{"_index":43,"t":{"49":{"position":[[0,8]]},"287":{"position":[[0,8]]},"291":{"position":[[0,8]]},"317":{"position":[[0,8]]},"321":{"position":[[0,8]]},"351":{"position":[[0,8]]}}}],["p2p",{"_index":202,"t":{"460":{"position":[[6,3]]}}}],["pagedirect",{"_index":106,"t":{"177":{"position":[[0,13]]}}}],["parti",{"_index":232,"t":{"530":{"position":[[9,5]]},"538":{"position":[[9,5]]},"566":{"position":[[9,5]]}}}],["payload",{"_index":181,"t":{"395":{"position":[[0,7]]},"429":{"position":[[13,7]]}}}],["payment",{"_index":211,"t":{"478":{"position":[[0,7]]}}}],["peer",{"_index":51,"t":{"61":{"position":[[17,5]]},"65":{"position":[[35,5]]},"67":{"position":[[21,5]]},"142":{"position":[[18,5]]},"166":{"position":[[17,5]]},"229":{"position":[[5,4]]},"267":{"position":[[37,5]]},"275":{"position":[[17,5]]},"281":{"position":[[10,4]]},"295":{"position":[[17,5]]},"397":{"position":[[0,4]]},"399":{"position":[[0,4]]},"401":{"position":[[0,4]]},"403":{"position":[[0,4]]}}}],["perform",{"_index":305,"t":{"651":{"position":[[0,11]]}}}],["person",{"_index":228,"t":{"528":{"position":[[45,8]]},"530":{"position":[[29,8]]}}}],["ping",{"_index":44,"t":{"51":{"position":[[0,7]]}}}],["polici",{"_index":250,"t":{"540":{"position":[[16,6]]}}}],["port",{"_index":14,"t":{"15":{"position":[[16,4]]}}}],["postgr",{"_index":290,"t":{"624":{"position":[[28,8]]},"626":{"position":[[24,8]]}}}],["prerequisit",{"_index":54,"t":{"71":{"position":[[0,13]]},"126":{"position":[[0,13]]},"187":{"position":[[0,13]]},"359":{"position":[[0,13]]}}}],["preserv",{"_index":145,"t":{"269":{"position":[[23,9]]}}}],["prevent",{"_index":167,"t":{"341":{"position":[[0,10]]}}}],["previou",{"_index":221,"t":{"520":{"position":[[0,8]]}}}],["price",{"_index":210,"t":{"474":{"position":[[0,7]]}}}],["prior",{"_index":199,"t":{"458":{"position":[[0,5]]}}}],["privaci",{"_index":249,"t":{"540":{"position":[[8,7]]}}}],["problem",{"_index":220,"t":{"518":{"position":[[0,7]]}}}],["process",{"_index":227,"t":{"528":{"position":[[31,10]]},"530":{"position":[[15,10]]}}}],["proof",{"_index":301,"t":{"643":{"position":[[0,5]]},"645":{"position":[[0,5]]}}}],["propag",{"_index":275,"t":{"588":{"position":[[8,11]]}}}],["properti",{"_index":262,"t":{"564":{"position":[[16,8]]}}}],["protect",{"_index":131,"t":{"233":{"position":[[41,10]]},"329":{"position":[[5,10]]},"500":{"position":[[14,10]]},"647":{"position":[[5,10]]}}}],["protocol",{"_index":73,"t":{"102":{"position":[[0,8]]},"106":{"position":[[17,9]]},"233":{"position":[[28,8]]},"267":{"position":[[0,9]]},"299":{"position":[[16,8]]},"309":{"position":[[17,8]]},"311":{"position":[[21,8]]},"351":{"position":[[12,8]]},"405":{"position":[[0,8]]},"634":{"position":[[31,9]]}}}],["provid",{"_index":27,"t":{"31":{"position":[[20,8]]}}}],["proxi",{"_index":156,"t":{"313":{"position":[[27,5]]}}}],["pseudonym",{"_index":157,"t":{"325":{"position":[[0,12]]}}}],["pub/sub",{"_index":183,"t":{"407":{"position":[[0,7]]},"409":{"position":[[0,7]]}}}],["pubsub",{"_index":191,"t":{"447":{"position":[[0,6]]}}}],["push",{"_index":34,"t":{"35":{"position":[[26,4]]},"148":{"position":[[26,4]]},"219":{"position":[[6,4]]},"311":{"position":[[16,4]]},"385":{"position":[[6,4]]},"512":{"position":[[6,4]]}}}],["qa",{"_index":279,"t":{"595":{"position":[[0,2]]}}}],["queri",{"_index":105,"t":{"176":{"position":[[6,5]]},"632":{"position":[[0,5]]},"634":{"position":[[0,5]]}}}],["querygener",{"_index":104,"t":{"174":{"position":[[0,14]]}}}],["querywithorderedcallback",{"_index":103,"t":{"172":{"position":[[0,24]]}}}],["rate",{"_index":184,"t":{"411":{"position":[[0,4]]}}}],["rc1",{"_index":277,"t":{"588":{"position":[[43,3]]}}}],["receiv",{"_index":35,"t":{"37":{"position":[[0,7]]},"150":{"position":[[0,7]]}}}],["recommend",{"_index":78,"t":{"108":{"position":[[0,15]]}}}],["regist",{"_index":111,"t":{"193":{"position":[[0,8]]}}}],["relat",{"_index":286,"t":{"611":{"position":[[11,8]]}}}],["relay",{"_index":120,"t":{"211":{"position":[[0,5]]},"233":{"position":[[4,6]]},"413":{"position":[[0,5]]},"417":{"position":[[4,5]]},"504":{"position":[[0,5]]},"506":{"position":[[4,5]]},"586":{"position":[[0,5]]},"651":{"position":[[12,5],[26,5]]}}}],["releas",{"_index":137,"t":{"259":{"position":[[7,8]]}}}],["reliabl",{"_index":67,"t":{"89":{"position":[[9,8]]}}}],["remot",{"_index":93,"t":{"142":{"position":[[11,6]]}}}],["remov",{"_index":192,"t":{"449":{"position":[[0,7]]}}}],["report",{"_index":22,"t":{"25":{"position":[[13,6]]}}}],["repositori",{"_index":87,"t":{"128":{"position":[[10,10]]},"189":{"position":[[10,10]]}}}],["reput",{"_index":212,"t":{"482":{"position":[[0,10]]}}}],["request",{"_index":128,"t":{"233":{"position":[[11,7]]}}}],["request/respons",{"_index":172,"t":{"349":{"position":[[0,16]]}}}],["research",{"_index":280,"t":{"599":{"position":[[0,8]]}}}],["resist",{"_index":166,"t":{"339":{"position":[[14,10]]}}}],["resourc",{"_index":186,"t":{"415":{"position":[[0,8]]}}}],["respect",{"_index":236,"t":{"532":{"position":[[32,7]]}}}],["respons",{"_index":129,"t":{"233":{"position":[[19,8]]}}}],["rest",{"_index":122,"t":{"221":{"position":[[0,4]]},"307":{"position":[[10,4]]}}}],["result",{"_index":213,"t":{"486":{"position":[[0,7]]},"552":{"position":[[0,7]]},"630":{"position":[[12,7]]},"632":{"position":[[11,7]]},"634":{"position":[[11,7]]}}}],["retriev",{"_index":37,"t":{"39":{"position":[[0,8]]},"67":{"position":[[0,10]]},"170":{"position":[[0,8]]}}}],["revers",{"_index":155,"t":{"313":{"position":[[19,7]]}}}],["right",{"_index":245,"t":{"536":{"position":[[20,6]]},"564":{"position":[[25,6]]}}}],["rln",{"_index":112,"t":{"193":{"position":[[13,3]]},"417":{"position":[[0,3]]},"506":{"position":[[0,3]]},"522":{"position":[[17,4]]},"649":{"position":[[0,3]]},"651":{"position":[[22,3]]}}}],["run",{"_index":57,"t":{"77":{"position":[[0,3]]},"132":{"position":[[0,3]]},"134":{"position":[[0,3]]},"195":{"position":[[0,3]]},"249":{"position":[[0,3]]},"313":{"position":[[0,3]]},"361":{"position":[[0,7]]},"663":{"position":[[0,3]]}}}],["sdk",{"_index":60,"t":{"81":{"position":[[12,3]]},"419":{"position":[[0,3]]},"665":{"position":[[16,4]]}}}],["secur",{"_index":164,"t":{"333":{"position":[[0,8]]},"532":{"position":[[3,8]]}}}],["select",{"_index":288,"t":{"619":{"position":[[0,9]]}}}],["send",{"_index":31,"t":{"35":{"position":[[0,4]]},"95":{"position":[[0,4]]},"148":{"position":[[0,4]]}}}],["server",{"_index":152,"t":{"307":{"position":[[19,6]]}}}],["servic",{"_index":169,"t":{"341":{"position":[[24,7]]},"496":{"position":[[10,7]]}}}],["setup",{"_index":8,"t":{"9":{"position":[[19,5]]},"191":{"position":[[14,5]]}}}],["shard",{"_index":189,"t":{"443":{"position":[[7,8]]},"445":{"position":[[5,8]]}}}],["share",{"_index":203,"t":{"460":{"position":[[15,7]]}}}],["sign",{"_index":84,"t":{"120":{"position":[[0,7]]}}}],["simul",{"_index":256,"t":{"550":{"position":[[0,11]]}}}],["singl",{"_index":298,"t":{"636":{"position":[[21,6]]}}}],["solut",{"_index":219,"t":{"498":{"position":[[18,8]]},"522":{"position":[[8,8]]},"605":{"position":[[3,8]]}}}],["spam",{"_index":159,"t":{"329":{"position":[[0,4]]},"339":{"position":[[9,4]]},"500":{"position":[[9,4]]},"647":{"position":[[0,4]]}}}],["specif",{"_index":77,"t":{"106":{"position":[[8,8]]}}}],["start",{"_index":20,"t":{"23":{"position":[[8,7]]},"662":{"position":[[8,7]]}}}],["statement",{"_index":260,"t":{"562":{"position":[[19,10]]}}}],["static",{"_index":50,"t":{"61":{"position":[[10,6]]},"65":{"position":[[28,6]]},"275":{"position":[[10,6]]},"443":{"position":[[0,6]]}}}],["statu",{"_index":66,"t":{"87":{"position":[[22,6]]},"255":{"position":[[22,6]]}}}],["storag",{"_index":206,"t":{"464":{"position":[[14,7]]}}}],["store",{"_index":38,"t":{"39":{"position":[[24,5]]},"122":{"position":[[0,7]]},"166":{"position":[[11,5]]},"176":{"position":[[0,5]]},"213":{"position":[[0,5],[18,5]]},"215":{"position":[[0,5]]},"299":{"position":[[10,5],[37,5]]},"301":{"position":[[10,5]]},"421":{"position":[[0,5]]},"470":{"position":[[5,5]]},"472":{"position":[[5,5]]},"510":{"position":[[0,5]]},"634":{"position":[[25,5]]}}}],["stress",{"_index":292,"t":{"628":{"position":[[0,6]]}}}],["structur",{"_index":18,"t":{"21":{"position":[[8,9]]},"91":{"position":[[17,9]]},"146":{"position":[[17,9]]}}}],["studi",{"_index":309,"t":{"661":{"position":[[5,7]]}}}],["subscript",{"_index":45,"t":{"51":{"position":[[15,13]]}}}],["suit",{"_index":90,"t":{"134":{"position":[[9,5]]}}}],["switzerland",{"_index":242,"t":{"534":{"position":[[49,11]]}}}],["symmetr",{"_index":81,"t":{"116":{"position":[[0,9]]}}}],["sync",{"_index":121,"t":{"215":{"position":[[6,4]]},"301":{"position":[[16,4]]},"649":{"position":[[9,4]]}}}],["tabl",{"_index":188,"t":{"437":{"position":[[0,5]]}}}],["take",{"_index":235,"t":{"532":{"position":[[24,4]]}}}],["target",{"_index":136,"t":{"259":{"position":[[0,6]]}}}],["templat",{"_index":42,"t":{"45":{"position":[[17,9]]}}}],["term",{"_index":217,"t":{"492":{"position":[[7,4]]},"578":{"position":[[24,5]]}}}],["test",{"_index":89,"t":{"134":{"position":[[4,4]]},"592":{"position":[[0,7]]},"628":{"position":[[7,5]]},"630":{"position":[[7,4]]},"632":{"position":[[6,4]]},"634":{"position":[[6,4]]}}}],["theori",{"_index":255,"t":{"548":{"position":[[0,6]]}}}],["third",{"_index":231,"t":{"530":{"position":[[3,5]]},"538":{"position":[[3,5]]},"566":{"position":[[3,5]]}}}],["time",{"_index":302,"t":{"643":{"position":[[17,5]]},"645":{"position":[[19,5]]}}}],["timefilt",{"_index":108,"t":{"181":{"position":[[0,10]]}}}],["tl;dr",{"_index":271,"t":{"583":{"position":[[0,5]]}}}],["tldr",{"_index":300,"t":{"641":{"position":[[0,5]]}}}],["tool",{"_index":198,"t":{"456":{"position":[[16,5]]}}}],["topic",{"_index":96,"t":{"144":{"position":[[17,5]]},"168":{"position":[[17,5]]},"267":{"position":[[27,6]]},"367":{"position":[[8,5]]},"409":{"position":[[8,5]]},"447":{"position":[[7,5]]}}}],["traffic",{"_index":149,"t":{"271":{"position":[[38,7]]}}}],["transport",{"_index":151,"t":{"305":{"position":[[20,9]]},"423":{"position":[[0,9]]}}}],["tree",{"_index":304,"t":{"649":{"position":[[4,4]]}}}],["tri",{"_index":9,"t":{"11":{"position":[[0,3]]}}}],["turnkey",{"_index":218,"t":{"498":{"position":[[10,7]]}}}],["tutori",{"_index":110,"t":{"185":{"position":[[6,8]]}}}],["type",{"_index":193,"t":{"451":{"position":[[0,4]]}}}],["union",{"_index":241,"t":{"534":{"position":[[39,5]]}}}],["us",{"_index":32,"t":{"35":{"position":[[14,5]]},"37":{"position":[[17,5]]},"39":{"position":[[18,5]]},"148":{"position":[[14,5]]},"150":{"position":[[17,5]]},"528":{"position":[[69,3]]},"578":{"position":[[33,3]]},"626":{"position":[[18,5]]},"659":{"position":[[17,4]]},"665":{"position":[[10,5]]}}}],["usag",{"_index":39,"t":{"43":{"position":[[0,5]]},"586":{"position":[[16,6]]},"590":{"position":[[17,6]]},"617":{"position":[[27,5]]}}}],["user",{"_index":146,"t":{"269":{"position":[[33,4]]}}}],["util",{"_index":196,"t":{"453":{"position":[[17,7]]}}}],["v0.34.0",{"_index":274,"t":{"586":{"position":[[29,7]]},"588":{"position":[[35,7]]},"590":{"position":[[30,7]]}}}],["v2",{"_index":223,"t":{"522":{"position":[[22,3]]}}}],["valid",{"_index":13,"t":{"13":{"position":[[18,8]]}}}],["valu",{"_index":102,"t":{"160":{"position":[[22,6]]}}}],["variabl",{"_index":100,"t":{"156":{"position":[[12,9]]}}}],["verif",{"_index":303,"t":{"645":{"position":[[6,12]]}}}],["video",{"_index":109,"t":{"185":{"position":[[0,5]]}}}],["vs",{"_index":306,"t":{"651":{"position":[[18,3]]}}}],["waku",{"_index":26,"t":{"31":{"position":[[15,4]]},"81":{"position":[[7,4]]},"83":{"position":[[9,4]]},"229":{"position":[[0,4]]},"357":{"position":[[13,4]]},"361":{"position":[[10,4]]},"425":{"position":[[0,4]]},"427":{"position":[[0,4]]},"429":{"position":[[0,4]]},"431":{"position":[[0,4]]},"433":{"position":[[0,4]]},"466":{"position":[[0,4]]},"468":{"position":[[0,4]]},"470":{"position":[[0,4]]},"472":{"position":[[0,4]]},"496":{"position":[[0,4]]},"498":{"position":[[0,4]]},"514":{"position":[[0,4]]},"657":{"position":[[11,5]]},"659":{"position":[[9,4]]},"663":{"position":[[6,4]]}}}],["websit",{"_index":229,"t":{"528":{"position":[[80,7]]},"532":{"position":[[47,7]]},"566":{"position":[[15,7]]},"578":{"position":[[16,7]]}}}],["websocat",{"_index":10,"t":{"11":{"position":[[4,8]]}}}],["websocket",{"_index":7,"t":{"9":{"position":[[9,9]]},"15":{"position":[[6,9]]},"231":{"position":[[0,9]]},"305":{"position":[[10,9]]}}}],["work",{"_index":200,"t":{"458":{"position":[[6,4]]},"476":{"position":[[7,4]]},"480":{"position":[[7,4]]},"484":{"position":[[7,4]]},"488":{"position":[[7,4]]},"492":{"position":[[19,4]]},"520":{"position":[[9,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":1,"t":"This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.","s":"Debug Your Waku DApp and WebSocket","u":"/guides/js-waku/debug-waku-dapp","p":1},{"i":17,"t":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","s":"JavaScript Waku SDK","u":"/guides/js-waku/","p":17},{"i":27,"t":"Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.","s":"Build React DApps Using @waku/react","u":"/guides/js-waku/use-waku-react","p":27},{"i":41,"t":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","s":"Scaffold DApps Using @waku/create-app","u":"/guides/js-waku/use-waku-create-app","p":41},{"i":47,"t":"This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.","s":"Manage Your Filter Subscriptions","u":"/guides/js-waku/manage-filter","p":47},{"i":53,"t":"You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started.","s":"JavaScript SDK FAQ","u":"/guides/js-waku/faq","p":53},{"i":55,"t":"Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source.","s":"Nwaku FAQ","u":"/guides/nwaku/faq","p":55},{"i":57,"t":"This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery.","s":"Bootstrap Nodes and Discover Peers","u":"/guides/js-waku/configure-discovery","p":57},{"i":69,"t":"This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.","s":"Run Nwaku in a Docker Container","u":"/guides/nwaku/run-docker","p":69},{"i":79,"t":"Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box.","s":"Send and Receive Messages in a Reliable Channel","u":"/guides/js-waku/reliable-channels","p":79},{"i":97,"t":"While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.","s":"Run @waku/sdk in a NodeJS Application","u":"/guides/js-waku/run-waku-nodejs","p":97},{"i":112,"t":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods.","s":"Encrypt, Decrypt, and Sign Your Messages","u":"/guides/js-waku/message-encryption","p":112},{"i":124,"t":"This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead.","s":"Build Nwaku from Source","u":"/guides/nwaku/build-source","p":124},{"i":136,"t":"This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.","s":"Send and Receive Messages Using Light Push and Filter","u":"/guides/js-waku/light-send-receive","p":136},{"i":152,"t":"Waku nodes can be configured using a combination of the following methods:","s":"Node Configuration Methods","u":"/guides/nwaku/config-methods","p":152},{"i":162,"t":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","s":"Retrieve Messages Using Store Protocol","u":"/guides/js-waku/store-retrieve-messages","p":162},{"i":183,"t":"nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically:","s":"Run Nwaku with Docker Compose","u":"/guides/nwaku/run-docker-compose","p":183},{"i":201,"t":"Here are the available node configuration options, along with their default values and descriptions:","s":"Node Configuration Options","u":"/guides/nwaku/config-options","p":201},{"i":235,"t":"When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level.","s":"Find Your Node Address","u":"/guides/nwaku/find-node-address","p":235},{"i":245,"t":"Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources.","s":"Run a Nwaku Node","u":"/guides/nwaku/run-node","p":245},{"i":257,"t":"If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order.","s":"Upgrade Instructions","u":"/guides/nwaku/upgrade-instructions","p":257},{"i":261,"t":"Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.","s":"Content Topics","u":"/learn/concepts/content-topics","p":261},{"i":273,"t":"This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network.","s":"Configure Peer Discovery","u":"/guides/nwaku/configure-discovery","p":273},{"i":283,"t":"When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping.","s":"Peer Discovery","u":"/learn/concepts/peer-discovery","p":283},{"i":285,"t":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more.","s":"Discv5","u":"/learn/concepts/discv5","p":285},{"i":289,"t":"Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr.","s":"DNS Discovery","u":"/learn/concepts/dns-discovery","p":289},{"i":293,"t":"This guide provides detailed steps to configure a nwaku node for different use cases.","s":"Node Configuration Examples","u":"/guides/nwaku/configure-nwaku","p":293},{"i":315,"t":"The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network.","s":"Peer Exchange","u":"/learn/concepts/peer-exchange","p":315},{"i":319,"t":"Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node.","s":"Static Peers","u":"/learn/concepts/static-peers","p":319},{"i":323,"t":"Waku's protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol's security guarantees and limitations.","s":"Security Features","u":"/learn/security-features","p":323},{"i":335,"t":"Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery.","s":"Transports","u":"/learn/concepts/transports","p":335},{"i":337,"t":"The following features are currently experimental and under research and initial implementation:","s":"Research","u":"/learn/research","p":337},{"i":343,"t":"Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.","s":"Network Domains","u":"/learn/concepts/network-domains","p":343},{"i":353,"t":"Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node.","s":"Waku FAQ","u":"/learn/faq","p":353},{"i":355,"t":"The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include:","s":"The Waku Network","u":"/learn/waku-network","p":355},{"i":363,"t":"Definitions and usage of the terminology used in the Waku ecosystem.","s":"Waku Docs Glossary","u":"/learn/glossary","p":363},{"i":435,"t":"A migration guide for refactoring your application code from Waku v0.026 to v0.027.","s":"Migrating to Waku v0.027","u":"/migrations/js-waku/migration_v0.026_0.027","p":435},{"i":455,"t":"Waku is a family of decentralised communication protocols. The Waku Network (TWN) consists of independent nodes running Waku protocols. TWN needs incentivisation (shortened to i13n) to ensure proper node behaviour.","s":"Incentivisation in decentralised networks","u":"/research/research-and-studies/incentivisation","p":455},{"i":494,"t":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","s":"Comparing Waku and libp2p","u":"/learn/waku-vs-libp2p","p":494},{"i":502,"t":"Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:","s":"Protocols","u":"/learn/concepts/protocols","p":502},{"i":516,"t":"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.","s":"Capped Bandwidth in Waku","u":"/research/research-and-studies/capped-bandwidth","p":516},{"i":524,"t":"Last updated: 9 February 2024","s":"Privacy Policy","u":"/privacy-policy","p":524},{"i":544,"t":"TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it's affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.","s":"Message Propagation Times With Waku-RLN","u":"/research/research-and-studies/message-propagation","p":544},{"i":554,"t":"Research and Studies: Protocol simulations and theoretical analysis to support the design of Waku protocols. The protocol definitions are on the Waku RFCs website.","s":"Research","u":"/research/","p":554},{"i":556,"t":"Last updated: 14 February 2024","s":"Terms of Use","u":"/terms","p":556},{"i":580,"t":"Introduction","s":"Performance Benchmarks and Test Reports","u":"/research/benchmarks/test-results-summary","p":580},{"i":601,"t":"Waku is a nascent technology and the Waku community is still growing. Hence, the Waku team is keen to work closely with projects to help leverage Waku technology to drive the success of their own applications.","s":"Rules of Engagement","u":"/rules-of-engagement","p":601},{"i":613,"t":"TLDR//github.com/waku-org/research/issues/22 to specify how this maximum will be enforced.","s":"Maximum Bandwidth for Global Adoption","u":"/research/research-and-studies/maximum-bandwidth","p":613},{"i":621,"t":"Document that describes why Nim-Waku started to use Postgres and shows some benchmark and comparison results.","s":"PostgreSQL","u":"/research/benchmarks/postgres-adoption","p":621},{"i":638,"t":"Introduction","s":"RLN Key Benchmarks","u":"/research/research-and-studies/rln-key-benchmarks","p":638},{"i":653,"t":"We take security seriously at Waku and across the Institute of Free Technology and its affiliates.","s":"Security","u":"/security","p":653},{"i":655,"t":"Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy.","s":"Introduction to Waku","u":"/","p":655}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,1.141,1,1.141,2,1.412,3,1.494,4,1.79,5,0.978,6,3.486,7,2.986,8,3.486,9,0.642,10,2.986,11,3.486,12,2.986,13,2.986,14,2.657,15,2.411,16,3.486,17,2.052,18,1.494]],["t/17",[9,0.722,19,2.713,20,2.989,21,2.492,22,2.492,23,3.359,24,4.479,25,4.479,26,3.359,27,2.989,28,2.713,29,3.359]],["t/27",[9,0.722,19,2.713,20,2.989,21,2.492,22,2.492,23,3.359,24,4.479,25,4.479,26,3.359,27,2.989,28,2.713,29,3.359]],["t/41",[0,1.252,1,1.252,2,1.55,3,1.64,5,1.073,22,2.431,30,2.431,31,3.826,32,2.647,33,3.277,34,3.826,35,3.826,36,3.826,37,3.826,38,2.647]],["t/47",[0,1.446,1,1.007,2,1.246,3,1.318,5,1.239,39,3.076,40,3.577,41,3.076,42,3.076,43,0.739,44,3.076,45,1.687,46,2.128,47,2.128,48,2.128,49,1.397,50,3.057,51,3.785,52,1.246]],["t/53",[0,1.317,5,1.128,15,2.782,20,3.066,21,2.556,27,3.066,32,2.782,53,4.022,54,4.022,55,4.022,56,2.782,57,3.446,58,2.556]],["t/55",[0,1.446,15,3.057,18,1.894,43,1.062,56,2.128,59,2.655,60,2.345,61,2.345,62,1.955,63,3.076,64,3.076,65,3.076,66,2.635,67,2.635,68,2.635,69,2.635,70,2.635,71,2.345,72,2.345]],["t/57",[0,1.222,1,1.222,2,1.513,3,1.601,5,1.419,9,0.687,30,2.373,43,0.898,73,3.199,74,2.598,75,3.199,76,1.601,77,3.199,78,2.373]],["t/69",[0,1.51,1,1.07,2,1.324,3,1.401,18,1.977,43,0.785,59,2.369,60,3.517,61,2.491,71,2.491,79,3.268,80,3.268,81,2.8,82,1.792,83,2.8,84,2.8,85,3.268,86,2.8]],["t/79",[1,1.351,21,2.623,33,3.536,47,2.856,48,2.856,49,1.875,56,2.856,62,2.623,87,3.536,88,4.128,89,3.536,90,4.128]],["t/97",[0,1.092,1,1.092,5,1.313,12,4.011,13,2.859,14,2.544,22,2.976,38,2.309,45,1.831,66,2.859,91,3.337,92,2.859,93,3.337,94,2.121,95,2.859,96,3.337,97,3.337,98,3.337]],["t/112",[0,1.167,1,1.167,2,1.445,3,1.528,5,1.375,9,0.656,38,2.466,49,2.226,99,3.565,100,5.602,101,3.565,102,3.565,103,3.565,104,3.054]],["t/124",[0,1.027,1,1.027,2,1.271,3,1.345,18,1.921,43,0.754,69,2.688,70,2.688,71,2.391,72,2.391,81,2.688,87,2.688,105,2.688,106,2.688,107,3.137,108,2.391,109,2.688,110,2.391,111,3.137,112,2.688,113,2.391,114,3.137,115,3.137]],["t/136",[0,1.351,1,0.917,2,1.135,3,1.769,5,1.375,22,2.623,32,1.938,38,1.938,40,1.938,43,0.673,46,1.938,47,1.938,48,1.938,49,1.875,50,2.856,51,2.4,52,1.673,57,2.4,58,1.78,116,2.135,117,2.801,118,2.801]],["t/152",[5,1.333,9,0.875,43,1.142,82,2.607,104,4.072,119,4.753,120,3.288]],["t/162",[0,1.284,1,1.284,2,1.589,3,1.681,5,1.1,40,2.713,43,0.942,49,1.781,50,2.713,52,1.589,121,3.921,122,2.713,123,3.359,124,2.989]],["t/183",[5,1.222,18,1.867,60,3.321,61,4.27,82,2.39,83,3.733,120,3.014,125,4.357,126,4.357]],["t/201",[43,1.077,68,3.839,82,2.458,127,3.839,128,3.839,129,4.481,130,4.481,131,4.481,132,4.481]],["t/235",[7,3.632,18,1.817,43,1.019,58,2.694,78,2.694,133,4.239,134,4.239,135,4.239,136,3.632,137,4.239,138,3.632]],["t/245",[4,1.491,9,0.535,18,1.817,28,2.01,43,1.019,52,1.177,59,2.176,82,1.593,84,2.488,113,2.214,128,2.488,139,2.905,140,2.214,141,2.488,142,2.905,143,2.905,144,2.905,145,2.905,146,2.905,147,2.488,148,2.488,149,2.905,150,2.488,151,2.905,152,2.214]],["t/257",[5,0.898,18,1.372,19,3.145,43,0.769,59,2.334,109,3.895,112,2.742,113,2.44,120,2.215,153,3.201,154,3.201,155,3.201,156,3.201,157,2.742,158,3.201,159,2.742,160,3.201,161,3.201,162,3.201,163,3.201]],["t/261",[40,2.782,46,1.871,49,2.181,52,1.096,62,1.719,108,2.062,110,3.066,116,2.062,122,1.871,123,2.317,124,2.062,138,2.317,148,2.317,164,2.704,165,4.022,166,2.704,167,2.704,168,2.704,169,2.317,170,1.871,171,2.317,172,2.704,173,2.704,174,2.704,175,2.704,176,2.704,177,2.317]],["t/273",[0,1.351,1,1.351,2,1.673,3,1.769,9,0.76,17,2.43,18,1.769,43,0.992,74,2.119,75,3.536,76,1.769,82,2.264]],["t/283",[4,1.751,9,0.628,17,2.007,30,2.167,43,0.82,47,2.359,48,2.359,49,1.549,74,2.44,76,1.462,78,2.167,122,2.359,171,2.921,178,3.41,179,2.921,180,2.921,181,3.41,182,3.41,183,3.41]],["t/285",[1,1.104,4,1.103,5,0.946,9,0.395,30,1.366,43,1.001,46,1.486,62,1.366,74,1.103,76,1.446,78,1.366,110,1.638,116,1.638,124,1.638,177,1.841,180,1.841,184,3.568,185,1.638,186,1.841,187,2.89,188,2.149,189,2.149,190,2.149,191,1.841,192,2.149,193,1.841,194,1.841,195,1.638,196,2.149,197,2.149,198,2.149,199,2.149,200,2.149,201,2.149,202,2.149,203,2.149,204,2.149,205,2.149,206,2.149]],["t/289",[2,1.115,4,1.413,17,1.62,43,0.979,77,3.49,78,2.589,122,1.904,191,2.357,207,2.357,208,2.752,209,2.357,210,2.752,211,2.752,212,2.752,213,2.357,214,2.752,215,2.752,216,2.752,217,2.357,218,2.752,219,2.752,220,2.357,221,2.752,222,2.752,223,2.357,224,2.752,225,2.752,226,2.752]],["t/293",[0,1.426,1,1.426,2,1.766,3,1.867,5,1.222,18,1.867,43,1.047,82,2.39,227,3.014,228,4.357]],["t/315",[4,1.643,17,1.884,43,1.093,50,2.215,52,1.842,74,2.714,76,1.372,94,2.034,152,2.44,169,2.742,184,2.742,229,3.201,230,3.201,231,2.742,232,2.742,233,3.201,234,3.201,235,3.201,236,3.201]],["t/319",[5,1.023,9,0.671,30,2.318,43,1.197,45,2.001,59,1.873,73,3.125,74,1.873,108,2.781,136,3.125,147,3.125,237,3.125,238,3.648,239,3.648,240,3.648,241,3.648]],["t/323",[1,0.885,9,0.74,52,1.63,72,2.062,94,1.719,95,2.317,159,2.317,195,2.062,227,1.871,242,2.704,243,2.704,244,2.704,245,4.053,246,2.704,247,2.704,248,2.317,249,2.704,250,2.317,251,2.704,252,2.704,253,2.317,254,2.704,255,2.317,256,2.704,257,2.704,258,2.704,259,2.704]],["t/335",[17,2.007,52,1.382,74,1.751,76,2.037,186,2.921,260,3.41,261,2.921,262,3.41,263,4.753,264,3.41,265,3.41,266,2.599,267,3.41,268,3.41,269,2.921,270,3.41,271,3.41,272,3.41]],["t/337",[19,3.192,120,3.192,170,3.192,273,4.613,274,4.613,275,3.952,276,4.613,277,4.613]],["t/343",[9,0.849,76,1.401,89,2.8,140,2.491,195,2.491,209,2.8,217,3.952,278,3.268,279,3.268,280,3.268,281,3.268,282,2.8,283,3.268,284,3.268,285,3.268,286,3.268,287,3.268,288,3.268,289,3.268,290,3.268]],["t/353",[0,1.351,9,0.76,15,2.856,21,2.623,43,0.992,56,2.856,58,2.623,59,2.119,62,2.623,67,3.536,291,4.128,292,4.128]],["t/355",[5,0.917,9,0.601,49,2.095,76,1.977,106,3.952,152,2.491,170,2.261,223,2.8,231,2.8,253,2.8,293,2.8,294,3.268,295,3.268,296,2.8,297,3.268,298,2.8,299,3.268,300,3.268,301,3.268]],["t/363",[5,1.375,9,0.902,282,4.199,302,4.199,303,4.902,304,4.199]],["t/435",[0,1.51,9,0.849,45,2.531,105,3.952,157,3.952,305,4.613,306,4.613,307,4.613]],["t/455",[9,0.973,43,1.093,52,1.842,59,1.643,76,1.372,150,2.742,185,2.44,269,2.742,308,2.742,309,2.44,310,4.546,311,3.201,312,3.201,313,3.201,314,3.201,315,3.201,316,3.201,317,3.201]],["t/494",[9,0.722,207,3.359,227,2.713,266,3.986,293,3.359,304,3.359,318,3.921,319,3.921,320,3.921,321,3.921,322,3.921,323,3.921,324,3.921]],["t/502",[1,1.3,4,1.365,9,0.731,45,2.178,52,1.609,127,2.278,220,2.278,237,2.278,255,2.278,266,2.027,298,2.278,325,2.278,326,2.659,327,2.659,328,2.659,329,2.659,330,2.659,331,2.659,332,3.971,333,2.659,334,2.659,335,2.659,336,2.659,337,2.659,338,2.659,339,2.659,340,2.659,341,2.659]],["t/516",[9,0.704,76,1.64,94,2.431,179,3.277,342,3.826,343,3.826,344,3.826,345,3.826,346,3.277,347,3.826,348,3.826,349,3.277,350,3.826,351,3.277,352,3.826]],["t/524",[353,4.335,354,4.335,355,5.06,356,4.335,357,4.335]],["t/544",[5,0.815,9,0.328,14,1.359,18,0.764,43,0.428,49,2.397,59,0.915,76,1.245,86,1.527,94,1.133,187,1.527,227,1.233,346,1.527,349,1.527,351,2.488,358,1.782,359,1.782,360,1.527,361,1.782,362,3.676,363,2.905,364,4.239,365,1.782,366,1.527,367,3.676,368,1.782,369,2.905,370,2.905,371,1.782,372,1.782,373,2.905,374,1.782,375,1.782,376,1.782,377,1.782,378,1.782,379,1.782,380,1.782,381,1.782,382,1.782,383,1.527,384,1.782]],["t/554",[9,0.947,28,2.647,52,2.354,92,3.277,250,3.277,275,3.277,302,3.277,366,3.277,383,3.277,385,3.826,386,3.826,387,3.826]],["t/556",[353,4.335,354,4.335,356,4.335,357,4.335,388,5.06]],["t/580",[389,4.977]],["t/601",[9,1.079,32,2.309,45,1.831,261,2.859,309,2.544,390,3.337,391,4.011,392,3.337,393,3.337,394,3.337,395,3.337,396,3.337,397,3.337,398,3.337,399,3.337,400,3.337,401,3.337]],["t/613",[402,5.06,403,5.06,404,5.06,405,5.06,406,5.06]],["t/621",[5,1.189,9,0.78,58,2.694,141,3.632,248,3.632,360,3.632,407,4.239,408,4.239,409,4.239,410,4.239,411,4.239]],["t/638",[389,4.977]],["t/653",[9,0.849,245,3.517,325,3.952,391,3.952,412,4.613,413,4.613,414,4.613,415,4.613]],["t/655",[4,1.579,9,0.566,10,2.635,45,1.687,49,1.397,52,1.246,74,2.268,140,2.345,170,2.128,185,2.345,193,2.635,194,2.635,213,2.635,232,2.635,245,2.345,296,3.785,308,2.635,309,3.368,416,3.076,417,3.076,418,3.076,419,3.076]]],"invertedIndex":[["1000",{"_index":361,"t":{"544":{"position":[[32,4]]}}}],["10kb",{"_index":371,"t":{"544":{"position":[[330,4]]}}}],["14",{"_index":388,"t":{"556":{"position":[[14,2]]}}}],["1459",{"_index":211,"t":{"289":{"position":[[33,5]]}}}],["2024",{"_index":357,"t":{"524":{"position":[[25,4]]},"556":{"position":[[26,4]]}}}],["500kb",{"_index":382,"t":{"544":{"position":[[574,6]]}}}],["508",{"_index":374,"t":{"544":{"position":[[379,3]]}}}],["9",{"_index":355,"t":{"524":{"position":[[14,1]]}}}],["access",{"_index":106,"t":{"124":{"position":[[81,6]]},"355":{"position":[[64,7],[139,10]]}}}],["achiev",{"_index":179,"t":{"283":{"position":[[120,7]]},"516":{"position":[[96,7]]}}}],["ad",{"_index":118,"t":{"136":{"position":[[246,6]]}}}],["add",{"_index":27,"t":{"17":{"position":[[95,3]]},"27":{"position":[[95,3]]},"53":{"position":[[8,3]]}}}],["address",{"_index":136,"t":{"235":{"position":[[82,9]]},"319":{"position":[[63,9]]}}}],["affect",{"_index":369,"t":{"544":{"position":[[235,8],[456,8]]}}}],["affili",{"_index":415,"t":{"653":{"position":[[87,11]]}}}],["aim",{"_index":251,"t":{"323":{"position":[[177,6]]}}}],["allow",{"_index":213,"t":{"289":{"position":[[77,6]]},"655":{"position":[[148,8]]}}}],["along",{"_index":129,"t":{"201":{"position":[[51,5]]}}}],["analysi",{"_index":386,"t":{"554":{"position":[[59,8]]}}}],["anonym",{"_index":332,"t":{"502":{"position":[[129,9],[251,10]]}}}],["app",{"_index":37,"t":{"41":{"position":[[130,3]]}}}],["applic",{"_index":45,"t":{"47":{"position":[[105,12]]},"97":{"position":[[103,12]]},"319":{"position":[[5,12]]},"435":{"position":[[39,11]]},"502":{"position":[[74,12],[175,12]]},"601":{"position":[[196,13]]},"655":{"position":[[134,13]]}}}],["approach",{"_index":220,"t":{"289":{"position":[[166,8]]},"502":{"position":[[21,9]]}}}],["ascend",{"_index":162,"t":{"257":{"position":[[202,9]]}}}],["automat",{"_index":126,"t":{"183":{"position":[[83,14]]}}}],["avail",{"_index":128,"t":{"201":{"position":[[13,9]]},"245":{"position":[[263,9]]}}}],["averag",{"_index":372,"t":{"544":{"position":[[339,7]]}}}],["balanc",{"_index":339,"t":{"502":{"position":[[235,7]]}}}],["bandwidth",{"_index":346,"t":{"516":{"position":[[61,9]]},"544":{"position":[[115,9]]}}}],["base",{"_index":149,"t":{"245":{"position":[[224,5]]}}}],["behaviour",{"_index":317,"t":{"455":{"position":[[204,10]]}}}],["below",{"_index":156,"t":{"257":{"position":[[106,5]]}}}],["benchmark",{"_index":410,"t":{"621":{"position":[[76,9]]}}}],["between",{"_index":266,"t":{"335":{"position":[[79,7]]},"494":{"position":[[85,7],[134,7]]},"502":{"position":[[243,7]]}}}],["binari",{"_index":70,"t":{"55":{"position":[[205,8]]},"124":{"position":[[223,6]]}}}],["bootstrap",{"_index":30,"t":{"41":{"position":[[38,9]]},"57":{"position":[[38,9]]},"283":{"position":[[231,14]]},"285":{"position":[[295,9]]},"319":{"position":[[48,9]]}}}],["box",{"_index":90,"t":{"79":{"position":[[118,4]]}}}],["browser",{"_index":13,"t":{"1":{"position":[[119,7]]},"97":{"position":[[54,7]]}}}],["build",{"_index":71,"t":{"55":{"position":[[218,8]]},"69":{"position":[[38,5]]},"124":{"position":[[38,5]]}}}],["built",{"_index":207,"t":{"289":{"position":[[0,5]]},"494":{"position":[[14,5]]}}}],["cap",{"_index":345,"t":{"516":{"position":[[54,6]]}}}],["case",{"_index":228,"t":{"293":{"position":[[79,6]]}}}],["cdn",{"_index":55,"t":{"53":{"position":[[69,4]]}}}],["censorship",{"_index":194,"t":{"285":{"position":[[175,11]]},"655":{"position":[[28,10]]}}}],["certain",{"_index":93,"t":{"97":{"position":[[135,7]]}}}],["check",{"_index":15,"t":{"1":{"position":[[143,5]]},"53":{"position":[[74,5]]},"55":{"position":[[0,5],[116,5]]},"353":{"position":[[0,5]]}}}],["choic",{"_index":336,"t":{"502":{"position":[[205,7]]}}}],["client",{"_index":142,"t":{"245":{"position":[[38,6]]}}}],["close",{"_index":398,"t":{"601":{"position":[[107,7]]}}}],["code",{"_index":105,"t":{"124":{"position":[[73,4]]},"435":{"position":[[51,4]]}}}],["codebas",{"_index":240,"t":{"319":{"position":[[93,9]]}}}],["cohes",{"_index":279,"t":{"343":{"position":[[22,8]]}}}],["combin",{"_index":119,"t":{"152":{"position":[[37,11]]}}}],["commit",{"_index":111,"t":{"124":{"position":[[133,6]]}}}],["commun",{"_index":309,"t":{"455":{"position":[[34,13]]},"601":{"position":[[42,9]]},"655":{"position":[[63,13],[188,13]]}}}],["comparison",{"_index":411,"t":{"621":{"position":[[90,10]]}}}],["compat",{"_index":23,"t":{"17":{"position":[[54,10]]},"27":{"position":[[54,10]]}}}],["compil",{"_index":114,"t":{"124":{"position":[[214,8]]}}}],["compos",{"_index":61,"t":{"55":{"position":[[36,7]]},"69":{"position":[[184,7]]},"183":{"position":[[6,7],[39,7]]}}}],["comprehens",{"_index":66,"t":{"55":{"position":[[126,13]]},"97":{"position":[[213,13]]}}}],["compromis",{"_index":419,"t":{"655":{"position":[[234,12]]}}}],["concept",{"_index":321,"t":{"494":{"position":[[58,8]]}}}],["configur",{"_index":82,"t":{"69":{"position":[[108,10]]},"152":{"position":[[18,10]]},"183":{"position":[[58,10]]},"201":{"position":[[28,13]]},"245":{"position":[[146,13]]},"273":{"position":[[38,9]]},"293":{"position":[[38,9]]}}}],["connect",{"_index":17,"t":{"1":{"position":[[164,11]]},"273":{"position":[[77,7]]},"283":{"position":[[39,7]]},"289":{"position":[[213,10]]},"315":{"position":[[61,12]]},"335":{"position":[[67,11]]}}}],["consider",{"_index":95,"t":{"97":{"position":[[159,14]]},"323":{"position":[[61,15]]}}}],["consist",{"_index":311,"t":{"455":{"position":[[82,8]]}}}],["contain",{"_index":79,"t":{"69":{"position":[[77,10]]}}}],["content",{"_index":164,"t":{"261":{"position":[[0,7]]}}}],["contribut",{"_index":289,"t":{"343":{"position":[[161,10]]}}}],["control",{"_index":328,"t":{"502":{"position":[[90,7]]}}}],["conveni",{"_index":87,"t":{"79":{"position":[[46,10]]},"124":{"position":[[170,12]]}}}],["creat",{"_index":121,"t":{"162":{"position":[[38,6]]}}}],["criteria",{"_index":175,"t":{"261":{"position":[[249,9]]}}}],["current",{"_index":19,"t":{"17":{"position":[[0,10]]},"27":{"position":[[0,10]]},"257":{"position":[[11,9],[175,7]]},"337":{"position":[[27,9]]}}}],["dapp",{"_index":10,"t":{"1":{"position":[[90,5]]},"655":{"position":[[221,4]]}}}],["dashboard",{"_index":85,"t":{"69":{"position":[[143,10]]}}}],["data",{"_index":263,"t":{"335":{"position":[[21,4],[185,4]]}}}],["debug",{"_index":6,"t":{"1":{"position":[[53,5]]}}}],["decentralis",{"_index":185,"t":{"285":{"position":[[12,13]]},"455":{"position":[[20,13]]},"655":{"position":[[174,13]]}}}],["decrypt",{"_index":101,"t":{"112":{"position":[[91,8]]}}}],["default",{"_index":130,"t":{"201":{"position":[[68,7]]}}}],["defin",{"_index":267,"t":{"335":{"position":[[99,6]]}}}],["definit",{"_index":302,"t":{"363":{"position":[[0,11]]},"554":{"position":[[122,11]]}}}],["delay",{"_index":364,"t":{"544":{"position":[[149,7],[202,5],[370,5],[436,6]]}}}],["deliveri",{"_index":272,"t":{"335":{"position":[[190,9]]}}}],["describ",{"_index":407,"t":{"621":{"position":[[14,9]]}}}],["descript",{"_index":132,"t":{"201":{"position":[[87,13]]}}}],["design",{"_index":92,"t":{"97":{"position":[[41,8]]},"554":{"position":[[83,6]]}}}],["desir",{"_index":338,"t":{"502":{"position":[[227,7]]}}}],["detail",{"_index":2,"t":{"1":{"position":[[20,8]]},"41":{"position":[[20,8]]},"47":{"position":[[20,8]]},"57":{"position":[[20,8]]},"69":{"position":[[20,8]]},"112":{"position":[[20,8]]},"124":{"position":[[20,8]]},"136":{"position":[[20,8]]},"162":{"position":[[20,8]]},"273":{"position":[[20,8]]},"289":{"position":[[224,8]]},"293":{"position":[[20,8]]}}}],["develop",{"_index":108,"t":{"124":{"position":[[99,11]]},"261":{"position":[[43,10]]},"319":{"position":[[103,10]]}}}],["devic",{"_index":231,"t":{"315":{"position":[[95,7]]},"355":{"position":[[178,8]]}}}],["dht",{"_index":190,"t":{"285":{"position":[[120,5]]}}}],["differ",{"_index":227,"t":{"293":{"position":[[65,9]]},"323":{"position":[[29,9]]},"494":{"position":[[122,11]]},"544":{"position":[[67,9]]}}}],["directli",{"_index":239,"t":{"319":{"position":[[73,8]]}}}],["disconnect",{"_index":44,"t":{"47":{"position":[[82,14]]}}}],["discov",{"_index":75,"t":{"57":{"position":[[86,8]]},"273":{"position":[[64,8]]}}}],["discoveri",{"_index":78,"t":{"57":{"position":[[131,10]]},"235":{"position":[[72,9]]},"283":{"position":[[136,9]]},"285":{"position":[[45,9]]},"289":{"position":[[44,9],[67,9]]}}}],["discv5",{"_index":184,"t":{"285":{"position":[[0,6],[187,6],[419,6]]},"315":{"position":[[122,7]]}}}],["display",{"_index":133,"t":{"235":{"position":[[35,7]]}}}],["distinct",{"_index":284,"t":{"343":{"position":[[78,8]]}}}],["distribut",{"_index":187,"t":{"285":{"position":[[97,11],[273,13]]},"544":{"position":[[208,13]]}}}],["dn",{"_index":77,"t":{"57":{"position":[[127,3]]},"289":{"position":[[58,4],[63,3]]}}}],["docker",{"_index":60,"t":{"55":{"position":[[29,6]]},"69":{"position":[[70,6],[177,6]]},"183":{"position":[[32,6]]}}}],["document",{"_index":248,"t":{"323":{"position":[[118,8]]},"621":{"position":[[0,8]]}}}],["domain",{"_index":217,"t":{"289":{"position":[[137,6]]},"343":{"position":[[107,8],[122,7]]}}}],["download",{"_index":69,"t":{"55":{"position":[[193,11]]},"124":{"position":[[199,8]]}}}],["drive",{"_index":400,"t":{"601":{"position":[[165,5]]}}}],["each",{"_index":159,"t":{"257":{"position":[[139,4]]},"323":{"position":[[274,4]]}}}],["ecosystem",{"_index":282,"t":{"343":{"position":[[57,9]]},"363":{"position":[[58,10]]}}}],["effici",{"_index":186,"t":{"285":{"position":[[30,9]]},"335":{"position":[[140,9]]}}}],["eg",{"_index":381,"t":{"544":{"position":[[570,3]]}}}],["eip",{"_index":210,"t":{"289":{"position":[[29,3]]}}}],["emb",{"_index":238,"t":{"319":{"position":[[42,5]]}}}],["employ",{"_index":181,"t":{"283":{"position":[[159,8]]}}}],["empow",{"_index":255,"t":{"323":{"position":[[240,8]]},"502":{"position":[[166,8]]}}}],["enabl",{"_index":4,"t":{"1":{"position":[[38,6]]},"245":{"position":[[160,8]]},"283":{"position":[[67,6]]},"285":{"position":[[239,8]]},"289":{"position":[[175,7]]},"315":{"position":[[157,7]]},"502":{"position":[[67,6]]},"655":{"position":[[92,6]]}}}],["encrypt",{"_index":100,"t":{"112":{"position":[[60,10],[82,8],[150,10]]}}}],["end",{"_index":373,"t":{"544":{"position":[[347,3],[354,3]]}}}],["enforc",{"_index":406,"t":{"613":{"position":[[81,9]]}}}],["enr",{"_index":191,"t":{"285":{"position":[[138,3]]},"289":{"position":[[104,3]]}}}],["ensur",{"_index":269,"t":{"335":{"position":[[133,6]]},"455":{"position":[[185,6]]}}}],["entiti",{"_index":280,"t":{"343":{"position":[[31,6]]}}}],["entri",{"_index":202,"t":{"285":{"position":[[317,5]]}}}],["environ",{"_index":14,"t":{"1":{"position":[[127,11]]},"97":{"position":[[62,13]]},"544":{"position":[[285,12]]}}}],["equip",{"_index":143,"t":{"245":{"position":[[70,8]]}}}],["essenti",{"_index":222,"t":{"289":{"position":[[198,9]]}}}],["establish",{"_index":265,"t":{"335":{"position":[[54,12]]}}}],["even",{"_index":299,"t":{"355":{"position":[[150,4]]}}}],["exampl",{"_index":34,"t":{"41":{"position":[[89,7]]}}}],["exchang",{"_index":234,"t":{"315":{"position":[[139,8]]}}}],["expans",{"_index":206,"t":{"285":{"position":[[389,10]]}}}],["experiment",{"_index":273,"t":{"337":{"position":[[37,12]]}}}],["explain",{"_index":343,"t":{"516":{"position":[[10,8]]}}}],["explor",{"_index":67,"t":{"55":{"position":[[166,7]]},"353":{"position":[[39,7]]}}}],["facilit",{"_index":169,"t":{"261":{"position":[[78,10]]},"315":{"position":[[45,10]]}}}],["famili",{"_index":308,"t":{"455":{"position":[[10,6]]},"655":{"position":[[10,6]]}}}],["fastest",{"_index":64,"t":{"55":{"position":[[76,7]]}}}],["featur",{"_index":170,"t":{"261":{"position":[[104,8]]},"337":{"position":[[14,8]]},"355":{"position":[[214,8]]},"655":{"position":[[202,8]]}}}],["februari",{"_index":356,"t":{"524":{"position":[[16,8]]},"556":{"position":[[17,8]]}}}],["field",{"_index":216,"t":{"289":{"position":[[126,5]]}}}],["filter",{"_index":40,"t":{"47":{"position":[[45,6],[184,6],[226,6]]},"136":{"position":[[178,6]]},"162":{"position":[[77,9]]},"261":{"position":[[169,7],[239,9]]}}}],["flexibl",{"_index":237,"t":{"319":{"position":[[27,11]]},"502":{"position":[[154,11]]}}}],["focus",{"_index":416,"t":{"655":{"position":[[107,7]]}}}],["follow",{"_index":120,"t":{"152":{"position":[[56,9]]},"183":{"position":[[73,9]]},"257":{"position":[[95,6]]},"337":{"position":[[4,9]]}}}],["form",{"_index":290,"t":{"343":{"position":[[209,7]]}}}],["foundat",{"_index":209,"t":{"289":{"position":[[15,10]]},"343":{"position":[[221,11]]}}}],["free",{"_index":414,"t":{"653":{"position":[[63,4]]}}}],["function",{"_index":89,"t":{"79":{"position":[[91,15]]},"343":{"position":[[186,13]]}}}],["futur",{"_index":29,"t":{"17":{"position":[[131,7]]},"27":{"position":[[131,7]]}}}],["gener",{"_index":295,"t":{"355":{"position":[[83,11]]}}}],["get",{"_index":291,"t":{"353":{"position":[[14,7]]}}}],["global",{"_index":196,"t":{"285":{"position":[[203,6]]}}}],["goal",{"_index":365,"t":{"544":{"position":[[161,4]]}}}],["good",{"_index":379,"t":{"544":{"position":[[532,4]]}}}],["grow",{"_index":393,"t":{"601":{"position":[[61,8]]}}}],["guarante",{"_index":259,"t":{"323":{"position":[[299,10]]}}}],["guid",{"_index":0,"t":{"1":{"position":[[5,5]]},"41":{"position":[[5,5]]},"47":{"position":[[5,5],[191,5]]},"53":{"position":[[101,5]]},"55":{"position":[[44,5],[157,5]]},"57":{"position":[[5,5]]},"69":{"position":[[5,5],[192,6]]},"97":{"position":[[196,5]]},"112":{"position":[[5,5]]},"124":{"position":[[5,5]]},"136":{"position":[[5,5],[227,5]]},"162":{"position":[[5,5]]},"273":{"position":[[5,5]]},"293":{"position":[[5,5]]},"353":{"position":[[30,5]]},"435":{"position":[[12,5]]}}}],["handl",{"_index":42,"t":{"47":{"position":[[70,6]]}}}],["hash",{"_index":188,"t":{"285":{"position":[[109,4]]}}}],["help",{"_index":261,"t":{"335":{"position":[[11,4]]},"601":{"position":[[132,4]]}}}],["henc",{"_index":394,"t":{"601":{"position":[[70,6]]}}}],["here",{"_index":127,"t":{"201":{"position":[[0,4]]},"502":{"position":[[288,4]]}}}],["highli",{"_index":146,"t":{"245":{"position":[[139,6]]}}}],["histor",{"_index":123,"t":{"162":{"position":[[87,10]]},"261":{"position":[[192,10]]}}}],["i13n",{"_index":315,"t":{"455":{"position":[[176,5]]}}}],["idea",{"_index":380,"t":{"544":{"position":[[537,4]]}}}],["ii",{"_index":349,"t":{"516":{"position":[[85,3]]},"544":{"position":[[258,3]]}}}],["implement",{"_index":277,"t":{"337":{"position":[[81,15]]}}}],["incentivis",{"_index":313,"t":{"455":{"position":[[146,15]]}}}],["includ",{"_index":223,"t":{"289":{"position":[[233,9]]},"355":{"position":[[223,8]]}}}],["incom",{"_index":172,"t":{"261":{"position":[[141,8]]}}}],["increas",{"_index":377,"t":{"544":{"position":[[470,10]]}}}],["independ",{"_index":312,"t":{"455":{"position":[[94,11]]}}}],["indic",{"_index":378,"t":{"544":{"position":[[505,9]]}}}],["info",{"_index":137,"t":{"235":{"position":[[99,4]]}}}],["inform",{"_index":335,"t":{"502":{"position":[[196,8]]}}}],["initi",{"_index":276,"t":{"337":{"position":[[73,7]]}}}],["initialis",{"_index":178,"t":{"283":{"position":[[5,12]]}}}],["innov",{"_index":219,"t":{"289":{"position":[[155,10]]}}}],["instal",{"_index":57,"t":{"53":{"position":[[88,12]]},"136":{"position":[[214,12]]}}}],["instead",{"_index":115,"t":{"124":{"position":[[230,8]]}}}],["institut",{"_index":413,"t":{"653":{"position":[[50,9]]}}}],["instruct",{"_index":158,"t":{"257":{"position":[[122,12]]}}}],["integr",{"_index":418,"t":{"655":{"position":[[164,9]]}}}],["interact",{"_index":285,"t":{"343":{"position":[[95,11]]}}}],["introduct",{"_index":389,"t":{"580":{"position":[[0,12]]},"638":{"position":[[0,12]]}}}],["involv",{"_index":331,"t":{"502":{"position":[[113,8]]}}}],["ip",{"_index":224,"t":{"289":{"position":[[243,3]]}}}],["it'",{"_index":368,"t":{"544":{"position":[[230,4]]}}}],["javascript",{"_index":20,"t":{"17":{"position":[[15,10]]},"27":{"position":[[15,10]]},"53":{"position":[[16,10]]}}}],["keen",{"_index":396,"t":{"601":{"position":[[94,4]]}}}],["keep",{"_index":96,"t":{"97":{"position":[[177,4]]}}}],["key",{"_index":322,"t":{"494":{"position":[[118,3]]}}}],["known",{"_index":183,"t":{"283":{"position":[[222,5]]}}}],["last",{"_index":353,"t":{"524":{"position":[[0,4]]},"556":{"position":[[0,4]]}}}],["latenc",{"_index":340,"t":{"502":{"position":[[279,8]]}}}],["latest",{"_index":107,"t":{"124":{"position":[[92,6]]}}}],["layer",{"_index":243,"t":{"323":{"position":[[16,6]]}}}],["learn",{"_index":62,"t":{"55":{"position":[[53,5]]},"79":{"position":[[0,5]]},"261":{"position":[[308,5]]},"285":{"position":[[443,5]]},"353":{"position":[[69,5]]}}}],["level",{"_index":138,"t":{"235":{"position":[[108,6]]},"261":{"position":[[98,5]]}}}],["leverag",{"_index":399,"t":{"601":{"position":[[137,8]]}}}],["libp2p",{"_index":319,"t":{"494":{"position":[[30,7]]}}}],["light",{"_index":50,"t":{"47":{"position":[[169,5],[211,5]]},"136":{"position":[[88,5],[126,5]]},"162":{"position":[[47,5]]},"315":{"position":[[165,5]]}}}],["lightweight",{"_index":139,"t":{"245":{"position":[[11,11]]}}}],["limit",{"_index":94,"t":{"97":{"position":[[143,11]]},"315":{"position":[[87,7]]},"323":{"position":[[314,12]]},"516":{"position":[[115,8]]},"544":{"position":[[125,11]]}}}],["listen",{"_index":135,"t":{"235":{"position":[[58,9]]}}}],["load",{"_index":201,"t":{"285":{"position":[[268,4]]}}}],["locat",{"_index":182,"t":{"283":{"position":[[171,6]]}}}],["log",{"_index":7,"t":{"1":{"position":[[59,4]]},"235":{"position":[[104,3]]}}}],["look",{"_index":46,"t":{"47":{"position":[[125,4]]},"136":{"position":[[202,4]]},"261":{"position":[[266,4]]},"285":{"position":[[407,4]]}}}],["lot",{"_index":320,"t":{"494":{"position":[[51,3]]}}}],["main",{"_index":341,"t":{"502":{"position":[[301,4]]}}}],["maintain",{"_index":145,"t":{"245":{"position":[[105,8]]}}}],["make",{"_index":334,"t":{"502":{"position":[[191,4]]}}}],["manag",{"_index":39,"t":{"47":{"position":[[38,6]]}}}],["maximum",{"_index":405,"t":{"613":{"position":[[65,7]]}}}],["mechan",{"_index":180,"t":{"283":{"position":[[146,9]]},"285":{"position":[[55,9]]}}}],["meet",{"_index":174,"t":{"261":{"position":[[225,4]]}}}],["mesh",{"_index":205,"t":{"285":{"position":[[384,4]]}}}],["messag",{"_index":49,"t":{"47":{"position":[[154,8]]},"79":{"position":[[30,8]]},"112":{"position":[[114,8],[134,7]]},"136":{"position":[[107,8],[159,8]]},"162":{"position":[[98,8]]},"261":{"position":[[66,8],[150,8],[203,8]]},"283":{"position":[[74,7]]},"355":{"position":[[33,9],[95,10]]},"544":{"position":[[77,7],[182,7],[262,7],[318,8],[416,7],[485,7],[558,8]]},"655":{"position":[[115,9]]}}}],["metadata",{"_index":166,"t":{"261":{"position":[[19,8]]}}}],["method",{"_index":104,"t":{"112":{"position":[[161,8]]},"152":{"position":[[66,8]]}}}],["migrat",{"_index":157,"t":{"257":{"position":[[112,9]]},"435":{"position":[[2,9]]}}}],["mind",{"_index":97,"t":{"97":{"position":[[185,5]]}}}],["model",{"_index":249,"t":{"323":{"position":[[140,6]]}}}],["modular",{"_index":326,"t":{"502":{"position":[[13,7]]}}}],["monitor",{"_index":84,"t":{"69":{"position":[[132,10]]},"245":{"position":[[93,7]]}}}],["more",{"_index":177,"t":{"261":{"position":[[314,5]]},"285":{"position":[[449,5]]}}}],["motiv",{"_index":151,"t":{"245":{"position":[[246,12]]}}}],["move",{"_index":262,"t":{"335":{"position":[[16,4]]}}}],["ms",{"_index":375,"t":{"544":{"position":[[383,3]]}}}],["multiaddr",{"_index":226,"t":{"289":{"position":[[257,10]]}}}],["name",{"_index":218,"t":{"289":{"position":[[144,5]]}}}],["nascent",{"_index":390,"t":{"601":{"position":[[10,7]]}}}],["nativ",{"_index":25,"t":{"17":{"position":[[76,7],[117,6]]},"27":{"position":[[76,7],[117,6]]}}}],["need",{"_index":150,"t":{"245":{"position":[[239,6]]},"455":{"position":[[140,5]]}}}],["network",{"_index":76,"t":{"57":{"position":[[113,7]]},"273":{"position":[[108,8]]},"283":{"position":[[197,8]]},"285":{"position":[[78,8],[336,8]]},"315":{"position":[[222,8]]},"335":{"position":[[43,7],[150,7]]},"343":{"position":[[87,7]]},"355":{"position":[[9,7],[43,7]]},"455":{"position":[[68,7]]},"516":{"position":[[35,7]]},"544":{"position":[[102,7],[141,7]]}}}],["newer",{"_index":161,"t":{"257":{"position":[[159,5]]}}}],["next",{"_index":31,"t":{"41":{"position":[[53,4]]}}}],["nim",{"_index":141,"t":{"245":{"position":[[34,3]]},"621":{"position":[[28,3]]}}}],["node",{"_index":43,"t":{"47":{"position":[[77,4]]},"55":{"position":[[97,5],[152,4]]},"57":{"position":[[58,4]]},"69":{"position":[[60,4]]},"124":{"position":[[52,4]]},"136":{"position":[[94,4]]},"152":{"position":[[5,5]]},"162":{"position":[[53,4]]},"201":{"position":[[23,4]]},"235":{"position":[[18,5]]},"245":{"position":[[64,5],[124,5]]},"257":{"position":[[82,5]]},"273":{"position":[[56,4]]},"283":{"position":[[25,5]]},"285":{"position":[[232,6],[305,5],[374,5]]},"289":{"position":[[39,4],[208,4]]},"293":{"position":[[56,4]]},"315":{"position":[[171,5],[205,5]]},"319":{"position":[[58,4],[170,5]]},"353":{"position":[[93,5]]},"455":{"position":[[106,5],[199,4]]},"544":{"position":[[43,5]]}}}],["nodej",{"_index":12,"t":{"1":{"position":[[109,6]]},"97":{"position":[[96,6],[258,7]]}}}],["note",{"_index":324,"t":{"494":{"position":[[162,7]]}}}],["npm",{"_index":53,"t":{"53":{"position":[[53,4]]}}}],["numer",{"_index":292,"t":{"353":{"position":[[51,8]]}}}],["nwaku",{"_index":18,"t":{"1":{"position":[[179,6]]},"55":{"position":[[18,5],[146,5]]},"69":{"position":[[54,5],[166,5]]},"124":{"position":[[46,5],[154,6]]},"183":{"position":[[0,5]]},"235":{"position":[[24,5]]},"245":{"position":[[0,5],[130,5]]},"257":{"position":[[27,6]]},"273":{"position":[[50,5]]},"293":{"position":[[50,5]]},"544":{"position":[[37,5]]}}}],["object",{"_index":230,"t":{"315":{"position":[[12,9]]}}}],["observ",{"_index":370,"t":{"544":{"position":[[301,7],[399,7]]}}}],["off",{"_index":330,"t":{"502":{"position":[[108,4]]}}}],["offer",{"_index":195,"t":{"285":{"position":[[194,6]]},"323":{"position":[[23,5]]},"343":{"position":[[43,6]]}}}],["old",{"_index":153,"t":{"257":{"position":[[45,3]]}}}],["open",{"_index":253,"t":{"323":{"position":[[211,4]]},"355":{"position":[[59,4]]}}}],["oper",{"_index":147,"t":{"245":{"position":[[169,9]]},"319":{"position":[[142,8]]}}}],["option",{"_index":68,"t":{"55":{"position":[[180,7]]},"201":{"position":[[42,8]]}}}],["order",{"_index":163,"t":{"257":{"position":[[212,6]]}}}],["org/research/issues/22",{"_index":403,"t":{"613":{"position":[[22,22]]}}}],["out",{"_index":56,"t":{"53":{"position":[[80,3]]},"55":{"position":[[6,3]]},"79":{"position":[[107,3]]},"353":{"position":[[6,3]]}}}],["outgo",{"_index":168,"t":{"261":{"position":[[57,8]]}}}],["overal",{"_index":247,"t":{"323":{"position":[[89,7]]}}}],["overview",{"_index":98,"t":{"97":{"position":[[227,8]]}}}],["p2p",{"_index":294,"t":{"355":{"position":[[29,3]]}}}],["packag",{"_index":38,"t":{"41":{"position":[[134,8]]},"97":{"position":[[20,7]]},"112":{"position":[[71,7]]},"136":{"position":[[64,7]]}}}],["packet",{"_index":264,"t":{"335":{"position":[[26,7]]}}}],["paramet",{"_index":384,"t":{"544":{"position":[[596,11]]}}}],["particip",{"_index":198,"t":{"285":{"position":[[218,13]]}}}],["payload",{"_index":103,"t":{"112":{"position":[[142,7]]}}}],["peer",{"_index":74,"t":{"57":{"position":[[76,5],[95,5]]},"273":{"position":[[90,5]]},"283":{"position":[[58,5],[184,5]]},"285":{"position":[[40,4]]},"315":{"position":[[56,4],[134,4],[188,5]]},"319":{"position":[[136,5]]},"335":{"position":[[87,6]]},"655":{"position":[[50,4],[58,4]]}}}],["per",{"_index":347,"t":{"516":{"position":[[71,3]]}}}],["plan",{"_index":26,"t":{"17":{"position":[[87,4]]},"27":{"position":[[87,4]]}}}],["pleas",{"_index":155,"t":{"257":{"position":[[88,6]]}}}],["point",{"_index":203,"t":{"285":{"position":[[323,5]]}}}],["port",{"_index":225,"t":{"289":{"position":[[247,5]]}}}],["post",{"_index":342,"t":{"516":{"position":[[5,4]]}}}],["postgr",{"_index":408,"t":{"621":{"position":[[52,8]]}}}],["pre",{"_index":81,"t":{"69":{"position":[[104,3]]},"124":{"position":[[210,3]]}}}],["prefer",{"_index":80,"t":{"69":{"position":[[95,6]]}}}],["present",{"_index":359,"t":{"544":{"position":[[9,7]]}}}],["preserv",{"_index":297,"t":{"355":{"position":[[114,11]]}}}],["primari",{"_index":229,"t":{"315":{"position":[[4,7]]}}}],["primarili",{"_index":91,"t":{"97":{"position":[[31,9]]}}}],["privaci",{"_index":296,"t":{"355":{"position":[[106,7]]},"655":{"position":[[99,7],[259,8]]}}}],["process",{"_index":171,"t":{"261":{"position":[[130,10]]},"283":{"position":[[211,7]]}}}],["project",{"_index":32,"t":{"41":{"position":[[68,7]]},"53":{"position":[[39,7]]},"136":{"position":[[271,8]]},"601":{"position":[[120,8]]}}}],["promin",{"_index":301,"t":{"355":{"position":[[204,9]]}}}],["propag",{"_index":367,"t":{"544":{"position":[[190,11],[358,11],[424,11]]}}}],["proper",{"_index":316,"t":{"455":{"position":[[192,6]]}}}],["protocol",{"_index":52,"t":{"47":{"position":[[233,10]]},"136":{"position":[[137,9],[185,9]]},"162":{"position":[[123,9]]},"245":{"position":[[193,9]]},"261":{"position":[[89,8]]},"315":{"position":[[30,8],[148,8]]},"323":{"position":[[7,8],[166,10]]},"335":{"position":[[120,9]]},"455":{"position":[[48,10],[125,10]]},"502":{"position":[[52,9],[306,9]]},"554":{"position":[[22,8],[98,10],[113,8]]},"655":{"position":[[77,9]]}}}],["protocol'",{"_index":258,"t":{"323":{"position":[[279,10]]}}}],["provid",{"_index":1,"t":{"1":{"position":[[11,8]]},"41":{"position":[[11,8]]},"47":{"position":[[11,8]]},"57":{"position":[[11,8]]},"69":{"position":[[11,8]]},"79":{"position":[[66,7]]},"97":{"position":[[202,8]]},"112":{"position":[[11,8]]},"124":{"position":[[11,8]]},"136":{"position":[[11,8]]},"162":{"position":[[11,8]]},"273":{"position":[[11,8]]},"285":{"position":[[151,9],[345,9]]},"293":{"position":[[11,8]]},"323":{"position":[[187,7]]},"502":{"position":[[31,9],[316,8]]}}}],["public",{"_index":134,"t":{"235":{"position":[[51,6]]}}}],["purpos",{"_index":288,"t":{"343":{"position":[[148,8]]}}}],["push",{"_index":51,"t":{"47":{"position":[[175,4],[217,4]]},"136":{"position":[[132,4]]}}}],["random",{"_index":199,"t":{"285":{"position":[[248,6]]}}}],["randomis",{"_index":204,"t":{"285":{"position":[[355,10]]}}}],["rang",{"_index":327,"t":{"502":{"position":[[43,5]]}}}],["rate",{"_index":350,"t":{"516":{"position":[[110,4]]}}}],["react",{"_index":24,"t":{"17":{"position":[[70,5],[111,5]]},"27":{"position":[[70,5],[111,5]]}}}],["readi",{"_index":125,"t":{"183":{"position":[[19,5]]}}}],["real",{"_index":363,"t":{"544":{"position":[[97,4],[280,4]]}}}],["receiv",{"_index":48,"t":{"47":{"position":[[146,7]]},"79":{"position":[[22,7]]},"136":{"position":[[151,7]]},"283":{"position":[[91,10]]}}}],["record",{"_index":192,"t":{"285":{"position":[[142,8]]}}}],["refactor",{"_index":305,"t":{"435":{"position":[[22,11]]}}}],["refer",{"_index":254,"t":{"323":{"position":[[223,11]]}}}],["regard",{"_index":337,"t":{"502":{"position":[[213,9]]}}}],["relay",{"_index":173,"t":{"261":{"position":[[159,6]]}}}],["releas",{"_index":112,"t":{"124":{"position":[[143,7]]},"257":{"position":[[151,7]]}}}],["reli",{"_index":233,"t":{"315":{"position":[[111,7]]}}}],["reliabl",{"_index":88,"t":{"79":{"position":[[82,8]]}}}],["request",{"_index":235,"t":{"315":{"position":[[180,7]]}}}],["requir",{"_index":344,"t":{"516":{"position":[[43,8]]}}}],["research",{"_index":275,"t":{"337":{"position":[[60,8]]},"554":{"position":[[0,8]]}}}],["resist",{"_index":193,"t":{"285":{"position":[[161,10]]},"655":{"position":[[39,10]]}}}],["resourc",{"_index":152,"t":{"245":{"position":[[273,10]]},"315":{"position":[[78,8]]},"355":{"position":[[158,8]]}}}],["restrict",{"_index":300,"t":{"355":{"position":[[167,10]]}}}],["result",{"_index":360,"t":{"544":{"position":[[21,7]]},"621":{"position":[[101,8]]}}}],["retriev",{"_index":122,"t":{"162":{"position":[[62,10]]},"261":{"position":[[181,10]]},"283":{"position":[[106,10]]},"289":{"position":[[88,9]]}}}],["rfc",{"_index":250,"t":{"323":{"position":[[154,4]]},"554":{"position":[[150,4]]}}}],["rich",{"_index":281,"t":{"343":{"position":[[52,4]]}}}],["rln",{"_index":351,"t":{"516":{"position":[[129,3]]},"544":{"position":[[57,3],[250,3]]}}}],["robust",{"_index":140,"t":{"245":{"position":[[27,6]]},"343":{"position":[[179,6]]},"655":{"position":[[20,7]]}}}],["rout",{"_index":271,"t":{"335":{"position":[[172,8]]}}}],["rule",{"_index":268,"t":{"335":{"position":[[110,5]]}}}],["run",{"_index":59,"t":{"55":{"position":[[14,3],[91,3],[140,3]]},"69":{"position":[[48,3],[162,3]]},"245":{"position":[[49,7],[116,7]]},"257":{"position":[[34,7],[183,7]]},"319":{"position":[[164,3]]},"353":{"position":[[82,3]]},"455":{"position":[[112,7]]},"544":{"position":[[49,7]]}}}],["sampl",{"_index":200,"t":{"285":{"position":[[255,8]]}}}],["scalabl",{"_index":298,"t":{"355":{"position":[[126,8]]},"502":{"position":[[262,12]]}}}],["sdk",{"_index":21,"t":{"17":{"position":[[31,3]]},"27":{"position":[[31,3]]},"53":{"position":[[27,3]]},"79":{"position":[[57,3]]},"353":{"position":[[60,4]]}}}],["secur",{"_index":245,"t":{"323":{"position":[[52,8],[97,8],[131,8],[290,8]]},"653":{"position":[[8,8]]},"655":{"position":[[247,8]]}}}],["see",{"_index":86,"t":{"69":{"position":[[154,3]]},"544":{"position":[[581,3]]}}}],["select",{"_index":148,"t":{"245":{"position":[[182,6]]},"261":{"position":[[118,11]]}}}],["send",{"_index":47,"t":{"47":{"position":[[137,4]]},"79":{"position":[[13,4]]},"136":{"position":[[102,4]]},"283":{"position":[[82,8]]}}}],["serious",{"_index":412,"t":{"653":{"position":[[17,9]]}}}],["serv",{"_index":286,"t":{"343":{"position":[[130,5]]}}}],["servic",{"_index":244,"t":{"323":{"position":[[39,8]]}}}],["set",{"_index":116,"t":{"136":{"position":[[75,7]]},"261":{"position":[[36,3]]},"285":{"position":[[366,4]]}}}],["setup",{"_index":83,"t":{"69":{"position":[[119,5]]},"183":{"position":[[47,5]]}}}],["sever",{"_index":376,"t":{"544":{"position":[[447,8]]}}}],["shape",{"_index":246,"t":{"323":{"position":[[77,7]]}}}],["shard",{"_index":348,"t":{"516":{"position":[[75,5]]}}}],["share",{"_index":293,"t":{"355":{"position":[[22,6]]},"494":{"position":[[43,5]]}}}],["shorten",{"_index":314,"t":{"455":{"position":[[162,10]]}}}],["show",{"_index":409,"t":{"621":{"position":[[65,5]]}}}],["sign",{"_index":102,"t":{"112":{"position":[[104,4]]}}}],["simplest",{"_index":63,"t":{"55":{"position":[[63,8]]}}}],["simul",{"_index":383,"t":{"544":{"position":[[585,10]]},"554":{"position":[[31,11]]}}}],["size",{"_index":362,"t":{"544":{"position":[[85,6],[270,4],[493,5]]}}}],["sourc",{"_index":72,"t":{"55":{"position":[[232,7]]},"124":{"position":[[66,6]]},"323":{"position":[[216,6]]}}}],["specialis",{"_index":287,"t":{"343":{"position":[[136,11]]}}}],["specif",{"_index":110,"t":{"124":{"position":[[124,8]]},"261":{"position":[[230,8],[291,13]]},"285":{"position":[[426,13]]}}}],["specifi",{"_index":404,"t":{"613":{"position":[[48,7]]}}}],["start",{"_index":58,"t":{"53":{"position":[[114,8]]},"136":{"position":[[38,5]]},"235":{"position":[[5,8]]},"353":{"position":[[22,7]]},"621":{"position":[[37,7]]}}}],["static",{"_index":73,"t":{"57":{"position":[[69,6]]},"319":{"position":[[129,6]]}}}],["statu",{"_index":241,"t":{"319":{"position":[[154,6]]}}}],["step",{"_index":3,"t":{"1":{"position":[[29,5]]},"41":{"position":[[29,5]]},"47":{"position":[[29,5]]},"57":{"position":[[29,5]]},"69":{"position":[[29,5]]},"112":{"position":[[29,5]]},"124":{"position":[[29,5]]},"136":{"position":[[29,5],[237,5]]},"162":{"position":[[29,5]]},"273":{"position":[[29,5]]},"293":{"position":[[29,5]]}}}],["still",{"_index":392,"t":{"601":{"position":[[55,5]]}}}],["storag",{"_index":221,"t":{"289":{"position":[[187,7]]}}}],["store",{"_index":124,"t":{"162":{"position":[[117,5]]},"261":{"position":[[212,7]]},"285":{"position":[[130,7]]}}}],["string",{"_index":167,"t":{"261":{"position":[[28,7]]}}}],["studi",{"_index":366,"t":{"544":{"position":[[172,5]]},"554":{"position":[[13,8]]}}}],["subscript",{"_index":41,"t":{"47":{"position":[[52,13]]}}}],["success",{"_index":401,"t":{"601":{"position":[[175,7]]}}}],["support",{"_index":28,"t":{"17":{"position":[[99,7]]},"27":{"position":[[99,7]]},"245":{"position":[[216,7]]},"554":{"position":[[71,7]]}}}],["tabl",{"_index":189,"t":{"285":{"position":[[114,5]]}}}],["take",{"_index":325,"t":{"502":{"position":[[5,5]]},"653":{"position":[[3,4]]}}}],["target",{"_index":160,"t":{"257":{"position":[[144,6]]}}}],["team",{"_index":395,"t":{"601":{"position":[[86,4]]}}}],["technolog",{"_index":391,"t":{"601":{"position":[[18,10],[151,10]]},"653":{"position":[[68,10]]}}}],["templat",{"_index":35,"t":{"41":{"position":[[97,9]]}}}],["terminolog",{"_index":304,"t":{"363":{"position":[[29,11]]},"494":{"position":[[71,13]]}}}],["theoret",{"_index":385,"t":{"554":{"position":[[47,11]]}}}],["three",{"_index":283,"t":{"343":{"position":[[72,5]]}}}],["tldr",{"_index":358,"t":{"544":{"position":[[0,5]]}}}],["tldr//github.com/waku",{"_index":402,"t":{"613":{"position":[[0,21]]}}}],["tool",{"_index":144,"t":{"245":{"position":[[84,5]]}}}],["top",{"_index":318,"t":{"494":{"position":[[23,3]]}}}],["topic",{"_index":165,"t":{"261":{"position":[[8,6],[284,6]]}}}],["trade",{"_index":329,"t":{"502":{"position":[[102,5]]}}}],["transmiss",{"_index":270,"t":{"335":{"position":[[158,13]]}}}],["transpar",{"_index":252,"t":{"323":{"position":[[195,11]]}}}],["transport",{"_index":260,"t":{"335":{"position":[[0,10]]}}}],["tree",{"_index":214,"t":{"289":{"position":[[108,4]]}}}],["trilemma",{"_index":333,"t":{"502":{"position":[[139,9]]}}}],["troubleshoot",{"_index":8,"t":{"1":{"position":[[67,12]]}}}],["twn",{"_index":310,"t":{"455":{"position":[[76,5],[136,3]]}}}],["txt",{"_index":215,"t":{"289":{"position":[[122,3]]}}}],["under",{"_index":274,"t":{"337":{"position":[[54,5]]}}}],["understand",{"_index":257,"t":{"323":{"position":[[263,10]]}}}],["unifi",{"_index":278,"t":{"343":{"position":[[10,7]]}}}],["up",{"_index":117,"t":{"136":{"position":[[83,2]]}}}],["updat",{"_index":354,"t":{"524":{"position":[[5,8]]},"556":{"position":[[5,8]]}}}],["upgrad",{"_index":154,"t":{"257":{"position":[[69,7]]}}}],["upon",{"_index":208,"t":{"289":{"position":[[6,4]]}}}],["us",{"_index":5,"t":{"1":{"position":[[49,3]]},"41":{"position":[[107,5]]},"47":{"position":[[163,5],[201,5]]},"53":{"position":[[47,5]]},"57":{"position":[[63,5],[121,5]]},"97":{"position":[[84,3],[239,5]]},"112":{"position":[[38,3],[123,5]]},"136":{"position":[[44,5],[116,5],[168,5]]},"152":{"position":[[29,5]]},"162":{"position":[[107,5]]},"183":{"position":[[28,3]]},"257":{"position":[[21,5]]},"285":{"position":[[90,4],[290,4]]},"293":{"position":[[75,3]]},"319":{"position":[[125,3]]},"355":{"position":[[72,6]]},"363":{"position":[[41,4]]},"544":{"position":[[61,5],[545,3]]},"621":{"position":[[48,3]]}}}],["usag",{"_index":303,"t":{"363":{"position":[[16,5]]}}}],["user",{"_index":256,"t":{"323":{"position":[[254,5]]}}}],["v0.026",{"_index":306,"t":{"435":{"position":[[66,6]]}}}],["v0.027",{"_index":307,"t":{"435":{"position":[[76,7]]}}}],["v2",{"_index":352,"t":{"516":{"position":[[133,3]]}}}],["valu",{"_index":131,"t":{"201":{"position":[[76,6]]}}}],["variou",{"_index":33,"t":{"41":{"position":[[81,7]]},"79":{"position":[[74,7]]}}}],["version",{"_index":109,"t":{"124":{"position":[[111,7]]},"257":{"position":[[49,7],[191,7]]}}}],["via",{"_index":212,"t":{"289":{"position":[[54,3]]}}}],["view",{"_index":197,"t":{"285":{"position":[[210,4]]}}}],["waku",{"_index":9,"t":{"1":{"position":[[85,4]]},"17":{"position":[[26,4]]},"27":{"position":[[26,4]]},"57":{"position":[[108,4]]},"112":{"position":[[129,4]]},"152":{"position":[[0,4]]},"245":{"position":[[59,4]]},"273":{"position":[[103,4]]},"283":{"position":[[20,4]]},"285":{"position":[[73,4]]},"319":{"position":[[0,4]]},"323":{"position":[[109,5],[249,4]]},"343":{"position":[[0,4],[203,5]]},"353":{"position":[[88,4]]},"355":{"position":[[4,4]]},"363":{"position":[[53,4]]},"435":{"position":[[61,4]]},"455":{"position":[[0,4],[63,4],[120,4]]},"494":{"position":[[6,4]]},"502":{"position":[[0,4],[328,5]]},"516":{"position":[[30,4]]},"544":{"position":[[549,4]]},"554":{"position":[[93,4],[145,4]]},"601":{"position":[[0,4],[37,4],[81,4],[146,4]]},"621":{"position":[[32,4]]},"653":{"position":[[30,4]]},"655":{"position":[[0,4]]}}}],["waku'",{"_index":242,"t":{"323":{"position":[[0,6]]}}}],["waku/cr",{"_index":36,"t":{"41":{"position":[[117,12]]}}}],["waku/messag",{"_index":99,"t":{"112":{"position":[[46,13]]}}}],["waku/sdk",{"_index":22,"t":{"17":{"position":[[35,11]]},"27":{"position":[[35,11]]},"41":{"position":[[58,9]]},"97":{"position":[[10,9],[245,9]]},"136":{"position":[[54,9],[253,9]]}}}],["waku2",{"_index":176,"t":{"261":{"position":[[278,5]]}}}],["want",{"_index":113,"t":{"124":{"position":[[191,4]]},"245":{"position":[[208,4]]},"257":{"position":[[61,4]]}}}],["way",{"_index":65,"t":{"55":{"position":[[84,3]]}}}],["web3",{"_index":417,"t":{"655":{"position":[[129,4]]}}}],["websit",{"_index":387,"t":{"554":{"position":[[155,8]]}}}],["websocket",{"_index":16,"t":{"1":{"position":[[154,9]]}}}],["whether",{"_index":11,"t":{"1":{"position":[[96,7]]}}}],["within",{"_index":236,"t":{"315":{"position":[[211,6]]}}}],["without",{"_index":232,"t":{"315":{"position":[[103,7]]},"655":{"position":[[226,7]]}}}],["work",{"_index":397,"t":{"601":{"position":[[102,4]]}}}],["worth",{"_index":323,"t":{"494":{"position":[[156,5]]}}}],["yarn",{"_index":54,"t":{"53":{"position":[[58,5]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":1,"t":"waku, web3","s":"Debug Your Waku DApp and WebSocket","u":"/guides/js-waku/debug-waku-dapp","p":1},{"i":17,"t":"waku, web3","s":"JavaScript Waku SDK","u":"/guides/js-waku/","p":17},{"i":27,"t":"waku, web3","s":"Build React DApps Using @waku/react","u":"/guides/js-waku/use-waku-react","p":27},{"i":41,"t":"waku, web3","s":"Scaffold DApps Using @waku/create-app","u":"/guides/js-waku/use-waku-create-app","p":41},{"i":47,"t":"waku, web3","s":"Manage Your Filter Subscriptions","u":"/guides/js-waku/manage-filter","p":47},{"i":53,"t":"waku, web3","s":"JavaScript SDK FAQ","u":"/guides/js-waku/faq","p":53},{"i":55,"t":"waku, web3","s":"Nwaku FAQ","u":"/guides/nwaku/faq","p":55},{"i":57,"t":"waku, web3","s":"Bootstrap Nodes and Discover Peers","u":"/guides/js-waku/configure-discovery","p":57},{"i":69,"t":"waku, web3","s":"Run Nwaku in a Docker Container","u":"/guides/nwaku/run-docker","p":69},{"i":79,"t":"waku, web3","s":"Send and Receive Messages in a Reliable Channel","u":"/guides/js-waku/reliable-channels","p":79},{"i":97,"t":"waku, web3","s":"Run @waku/sdk in a NodeJS Application","u":"/guides/js-waku/run-waku-nodejs","p":97},{"i":112,"t":"waku, web3","s":"Encrypt, Decrypt, and Sign Your Messages","u":"/guides/js-waku/message-encryption","p":112},{"i":124,"t":"waku, web3","s":"Build Nwaku from Source","u":"/guides/nwaku/build-source","p":124},{"i":136,"t":"waku, web3","s":"Send and Receive Messages Using Light Push and Filter","u":"/guides/js-waku/light-send-receive","p":136},{"i":152,"t":"waku, web3","s":"Node Configuration Methods","u":"/guides/nwaku/config-methods","p":152},{"i":162,"t":"waku, web3","s":"Retrieve Messages Using Store Protocol","u":"/guides/js-waku/store-retrieve-messages","p":162},{"i":183,"t":"waku, web3","s":"Run Nwaku with Docker Compose","u":"/guides/nwaku/run-docker-compose","p":183},{"i":201,"t":"waku, web3","s":"Node Configuration Options","u":"/guides/nwaku/config-options","p":201},{"i":235,"t":"waku, web3","s":"Find Your Node Address","u":"/guides/nwaku/find-node-address","p":235},{"i":245,"t":"waku, web3","s":"Run a Nwaku Node","u":"/guides/nwaku/run-node","p":245},{"i":257,"t":"waku, web3","s":"Upgrade Instructions","u":"/guides/nwaku/upgrade-instructions","p":257},{"i":261,"t":"waku, web3","s":"Content Topics","u":"/learn/concepts/content-topics","p":261},{"i":273,"t":"waku, web3","s":"Configure Peer Discovery","u":"/guides/nwaku/configure-discovery","p":273},{"i":283,"t":"waku, web3","s":"Peer Discovery","u":"/learn/concepts/peer-discovery","p":283},{"i":285,"t":"waku, web3","s":"Discv5","u":"/learn/concepts/discv5","p":285},{"i":289,"t":"waku, web3","s":"DNS Discovery","u":"/learn/concepts/dns-discovery","p":289},{"i":293,"t":"waku, web3","s":"Node Configuration Examples","u":"/guides/nwaku/configure-nwaku","p":293},{"i":315,"t":"waku, web3","s":"Peer Exchange","u":"/learn/concepts/peer-exchange","p":315},{"i":319,"t":"waku, web3","s":"Static Peers","u":"/learn/concepts/static-peers","p":319},{"i":323,"t":"waku, web3","s":"Security Features","u":"/learn/security-features","p":323},{"i":335,"t":"waku, web3","s":"Transports","u":"/learn/concepts/transports","p":335},{"i":337,"t":"waku, web3","s":"Research","u":"/learn/research","p":337},{"i":343,"t":"waku, web3","s":"Network Domains","u":"/learn/concepts/network-domains","p":343},{"i":353,"t":"waku, web3","s":"Waku FAQ","u":"/learn/faq","p":353},{"i":355,"t":"waku, web3","s":"The Waku Network","u":"/learn/waku-network","p":355},{"i":363,"t":"waku, web3","s":"Waku Docs Glossary","u":"/learn/glossary","p":363},{"i":435,"t":"waku, web3","s":"Migrating to Waku v0.027","u":"/migrations/js-waku/migration_v0.026_0.027","p":435},{"i":455,"t":"waku, web3","s":"Incentivisation in decentralised networks","u":"/research/research-and-studies/incentivisation","p":455},{"i":494,"t":"waku, web3","s":"Comparing Waku and libp2p","u":"/learn/waku-vs-libp2p","p":494},{"i":502,"t":"waku, web3","s":"Protocols","u":"/learn/concepts/protocols","p":502},{"i":516,"t":"waku, web3","s":"Capped Bandwidth in Waku","u":"/research/research-and-studies/capped-bandwidth","p":516},{"i":524,"t":"waku, web3","s":"Privacy Policy","u":"/privacy-policy","p":524},{"i":544,"t":"waku, web3","s":"Message Propagation Times With Waku-RLN","u":"/research/research-and-studies/message-propagation","p":544},{"i":554,"t":"waku, web3","s":"Research","u":"/research/","p":554},{"i":556,"t":"waku, web3","s":"Terms of Use","u":"/terms","p":556},{"i":580,"t":"waku, web3","s":"Performance Benchmarks and Test Reports","u":"/research/benchmarks/test-results-summary","p":580},{"i":601,"t":"waku, web3","s":"Rules of Engagement","u":"/rules-of-engagement","p":601},{"i":613,"t":"waku, web3","s":"Maximum Bandwidth for Global Adoption","u":"/research/research-and-studies/maximum-bandwidth","p":613},{"i":621,"t":"waku, web3","s":"PostgreSQL","u":"/research/benchmarks/postgres-adoption","p":621},{"i":638,"t":"waku, web3","s":"RLN Key Benchmarks","u":"/research/research-and-studies/rln-key-benchmarks","p":638},{"i":653,"t":"waku, web3","s":"Security","u":"/security","p":653},{"i":655,"t":"waku, web3","s":"Introduction to Waku","u":"/","p":655}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,0.009,1,0.009]],["t/17",[0,0.009,1,0.009]],["t/27",[0,0.009,1,0.009]],["t/41",[0,0.009,1,0.009]],["t/47",[0,0.009,1,0.009]],["t/53",[0,0.009,1,0.009]],["t/55",[0,0.009,1,0.009]],["t/57",[0,0.009,1,0.009]],["t/69",[0,0.009,1,0.009]],["t/79",[0,0.009,1,0.009]],["t/97",[0,0.009,1,0.009]],["t/112",[0,0.009,1,0.009]],["t/124",[0,0.009,1,0.009]],["t/136",[0,0.009,1,0.009]],["t/152",[0,0.009,1,0.009]],["t/162",[0,0.009,1,0.009]],["t/183",[0,0.009,1,0.009]],["t/201",[0,0.009,1,0.009]],["t/235",[0,0.009,1,0.009]],["t/245",[0,0.009,1,0.009]],["t/257",[0,0.009,1,0.009]],["t/261",[0,0.009,1,0.009]],["t/273",[0,0.009,1,0.009]],["t/283",[0,0.009,1,0.009]],["t/285",[0,0.009,1,0.009]],["t/289",[0,0.009,1,0.009]],["t/293",[0,0.009,1,0.009]],["t/315",[0,0.009,1,0.009]],["t/319",[0,0.009,1,0.009]],["t/323",[0,0.009,1,0.009]],["t/335",[0,0.009,1,0.009]],["t/337",[0,0.009,1,0.009]],["t/343",[0,0.009,1,0.009]],["t/353",[0,0.009,1,0.009]],["t/355",[0,0.009,1,0.009]],["t/363",[0,0.009,1,0.009]],["t/435",[0,0.009,1,0.009]],["t/455",[0,0.009,1,0.009]],["t/494",[0,0.009,1,0.009]],["t/502",[0,0.009,1,0.009]],["t/516",[0,0.009,1,0.009]],["t/524",[0,0.009,1,0.009]],["t/544",[0,0.009,1,0.009]],["t/554",[0,0.009,1,0.009]],["t/556",[0,0.009,1,0.009]],["t/580",[0,0.009,1,0.009]],["t/601",[0,0.009,1,0.009]],["t/613",[0,0.009,1,0.009]],["t/621",[0,0.009,1,0.009]],["t/638",[0,0.009,1,0.009]],["t/653",[0,0.009,1,0.009]],["t/655",[0,0.009,1,0.009]]],"invertedIndex":[["waku",{"_index":0,"t":{"1":{"position":[[0,5]]},"17":{"position":[[0,5]]},"27":{"position":[[0,5]]},"41":{"position":[[0,5]]},"47":{"position":[[0,5]]},"53":{"position":[[0,5]]},"55":{"position":[[0,5]]},"57":{"position":[[0,5]]},"69":{"position":[[0,5]]},"79":{"position":[[0,5]]},"97":{"position":[[0,5]]},"112":{"position":[[0,5]]},"124":{"position":[[0,5]]},"136":{"position":[[0,5]]},"152":{"position":[[0,5]]},"162":{"position":[[0,5]]},"183":{"position":[[0,5]]},"201":{"position":[[0,5]]},"235":{"position":[[0,5]]},"245":{"position":[[0,5]]},"257":{"position":[[0,5]]},"261":{"position":[[0,5]]},"273":{"position":[[0,5]]},"283":{"position":[[0,5]]},"285":{"position":[[0,5]]},"289":{"position":[[0,5]]},"293":{"position":[[0,5]]},"315":{"position":[[0,5]]},"319":{"position":[[0,5]]},"323":{"position":[[0,5]]},"335":{"position":[[0,5]]},"337":{"position":[[0,5]]},"343":{"position":[[0,5]]},"353":{"position":[[0,5]]},"355":{"position":[[0,5]]},"363":{"position":[[0,5]]},"435":{"position":[[0,5]]},"455":{"position":[[0,5]]},"494":{"position":[[0,5]]},"502":{"position":[[0,5]]},"516":{"position":[[0,5]]},"524":{"position":[[0,5]]},"544":{"position":[[0,5]]},"554":{"position":[[0,5]]},"556":{"position":[[0,5]]},"580":{"position":[[0,5]]},"601":{"position":[[0,5]]},"613":{"position":[[0,5]]},"621":{"position":[[0,5]]},"638":{"position":[[0,5]]},"653":{"position":[[0,5]]},"655":{"position":[[0,5]]}}}],["web3",{"_index":1,"t":{"1":{"position":[[7,4]]},"17":{"position":[[7,4]]},"27":{"position":[[7,4]]},"41":{"position":[[7,4]]},"47":{"position":[[7,4]]},"53":{"position":[[7,4]]},"55":{"position":[[7,4]]},"57":{"position":[[7,4]]},"69":{"position":[[7,4]]},"79":{"position":[[7,4]]},"97":{"position":[[7,4]]},"112":{"position":[[7,4]]},"124":{"position":[[7,4]]},"136":{"position":[[7,4]]},"152":{"position":[[7,4]]},"162":{"position":[[7,4]]},"183":{"position":[[7,4]]},"201":{"position":[[7,4]]},"235":{"position":[[7,4]]},"245":{"position":[[7,4]]},"257":{"position":[[7,4]]},"261":{"position":[[7,4]]},"273":{"position":[[7,4]]},"283":{"position":[[7,4]]},"285":{"position":[[7,4]]},"289":{"position":[[7,4]]},"293":{"position":[[7,4]]},"315":{"position":[[7,4]]},"319":{"position":[[7,4]]},"323":{"position":[[7,4]]},"335":{"position":[[7,4]]},"337":{"position":[[7,4]]},"343":{"position":[[7,4]]},"353":{"position":[[7,4]]},"355":{"position":[[7,4]]},"363":{"position":[[7,4]]},"435":{"position":[[7,4]]},"455":{"position":[[7,4]]},"494":{"position":[[7,4]]},"502":{"position":[[7,4]]},"516":{"position":[[7,4]]},"524":{"position":[[7,4]]},"544":{"position":[[7,4]]},"554":{"position":[[7,4]]},"556":{"position":[[7,4]]},"580":{"position":[[7,4]]},"601":{"position":[[7,4]]},"613":{"position":[[7,4]]},"621":{"position":[[7,4]]},"638":{"position":[[7,4]]},"653":{"position":[[7,4]]},"655":{"position":[[7,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.","s":"Debug Your Waku DApp and WebSocket","u":"/guides/js-waku/debug-waku-dapp","h":"","p":1},{"i":4,"t":"When resolving issues in your Waku DApp, debug logs can be helpful. The @waku/sdk and libp2p packages use the debug tool to handle and show logs that help you debug effectively.","s":"Enabling debug logs","u":"/guides/js-waku/debug-waku-dapp","h":"#enabling-debug-logs","p":1},{"i":6,"t":"To enable debug logs for @waku/sdk on NodeJS, you must set the DEBUG environment variable. To only enable debug logs for @waku/sdk: export DEBUG=waku* To enable debug logs for both @waku/sdk and libp2p: export DEBUG=waku*,libp2p* To enable debug logs for all components: export DEBUG=*","s":"NodeJS environments","u":"/guides/js-waku/debug-waku-dapp","h":"#nodejs-environments","p":1},{"i":8,"t":"To view debug logs in your browser's console, modify the local storage and add the debug key. Here are guides for various modern browsers: Google Chrome Firefox JavaScript KEY VALUE DESCRIPTION debug waku* Enables @waku/sdk debug logs debug waku*,libp2p* Enables @waku/sdk and libp2p debug logs debug * Enables all debug logs","s":"Browser environments","u":"/guides/js-waku/debug-waku-dapp","h":"#browser-environments","p":1},{"i":10,"t":"Nwaku provides native support for WebSocket (ws) and WebSocket Secure (wss) protocols. These are the only transports supported for connecting to the Waku Network via browsers. It's important to note that browsers impose certain limitations on WebSocket usage: Secure Context Requirement: Insecure subroutines are prohibited in secure contexts. On an https:// webpage, only wss connections are permitted, while ws connections are not allowed. This restriction does not apply if the webpage is served locally, like on localhost or 127.0.0.1. Certificate Validation: Certificate validation rules are consistent for https and wss connections. Certificates must not be expired, issued by a recognized Certificate Authority (CA), and match the domain name, among other criteria. User Feedback on Errors: Web browsers do not display errors related to subroutines to the user. If a WebSocket connection encounters an issue, users won't be alerted directly; you'll need to check the browser's console for error details. If you encounter difficulties when connecting to a remote node using wss, follow these steps:","s":"Checking WebSocket setup","u":"/guides/js-waku/debug-waku-dapp","h":"#checking-websocket-setup","p":1},{"i":12,"t":"Attempt to connect using websocat, a tool for WebSocket interactions. Test the WebSocket port using the command: websocat -v wss://[WEBSOCKET HOST]:[WEBSOCKET PORT] For example, consider a nwaku node with the multiaddr as /dns4/nwakunode.com/tcp/1234/wss/p2p/16...: $ websocat -v wss://nwakunode.com:1234 # ... [INFO websocat::ws_client_peer] Connected to ws The connection works if the [INFO websocat::ws_client_peer] Connected to ws log entry appears. If not, check that the certificate is valid","s":"Try Websocat for connection","u":"/guides/js-waku/debug-waku-dapp","h":"#try-websocat-for-connection","p":1},{"i":14,"t":"Verify the certificate's validity by passing the -k or --insecure flag to handle invalid certificates in websocat: websocat -v -k wss://nwakunode.com:1234 If this works, the certificate's invalidity is the problem, and you should investigate the cause of the error if not, check if the WebSocket port is accessible.","s":"Check certificate validity","u":"/guides/js-waku/debug-waku-dapp","h":"#check-certificate-validity","p":1},{"i":16,"t":"Use telnet or another networking tool to verify if the WebSocket port is open and accessible. For example, if the multiaddr is /dns4/nwakunode.com/tcp/1234/wss/p2p/16..., use the command: $ telnet nwakunode.com 1234 Trying 123.123.123.123... Connected to nwakunode.com. # ... If the connection succeeds, there might be an issue with nwaku. Consider seeking support on the Waku Discord or raise an issue. If the connection fails, ensure that the WebSocket port is open.","s":"Check WebSocket port accessibility","u":"/guides/js-waku/debug-waku-dapp","h":"#check-websocket-port-accessibility","p":1},{"i":18,"t":"caution Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future. The JavaScript Waku SDK (@waku/sdk) provides a TypeScript implementation of the Waku protocol designed for web browser environments. Developers can seamlessly integrate Waku functionalities into web applications, enabling efficient communication and collaboration among users using the @waku/sdk package.","s":"JavaScript Waku SDK","u":"/guides/js-waku/","h":"","p":17},{"i":20,"t":"Install the @waku/sdk package using your preferred package manager: NPM Yarn npm install @waku/sdk yarn add @waku/sdk You can also use the @waku/sdk package via a CDN without installing it on your system: import * as waku from \"https://unpkg.com/@waku/sdk@latest/bundle/index.js\";","s":"Installation","u":"/guides/js-waku/","h":"#installation","p":17},{"i":22,"t":"We recommend creating a message structure for your application using Protocol Buffers for the following reasons: Consistency: Ensures uniform message format for easy parsing and processing. Interoperability: Facilitates effective communication between different parts of your application. Compatibility: Allows smooth communication between older and newer app versions. Payload Size: Minimizes payload overhead, especially for byte arrays, unlike JSON which adds significant overhead. To get started, install the protobufjs package using your preferred package manager: NPM Yarn npm install protobufjs yarn add protobufjs You can also use the protobufjs package via a CDN without installing it on your system: // Import the CDN import \"https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js\"; ","s":"Message structure","u":"/guides/js-waku/","h":"#message-structure","p":17},{"i":24,"t":"Have a look at the quick start guide and comprehensive tutorials to learn how to build applications using @waku/sdk: Guide Description Send and Receive Messages in a Reliable Channel Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box. Send and Receive Messages Using Light Push and Filter Learn how to send and receive messages on light nodes using the Light Push and Filter protocols Retrieve Messages Using Store Protocol Learn how to retrieve and filter historical messages on light nodes using the Store protocol Encrypt, Decrypt, and Sign Your Messages Learn how to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages Build React DApps Using @waku/react Learn how to use the @waku/react package seamlessly integrate @waku/sdk into a React application Scaffold DApps Using @waku/create-app Learn how to use the @waku/create-app package to bootstrap your next @waku/sdk project from various example templates Bootstrap Nodes and Discover Peers Learn how to bootstrap your node using Static Peers and discover peers using DNS Discovery Run @waku/sdk in a NodeJS Application Learn our suggested approach for using the @waku/sdk package within a NodeJS application Debug Your Waku DApp and WebSocket Learn how to troubleshoot your Waku DApp using debug logs and check WebSocket connections in nwaku Manage Your Filter Subscriptions Learn how to manage filter subscriptions and handle node disconnections in your application tip Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.","s":"Getting started","u":"/guides/js-waku/","h":"#getting-started","p":17},{"i":26,"t":"To engage in general discussions, seek assistance, or stay updated with the latest news, visit the #support and #js-waku-contribute channels on the Waku Discord. If you discover bugs or want to suggest new features, do not hesitate to open an issue in the js-waku repository. Your feedback and contributions are highly valued and will help improve the @waku/sdk package.","s":"Get help and report issues","u":"/guides/js-waku/","h":"#get-help-and-report-issues","p":17},{"i":28,"t":"caution Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future. The @waku/react package provides components and UI adapters to integrate @waku/sdk into React applications effortlessly. This guide provides detailed steps for using @waku/react in your project.","s":"Build React DApps Using @waku/react","u":"/guides/js-waku/use-waku-react","h":"","p":27},{"i":30,"t":"First, set up a project using any production-grade React framework or an existing React application. For this guide, we will create a boilerplate using ViteJS: NPM Yarn npm create vite@latest [PROJECT DIRECTORY] -- --template react yarn create vite [PROJECT DIRECTORY] --template react Next, install the required packages for integrating @waku/sdk using your preferred package manager: NPM Yarn npm install @waku/react @waku/sdk protobufjs yarn add @waku/react @waku/sdk protobufjs","s":"Install the dependencies","u":"/guides/js-waku/use-waku-react","h":"#install-the-dependencies","p":27},{"i":32,"t":"In the main.jsx file, which serves as the entry point for a React app, we will set up the LightNodeProvider context provider to wrap the entire application within the Waku provider. Import the following on top of your file: src/main.jsx import { LightNodeProvider } from \"@waku/react\"; // Set the Light Node options const NODE_OPTIONS = { defaultBootstrap: true }; ReactDOM.createRoot(document.getElementById('root')).render( // Use the Light Node context provider , ) Next, create and start a Light Node using the useWaku() function within the App.jsx file: src/App.jsx import { useWaku } from \"@waku/react\"; function App() { // Create and start a Light Node const { node, error, isLoading } = useWaku(); // \"node\" is the created Light Node // \"error\" captures any error that occurs during node creation // \"isLoading\" indicates whether the node is still being created }","s":"Initialise the Waku provider","u":"/guides/js-waku/use-waku-react","h":"#initialise-the-waku-provider","p":27},{"i":34,"t":"Let's build a user interface for sending messages and viewing past messages, modify the App.jsx file with the following code block: src/App.jsx import { useState, useEffect } from 'react'; import { useWaku } from \"@waku/react\"; import { createEncoder, createDecoder } from \"@waku/sdk\"; import protobuf from 'protobufjs'; import './App.css' function App() { const [inputMessage, setInputMessage] = useState(\"\"); const [messages, setMessages] = useState([]); // Update the inputMessage state as the user input changes const handleInputChange = (e) => { setInputMessage(e.target.value); }; // Create and start a Light Node const { node, error, isLoading } = useWaku(); // Create a message encoder and decoder const contentTopic = \"/waku-react-guide/1/chat/proto\"; const encoder = createEncoder({ contentTopic }); const decoder = createDecoder(contentTopic); // Create a message structure using Protobuf const DataPacket = new protobuf.Type(\"DataPacket\") .add(new protobuf.Field(\"timestamp\", 1, \"uint64\")) .add(new protobuf.Field(\"message\", 2, \"string\")); // Send the message using Light Push const sendMessage = async () => {} return ( <>

    Waku React Demo

    {messages.map((message, index) => (
    {new Date(message.timestamp).toUTCString()}
    {message.message}
    ))}
    ) } export default App info In the code above, we also created a message encoder and decoder using the createEncoder() and createDecoder() functions, along with the application message structure with Protobuf. Next, modify the App.css file with the following code block: src/App.css #root { margin: 0 auto; } .chat-interface { display: flex; flex-direction: column; height: 100vh; border: 1px solid #ccc; } .chat-body { flex-grow: 1; overflow-y: auto; padding: 10px; } .message-text { background-color: #f1f1f1; color: #000; padding: 10px; margin-bottom: 10px; } .chat-footer { display: flex; padding: 10px; background-color: #f1f1f1; align-items: center; } #message-input { flex-grow: 1; border-radius: 4px; padding: 10px; margin-right: 10px; } .send-button { background-color: #007bff; border-radius: 4px; }","s":"Build the application interface","u":"/guides/js-waku/use-waku-react","h":"#build-the-application-interface","p":27},{"i":36,"t":"To send messages in our application, we need to modify the sendMessage() function to serialize user input into our Protobuf structure and push it to the network using the useLightPush() function: src/App.jsx import { useLightPush } from \"@waku/react\"; function App() { // Bind push method to a node and encoder const { push } = useLightPush({ node, encoder }); // Send the message using Light Push const sendMessage = async () => { if (!push || inputMessage.length === 0) return; // Create a new message object const timestamp = Date.now(); const protoMessage = DataPacket.create({ timestamp: timestamp, message: inputMessage }); // Serialise the message and push to the network const payload = DataPacket.encode(protoMessage).finish(); const { recipients, errors } = await push({ payload, timestamp }); // Check for errors if (errors.length === 0) { setInputMessage(\"\"); console.log(\"MESSAGE PUSHED\"); } else { console.log(errors); } }; }","s":"Send messages using light push","u":"/guides/js-waku/use-waku-react","h":"#send-messages-using-light-push","p":27},{"i":38,"t":"To display messages in our application, we need to use the useFilterMessages() function to create a Filter subscription, receive incoming messages, and render them in our interface: src/App.jsx import { useFilterMessages } from \"@waku/react\"; function App() { // Receive messages from Filter subscription const { messages: filterMessages } = useFilterMessages({ node, decoder }); // Render the list of messages useEffect(() => { setMessages(filterMessages.map((wakuMessage) => { if (!wakuMessage.payload) return; return DataPacket.decode(wakuMessage.payload); })); }, [filterMessages]); }","s":"Receive messages using filter","u":"/guides/js-waku/use-waku-react","h":"#receive-messages-using-filter","p":27},{"i":40,"t":"To display messages from the past, we need to retrieve them from the Store protocol using the useStoreMessages() function when our application initialises and then render them alongside newly received messages: src/App.jsx import { useFilterMessages, useStoreMessages } from \"@waku/react\"; function App() { // Query Store peers for past messages const { messages: storeMessages } = useStoreMessages({ node, decoder }); // Receive messages from Filter subscription const { messages: filterMessages } = useFilterMessages({ node, decoder }); // Render both past and new messages useEffect(() => { const allMessages = storeMessages.concat(filterMessages); setMessages(allMessages.map((wakuMessage) => { if (!wakuMessage.payload) return; return DataPacket.decode(wakuMessage.payload); })); }, [filterMessages, storeMessages]); } You can also configure a specific Store peer when creating the node, which is useful when running your own Store node or using a specific node in the network: const node = await createLightNode({ defaultBootstrap: true, store: { peer: \"/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm...\" // multiaddr or PeerId of your Store node } }); If the specified Store peer is not available, the node will fall back to using random Store peers in the network. info To explore the available Store query options, have a look at the Retrieve Messages Using Store Protocol guide. tip You have successfully integrated @waku/sdk into a React application using the @waku/react package. Have a look at the web-chat example for a working demo and the Building a Tic-Tac-Toe Game with Waku tutorial to learn more.","s":"Retrieve messages using store","u":"/guides/js-waku/use-waku-react","h":"#retrieve-messages-using-store","p":27},{"i":42,"t":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","s":"Scaffold DApps Using @waku/create-app","u":"/guides/js-waku/use-waku-create-app","h":"","p":41},{"i":44,"t":"Initialise a new @waku/sdk template using any of the following methods: NPM Yarn npx @waku/create-app [PROJECT DIRECTORY] yarn create @waku/app [PROJECT DIRECTORY] Next, select a template to initialise your app from: tip If you have previously installed @waku/create-app globally, we recommend uninstalling the package to ensure that npx always uses the latest version.","s":"Usage","u":"/guides/js-waku/use-waku-create-app","h":"#usage","p":41},{"i":46,"t":"We welcome and appreciate the contributions of templates for the @waku/create-app package. To contribute a template, please follow these steps: Create the template, ensuring it is user-friendly and thoroughly tested. Place the template in the examples folder in the js-waku-examples repository's root. Commit your changes with a detailed message and push them to your forked repository. Finally, submit a pull request to the js-waku-examples repository. Our team will carefully review and merge your submission upon approval. Waku also provides bounties to encourage community members to contribute to the network and earn rewards. To participate in the bounty program, head to https://github.com/waku-org/bounties.","s":"Contributing new templates","u":"/guides/js-waku/use-waku-create-app","h":"#contributing-new-templates","p":41},{"i":48,"t":"This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.","s":"Manage Your Filter Subscriptions","u":"/guides/js-waku/manage-filter","h":"","p":47},{"i":50,"t":"Occasionally, your Filter subscriptions might disconnect from the Waku Network, resulting in messages not being received by your application. To manage your subscriptions, periodically ping peers to check for an active connection. The error message \"peer has no subscriptions\" indicates a failed ping due to disconnection. You can stop the pings if the disconnection/unsubscription is deliberate.","s":"Overview","u":"/guides/js-waku/manage-filter","h":"#overview","p":47},{"i":52,"t":"The @waku/sdk package provides a Filter.ping() function to ping subscriptions and check for an active connection. To begin, create a Filter subscription: // Create a Filter subscription const { error, subscription } = await node.filter.createSubscription({ contentTopics: [contentTopic] }); if (error) { // handle errors if happens throw Error(error); } // Subscribe to content topics and process new messages await subscription.subscribe([decoder], callback); Next, create a function to ping and reinitiate the subscription: const pingAndReinitiateSubscription = async () => { try { // Ping the subscription await subscription.ping(); } catch (error) { if ( // Check if the error message includes \"peer has no subscriptions\" error instanceof Error && error.message.includes(\"peer has no subscriptions\") ) { // Reinitiate the subscription if the ping fails await subscription.subscribe([decoder], callback); } else { throw error; } } }; // Periodically ping the subscription await pingAndReinitiateSubscription(); info Pings will fail when there are temporary network degradations or reachability issues. This does not mean that the underlying connection has been closed. Congratulations! You have successfully managed your Filter subscriptions to handle node disconnections in your application.","s":"Pinging filter subscriptions","u":"/guides/js-waku/manage-filter","h":"#pinging-filter-subscriptions","p":47},{"i":54,"t":"How do I install the @waku/sdk package in my project? You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started. Why should I use Protocol Buffers for my application's message structure when using Waku? Protocol Buffers ensure consistent formatting, interoperability, and backward compatibility for your application's messages, with a smaller payload size than JSON. Check out the installation guide and Protobuf documentation to learn more. What are the steps to retrieve historical messages on Waku? Check out the Retrieve Messages Using Store Protocol guide to learn how to retrieve and filter historical messages using the Store protocol. How can I prevent Store peers from storing my messages? When creating your message encoder, you can configure the ephemeral option to prevent Store peers from keeping your messages on the Waku Network. How can I encrypt, decrypt, and sign messages in my Waku application? You can encrypt and decrypt your messages using symmetric, ECIES, and noise encryption methods. Check out the Encrypt, Decrypt, and Sign Your Messages guide to get started. How do I integrate Waku into a React application? Waku has a specialized SDK designed for building React applications. Check out the Build React DApps Using @waku/react guide for instructions on installation and usage. How can I bootstrap and discover peers in the Waku Network for browser nodes? The JavaScript SDK has a default bootstrap method that can be configured with Static Peers and DNS Discovery. Check out the Bootstrap Nodes and Discover Peers guide for setting up peer discovery for your node. How can I integrate Waku into a NodeJS application? Though the JavaScript SDK isn't directly usable in NodeJS due to certain limitations, we recommend running nwaku in a Docker container and consuming its REST API in a NodeJS application. How can I debug my Waku DApp and check WebSocket connections? Check out the Debug Your Waku DApp and WebSocket guide to discover how to use debug logs to troubleshoot your Waku DApp and resolve connection issues with nwaku WebSockets. How can I manage unexpected disconnections of my Filter subscription from Waku? We recommend regularly pinging peers to check for an active connection and reinitiating the subscription when it disconnects. Check out the Manage Your Filter Subscriptions guide for a detailed explanation and step-by-step instructions. How can I send images and videos on the Waku Network? While it's possible to transmit media such as images as bytes on Waku, we recommend uploading your media to a CDN or a file system like IPFS and then sharing the corresponding URL via Waku. How can I connect to my own node? To manually set your own node as a starting point use Configure static peers.","s":"JavaScript SDK FAQ","u":"/guides/js-waku/faq","h":"","p":53},{"i":56,"t":"How can I run a Waku node? Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source. What are the system requirements for running a node? We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient. How can I interact with my running nwaku node? You can interact with a running nwaku node using the REST API interface or the JavaScript Waku SDK. How can I view the logs of a nwaku node running in Docker? To check your node logs in Docker, use the command: \"docker-compose logs -f nwaku\" What configuration methods are available for nwaku nodes? You can configure Nwaku nodes using command line options and flags, environment variables, and TOML configuration files. Check out the Node Configuration Methods guide to understand their usage and priority. How can I configure my nwaku node before running? Check out the Node Configuration Options guide for available node configuration options, their default values and descriptions. For examples of common configuration use cases, visit the Node Configuration Examples guide. What peer discovery mechanisms are available for nwaku nodes, and how can I configure them? You can configure peer discovery for nwaku nodes through options like Static Peers, DNS Discovery, DiscV5, and Peer Exchange. Check out the Configure Peer Discovery guide for setting up your node. How do I find my nwaku node's addresses for peer discovery? The node listening and ENR addresses can be found through the node's logs and REST API. Check out the Find the node addresses section to understand how to locate your node addresses.","s":"Nwaku FAQ","u":"/guides/nwaku/faq","h":"","p":55},{"i":58,"t":"This guide provides detailed steps to bootstrap your your node using Static Peers and discover peers in the Waku Network using DNS Discovery. info If you do not set up a bootstrap node or discovery mechanism, your node will not connect to any remote peer. tip Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.","s":"Bootstrap Nodes and Discover Peers","u":"/guides/js-waku/configure-discovery","h":"","p":57},{"i":60,"t":"The @waku/sdk package provides a built-in bootstrapping method that uses DNS Discovery to locate peers from the waku v2.prod ENR tree. import { createLightNode } from \"@waku/sdk\"; // Bootstrap node using the default bootstrap method const node = await createLightNode({ defaultBootstrap: true });","s":"Default bootstrap method","u":"/guides/js-waku/configure-discovery","h":"#default-bootstrap-method","p":57},{"i":62,"t":"To set static peers, a list of multiaddr to bootstrap the node should be passed to the bootstrapPeers parameter of the createLightNode() function: import { createLightNode } from \"@waku/sdk\"; // Bootstrap node using static peers const node = await createLightNode({ bootstrapPeers: [\"[PEER MULTIADDR]\"], }); For example, consider a node that connects to two static peers on the same local host (IP: 0.0.0.0) using TCP ports 60002 and 60003 with WebSocket enabled: // Define the list of static peers to bootstrap const peers = [ \"/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H\", \"/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ\", ]; // Bootstrap node using the static peers const node = await createLightNode({ bootstrapPeers: peers, }); Alternatively, you can dial a particular node like this: // Define the list of static peers to bootstrap const peers = [ \"/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H\", \"/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ\", ]; const node = await createLightNode(); // In case nodes are using IP address and / or `ws` protocol - additional configuration is needed: /* const node = await createLightNode({ libp2p: { filterMultiaddrs: false, }, }); */ const promises = peers.map((multiaddr) => node.dial(multiaddr)); await Promise.all(promises); tip For local development using a nwaku node, use a ws address instead of wss. Remember that this setup is functional only when your web server is running locally. You can check how to get multi address of your locally run node in Find node address.","s":"Configure static peers","u":"/guides/js-waku/configure-discovery","h":"#configure-static-peers","p":57},{"i":64,"t":"To bootstrap a node using DNS Discovery, first install the @waku/dns-discovery package: NPM Yarn npm install @waku/dns-discovery yarn add @waku/dns-discovery Then, use the wakuDnsDiscovery() function to provide a list of URLs for DNS node list in the format enrtree://@: import { createLightNode } from \"@waku/sdk\"; import { wakuDnsDiscovery } from \"@waku/dns-discovery\"; // Define DNS node list const enrTree = \"enrtree://[PUBLIC KEY]@[DOMAIN NAME]\"; // Define node requirements const NODE_REQUIREMENTS = { store: 3, lightPush: 3, filter: 3, }; // Bootstrap node using DNS Discovery const node = await createLightNode({ libp2p: { peerDiscovery: [wakuDnsDiscovery([enrTree], NODE_REQUIREMENTS)], }, }); For example, consider a node that uses the waku v2.prod and waku v2.test ENR trees for DNS Discovery: import { enrTree } from \"@waku/dns-discovery\"; // Bootstrap node using DNS Discovery const node = await createLightNode({ libp2p: { peerDiscovery: [ wakuDnsDiscovery([enrTree[\"PROD\"], enrTree[\"TEST\"]], NODE_REQUIREMENTS), ], }, });","s":"Configure DNS discovery","u":"/guides/js-waku/configure-discovery","h":"#configure-dns-discovery","p":57},{"i":66,"t":"You can also bootstrap your node using DNS Discovery and Static Peers simultaneously: import { createLightNode } from \"@waku/sdk\"; import { bootstrap } from \"@libp2p/bootstrap\"; import { enrTree, wakuDnsDiscovery } from \"@waku/dns-discovery\"; // Define the list of static peers to bootstrap const peers = [ \"/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H\", \"/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ\", ]; // Define node requirements const NODE_REQUIREMENTS = { store: 3, lightPush: 3, filter: 3, }; // Bootstrap node using DNS Discovery and static peers const node = await createLightNode({ libp2p: { bootstrapPeers: peers, peerDiscovery: [wakuDnsDiscovery([enrTree[\"PROD\"]], NODE_REQUIREMENTS)], }, });","s":"Configure DNS discovery and static peers","u":"/guides/js-waku/configure-discovery","h":"#configure-dns-discovery-and-static-peers","p":57},{"i":68,"t":"You can retrieve the array of peers connected to a node using the libp2p.getPeers() function within the @waku/sdk package: import { createLightNode } from \"@waku/sdk\"; const node = await createLightNode({ defaultBootstrap: true }); await node.waitForPeers(); // Retrieve array of peers connected to the node console.log(node.libp2p.getPeers());","s":"Retrieving connected peers","u":"/guides/js-waku/configure-discovery","h":"#retrieving-connected-peers","p":57},{"i":70,"t":"This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.","s":"Run Nwaku in a Docker Container","u":"/guides/nwaku/run-docker","h":"","p":69},{"i":72,"t":"Ensure Docker is installed on your system using the appropriate instructions provided in the Docker documentation. info We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.","s":"Prerequisites","u":"/guides/nwaku/run-docker","h":"#prerequisites","p":69},{"i":74,"t":"The Nwaku Docker images are available on the Docker Hub public registry under the wakuorg/nwaku repository. Please visit wakuorg/nwaku/tags for images of specific releases.","s":"Get Docker image","u":"/guides/nwaku/run-docker","h":"#get-docker-image","p":69},{"i":76,"t":"You can also build the Docker image locally: # Clone the repository git clone --recurse-submodules https://github.com/waku-org/nwaku cd nwaku # Build docker image make docker-image","s":"Build Docker image","u":"/guides/nwaku/run-docker","h":"#build-docker-image","p":69},{"i":78,"t":"Run nwaku in a new Docker container: docker run [OPTIONS] [IMAGE] [ARG...] OPTIONS are your selected Docker options IMAGE is the image and tag you pulled from the registry or built locally ARG... is the list of arguments for your node configuration options Run nwaku using the most typical configuration: docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.32.0 \\ --dns-discovery=true \\ --dns-discovery-url=enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im \\ --discv5-discovery=true \\ --nat=extip:[YOUR PUBLIC IP] # or, if you are behind a nat: --nat=any To find your public IP, use: dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{ print $2}' For more detailed information about all possible configurations, please run docker run -t wakuorg/nwaku:v0.32.0 --help info Note that running a node in The Waku Network (--cluster-id=1) requires a special set of configurations and therefore, it is recommended to run in this case with docker compose info We recommend using explicit port mappings (-p) when exposing ports accessible from outside the host (listening and discovery ports, API servers). tip If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord. Congratulations! You have successfully built and started a nwaku node in a Docker container. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.","s":"Run Docker container","u":"/guides/nwaku/run-docker","h":"#run-docker-container","p":69},{"i":80,"t":"Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box. danger This is an experimental feature and has a number of limitations.","s":"Send and Receive Messages in a Reliable Channel","u":"/guides/js-waku/reliable-channels","h":"","p":79},{"i":82,"t":"npm install @waku/sdk@latest Or using a CDN, note this is an ESM package so type=\"module\" is needed. ","s":"Import Waku SDK","u":"/guides/js-waku/reliable-channels","h":"#import-waku-sdk","p":79},{"i":84,"t":"Use the createLightNode() function to create a Light Node and interact with the Waku Network: import { createLightNode } from \"@waku/sdk\"; // Create a Light Node const node = await createLightNode({ defaultBootstrap: true }); info When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes.","s":"Create a Waku node","u":"/guides/js-waku/reliable-channels","h":"#create-a-waku-node","p":79},{"i":86,"t":"Choose a content topic for your application and create a message encoder and decoder: import { createEncoder, createDecoder } from \"@waku/sdk\"; // Choose a content topic const ct = \"/my-app/1/messages/proto\"; // Create a message encoder and decoder const encoder = node.createEncoder({ contentTopic: ct }); const decoder = node.createDecoder({ contentTopic: ct }); You can also use @waku/message-encryption to encrypt and decrypt messages using Waku libraries. info In this example, users send and receive messages on a shared content topic. However, real applications may have users broadcasting messages while others listen or only have 1:1 exchanges. Waku supports all these use cases.","s":"Create encoders and decoders","u":"/guides/js-waku/reliable-channels","h":"#create-encoders-and-decoders","p":79},{"i":88,"t":"The Waku node will emit health events to help you know whether the node is connected to the network. This can be useful to give feedback to the user, or stop some action (e.g. sending messages) when offline: import { HealthStatus } from \"@waku/sdk\"; node.events.addEventListener(\"waku:health\", (event) => { const health = event.detail; if (health === HealthStatus.SufficientlyHealthy) { // Show to the user they are connected } else if (status === HealthStatus.MinimallyHealthy) { // Maybe put some clue to the user that while we are connected, // there may be issues sending or receiving messages } else { // Show to the user they are disconnected from the network } });","s":"Listen for connection status","u":"/guides/js-waku/reliable-channels","h":"#listen-for-connection-status","p":79},{"i":90,"t":"You need to choose a channel name: it acts as an identifier to the conversation, participants will try to ensure they all have the same messages within a given channel. const channelName = \"channel-number-15\" Finally, each participant need to identify themselves for reliability purposes, so they can confirm others have received their messages. It is up to you how to generate an id. Every participant must have a different id. const senderId = generateRandomStringId(); You can now create a reliable channel: import { ReliableChannel } from \"@waku/sdk\"; const reliableChannel = await ReliableChannel.create(node, channelName, senderId, encoder, decoder) The channel will automatically start the Waku node and fetch messages.","s":"Create a reliable channel","u":"/guides/js-waku/reliable-channels","h":"#create-a-reliable-channel","p":79},{"i":92,"t":"Create your application's message structure using Protobufjs: import protobuf from \"protobufjs\"; // Create a message structure using Protobuf const DataPacket = new protobuf.Type(\"DataPacket\") .add(new protobuf.Field(\"timestamp\", 1, \"uint64\")) .add(new protobuf.Field(\"sender\", 2, \"string\")) .add(new protobuf.Field(\"message\", 3, \"string\")); info Have a look at the Protobuf installation guide for adding the protobufjs package to your project.","s":"Create a message structure","u":"/guides/js-waku/reliable-channels","h":"#create-a-message-structure","p":79},{"i":94,"t":"The reliable channel will emit incoming messages. To process them, simply add a listener: reliableChannel.addEventListener(\"message-received\", (event) => { const wakuMessage = event.detail; // decode your payload using the protobuf object previously created const { timestamp, sender, message } = DataPacket.decode(wakuMessage.payload); // ... process the message as you wish })","s":"Listen to incoming messages","u":"/guides/js-waku/reliable-channels","h":"#listen-to-incoming-messages","p":79},{"i":96,"t":"To send messages in the reliable channel, encode the message in a payload. // Create a new message object const protoMessage = DataPacket.create({ timestamp: Date.now(), sender: \"Alice\", message: \"Hello, World!\", }); // Serialise the message using Protobuf const serialisedMessage = DataPacket.encode(protoMessage).finish(); Then, send the message and setup listeners so you can know when the message: has been sent has been acknowledged by other participants in the channel has encountered an error // Send the message, and get the id to track events const messageId = reliableChannel.send(payload); reliableChannel.addEventListener(\"sending-message-irrecoverable-error\", (event) => { if (messageId === event.detail.messageId) { console.error('Failed to send message:', event.detail.error); // Show an error to the user } }) reliableChannel.addEventListener(\"message-sent\", (event) => { if (messageId === event.detail) { // Message sent, show '✔' to the user, etc } }) reliableChannel.addEventListener(\"message-acknowledged\", (event) => { if (messageId === event.detail) { // Message acknowledged by other participants, show '✔✔' to the user, etc } }) Congratulations! You have successfully sent and received messages over the Waku Network using our reliable protocols such as Scalable Data Sync (SDS) and P2P Reliability.","s":"Send messages","u":"/guides/js-waku/reliable-channels","h":"#send-messages","p":79},{"i":98,"t":"While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.","s":"Run @waku/sdk in a NodeJS Application","u":"/guides/js-waku/run-waku-nodejs","h":"","p":97},{"i":101,"t":"@waku/sdk prioritises browser compatibility, avoiding NodeJS APIs for simpler bundling. This design choice enhances browser API compatibility but sacrifices NodeJS optimisation. While many browser APIs work in NodeJS, they might need better optimisation.","s":"API compatibility","u":"/guides/js-waku/run-waku-nodejs","h":"#api-compatibility","p":97},{"i":103,"t":"@waku/sdk focuses on the client side of the Request/Response protocol. We'll have to replicate all the functionalities added to nwaku to implement extra features.","s":"Protocol implementation","u":"/guides/js-waku/run-waku-nodejs","h":"#protocol-implementation","p":97},{"i":105,"t":"@waku/sdk aims to provide optimal default for the browser, striking a balance between browser and NodeJS compatibility while ensuring simplicity will add complexity.","s":"Codebase complexity","u":"/guides/js-waku/run-waku-nodejs","h":"#codebase-complexity","p":97},{"i":107,"t":"Certain features in @waku/sdk are tailored for browsers and might not translate seamlessly to NodeJS. For example, only WebSocket is supported in the browser, whereas a NodeJS application can benefit from using transport methods like TCP. @waku/sdk default peer management caters to the browser's ephemeral nature, which is different for NodeJS. This is why DNS Discovery and Peer Exchange are the default discovery mechanisms for the browser but not for NodeJS and desktop applications.","s":"Browser-specific protocols","u":"/guides/js-waku/run-waku-nodejs","h":"#browser-specific-protocols","p":97},{"i":109,"t":"Before using @waku/sdk in a NodeJS environment, take into account these limitations. For a more optimised solution, we recommend running nwaku in a Docker container and consuming its REST API.","s":"Recommendations","u":"/guides/js-waku/run-waku-nodejs","h":"#recommendations","p":97},{"i":111,"t":"There are plans to release a NodeJS package based on nwaku to streamline the process of using Waku Network features in NodeJS applications. You can track the progress and updates here: https://github.com/waku-org/nwaku/issues/1332.","s":"Future developments","u":"/guides/js-waku/run-waku-nodejs","h":"#future-developments","p":97},{"i":113,"t":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods. info Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to freely use custom protocols or Waku message payload encryption methods.","s":"Encrypt, Decrypt, and Sign Your Messages","u":"/guides/js-waku/message-encryption","h":"","p":112},{"i":115,"t":"Install the required packages for integrating @waku/message-encryption using your preferred package manager: NPM Yarn npm install @waku/message-encryption @waku/utils yarn add @waku/message-encryption @waku/utils","s":"Installation","u":"/guides/js-waku/message-encryption","h":"#installation","p":112},{"i":117,"t":"Symmetric encryption uses a single, shared key for message encryption and decryption. Use the generateSymmetricKey() function to generate a random symmetric key: import { generateSymmetricKey } from \"@waku/message-encryption\"; // Generate a random symmetric key const symmetricKey = generateSymmetricKey(); To send encrypted messages, create a Symmetric message encoder and send the message as usual: Sender client import { createEncoder } from \"@waku/message-encryption/symmetric\"; // Create a symmetric message encoder const encoder = createEncoder({ contentTopic: contentTopic, // message content topic symKey: symmetricKey, // symmetric key for encrypting messages }); // Send the message using Light Push await node.lightPush.send(encoder, { payload }); To decrypt the messages you receive, create a symmetric message decoder and process the messages as usual: Receiver client import { createDecoder } from \"@waku/message-encryption/symmetric\"; // Create a symmetric message decoder const decoder = createDecoder(contentTopic, symmetricKey); // Receive messages from a Filter subscription await subscription.subscribe([decoder], callback); // Retrieve messages from Store peers await node.store.queryWithOrderedCallback([decoder], callback); tip The symmetric key exchange between users can happen through an out-of-band method. For example, where the key is embedded within the URL shared by a user to access a specific resource.","s":"Symmetric encryption","u":"/guides/js-waku/message-encryption","h":"#symmetric-encryption","p":112},{"i":119,"t":"ECIES encryption uses a public key for encryption and a private key for decryption. Use the generatePrivateKey() function to generate a random ECDSA private key: import { generatePrivateKey, getPublicKey } from \"@waku/message-encryption\"; // Generate a random ECDSA private key, keep secure const privateKey = generatePrivateKey(); // Generate a public key from the private key, provide to the sender const publicKey = getPublicKey(privateKey); To send encrypted messages, create an ECIES message encoder with the public key and send the message as usual: Sender client import { createEncoder } from \"@waku/message-encryption/ecies\"; // Create an ECIES message encoder const encoder = createEncoder({ contentTopic: contentTopic, // message content topic publicKey: publicKey, // ECIES public key for encrypting messages }); // Send the message using Light Push await node.lightPush.send(encoder, { payload }); To decrypt the messages you receive, create an ECIES message decoder with the private key and process the messages as usual: Receiver client import { createDecoder } from \"@waku/message-encryption/ecies\"; // Create an ECIES message decoder const decoder = createDecoder(contentTopic, privateKey); // Receive messages from a Filter subscription await subscription.subscribe([decoder], callback); // Retrieve messages from Store peers await node.store.queryWithOrderedCallback([decoder], callback); tip Users can share their public key through broadcasting or out-of-band methods, such as embedding it in a URL or sending an unencrypted message on another content topic for others to retrieve.","s":"ECIES encryption","u":"/guides/js-waku/message-encryption","h":"#ecies-encryption","p":112},{"i":121,"t":"Message signing helps in proving the authenticity of received messages. By attaching a signature to a message, you can verify its origin and integrity with absolute certainty. info Signing messages is only possible when encrypted, but if your application does not require encryption, you can generate a symmetric key through hardcoded or deterministic methods using information available to all users. The sigPrivKey parameter allows the Symmetric and ECIES message encoders to sign the message before encryption using an ECDSA private key: Alice (sender) client import { generatePrivateKey, getPublicKey } from \"@waku/message-encryption\"; import { createEncoder as createSymmetricEncoder } from \"@waku/message-encryption/symmetric\"; import { createEncoder as createECIESEncoder } from \"@waku/message-encryption/ecies\"; // Generate a random ECDSA private key for signing messages // ECIES encryption and message signing both use ECDSA keys // For this example, we'll call the sender of the message Alice const alicePrivateKey = generatePrivateKey(); const alicePublicKey = getPublicKey(alicePrivateKey); // Create a symmetric encoder that signs messages const symmetricEncoder = createSymmetricEncoder({ contentTopic: contentTopic, // message content topic symKey: symmetricKey, // symmetric key for encrypting messages sigPrivKey: alicePrivateKey, // private key for signing messages before encryption }); // Create an ECIES encoder that signs messages const ECIESEncoder = createECIESEncoder({ contentTopic: contentTopic, // message content topic publicKey: publicKey, // ECIES public key for encrypting messages sigPrivKey: alicePrivateKey, // private key for signing messages before encryption }); // Send and receive your messages as usual with Light Push and Filter await subscription.subscribe([symmetricEncoder], callback); await node.lightPush.send(symmetricEncoder, { payload }); await subscription.subscribe([ECIESEncoder], callback); await node.lightPush.send(ECIESEncoder, { payload }); You can extract the signature and its public key (signaturePublicKey) from the DecodedMessage and compare it with the expected public key or use the verifySignature() function to verify the message origin: Bob (receiver) client import { generatePrivateKey } from \"@waku/message-encryption\"; import { createEncoder } from \"@waku/message-encryption/symmetric\"; // Generate a random private key for signing messages // For this example, we'll call the receiver of the message Bob const bobPrivateKey = generatePrivateKey(); // Create an encoder that signs messages const encoder = createEncoder({ contentTopic: contentTopic, symKey: symmetricKey, sigPrivKey: bobPrivateKey, }); // Modify the callback function to verify message signature const callback = (wakuMessage) => { // Extract the message signature and public key of the signature // You can compare the signaturePublicKey with Alice public key const signature = wakuMessage.signature; const signaturePublicKey = wakuMessage.signaturePublicKey; // Verify the message was actually signed and sent by Alice // Alice's public key can be gotten from broadcasting or out-of-band methods if (wakuMessage.verifySignature(alicePublicKey)) { console.log(\"This message was signed by Alice\"); } else { console.log(\"This message was NOT signed by Alice\"); } }; await subscription.subscribe([encoder], callback);","s":"Signing encrypted messages","u":"/guides/js-waku/message-encryption","h":"#signing-encrypted-messages","p":112},{"i":123,"t":"We used randomly generated keys for encryption and message signing in the provided examples, but real-world applications require consistent keys among client restarts. Have a look at the Key Pair Handling example, which demonstrates the secure storage and retrieval of key information from local storage using Subtle Crypto. If you need a simple way to store your keys in hexadecimal format across your application, you can use the @waku/utils package: import { bytesToHex, hexToBytes } from \"@waku/utils/bytes\"; // Generate random symmetric and private keys const symmetricKey = generateSymmetricKey(); const privateKey = generatePrivateKey(); // Store the keys in hexadecimal format const symmetricKeyHex = bytesToHex(symmetricKey); const privateKeyHex = bytesToHex(privateKey); // Restore the keys from hexadecimal format const restoredSymmetricKey = hexToBytes(symmetricKeyHex); const restoredPrivateKey = hexToBytes(privateKeyHex); Congratulations! You have successfully encrypted, decrypted, and signed your messages using Symmetric and ECIES encryption methods. Have a look at the eth-pm example for a working demo.","s":"Storing encryption keys","u":"/guides/js-waku/message-encryption","h":"#storing-encryption-keys","p":112},{"i":125,"t":"This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead. info A minimum of 2GB of RAM is required to build nwaku. Nwaku is available for Linux and macOS, with experimental Windows support.","s":"Build Nwaku from Source","u":"/guides/nwaku/build-source","h":"","p":124},{"i":127,"t":"To build nwaku, you need the standard developer tools, including a C compiler, GNU Make, Bash, Git, Rustup, and PostgreSQL client library. Debian and Ubuntu Fedora Arch Linux MacOS (Homebrew) sudo apt-get install build-essential git libpq5 jq curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source \"$HOME/.cargo/env\" sudo dnf install @development-tools git libpq-devel which curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Using your favoured AUR helper sudo [AUR HELPER] -S base-devel git postgresql-libs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh brew install cmake git postgresql@15 rustup-init # Create a symbolic link to libpq.5.dylib in /usr/local/lib/ sudo mkdir -p /usr/local/lib/ sudo ln -s /opt/homebrew/opt/postgresql@15/lib/libpq.5.dylib /usr/local/lib/libpq.dylib","s":"Prerequisites","u":"/guides/nwaku/build-source","h":"#prerequisites","p":124},{"i":129,"t":"Get the source code from the GitHub repository. The default branch is master, the release candidate for major updates. git clone https://github.com/waku-org/nwaku cd nwaku tip You can use git tag -l to check specific version tags.","s":"Clone the repository","u":"/guides/nwaku/build-source","h":"#clone-the-repository","p":124},{"i":131,"t":"Build the nwaku binary: make wakunode2 The first make invocation updates to all Git submodules. After each git pull, run make update to keep the submodules updated in the future. make update","s":"Build the binary","u":"/guides/nwaku/build-source","h":"#build-the-binary","p":124},{"i":133,"t":"Nwaku will create the wakunode2 binary in the ./build/ directory. # Run with default configuration ./build/wakunode2 # See available command line options ./build/wakunode2 --help To learn more about running nwaku, have a look at these guides: Run a Nwaku Node Run Nwaku in a Docker Container Run Nwaku with Docker Compose Node Configuration Methods","s":"Run the binary","u":"/guides/nwaku/build-source","h":"#run-the-binary","p":124},{"i":135,"t":"Run the tests for Waku: make test Congratulations! You have successfully built the nwaku binary from the source code. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.","s":"Run test suite","u":"/guides/nwaku/build-source","h":"#run-test-suite","p":124},{"i":137,"t":"This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.","s":"Send and Receive Messages Using Light Push and Filter","u":"/guides/js-waku/light-send-receive","h":"","p":136},{"i":139,"t":"Use the createLightNode() function to create a Light Node and interact with the Waku Network: import { createLightNode } from \"@waku/sdk\"; // Create and start a Light Node const node = await createLightNode({ defaultBootstrap: true }); await node.start(); // Use the stop() function to stop a running node // await node.stop(); info When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes. A node needs to know how to route messages. By default, it will use The Waku Network configuration ({ clusterId: 1, shards: [0,1,2,3,4,5,6,7] }). For most applications, it's recommended to use autosharding: // Create node with auto sharding (recommended) const node = await createLightNode({ defaultBootstrap: true, networkConfig: { clusterId: 1, contentTopics: [\"/my-app/1/notifications/proto\"], }, });","s":"Create a light node","u":"/guides/js-waku/light-send-receive","h":"#create-a-light-node","p":136},{"i":141,"t":"If your project requires a specific network configuration, you can use static sharding: // Create node with static sharding const node = await createLightNode({ defaultBootstrap: true, networkConfig: { clusterId: 1, shards: [0, 1, 2, 3], }, });","s":"Alternative network configuration","u":"/guides/js-waku/light-send-receive","h":"#alternative-network-configuration","p":136},{"i":143,"t":"Use the node.waitForPeers() function to wait for the node to connect with peers on the Waku Network: // Wait for a successful peer connection await node.waitForPeers(); The protocols parameter allows you to specify the protocols that the remote peers should have enabled: import { Protocols } from \"@waku/sdk\"; // Wait for peer connections with specific protocols await node.waitForPeers([Protocols.LightPush, Protocols.Filter]);","s":"Connect to remote peers","u":"/guides/js-waku/light-send-receive","h":"#connect-to-remote-peers","p":136},{"i":145,"t":"Choose a content topic for your application and create a message encoder and decoder: import { createEncoder, createDecoder } from \"@waku/sdk\"; // Choose a content topic const contentTopic = \"/light-guide/1/message/proto\"; // Create a message encoder and decoder const encoder = createEncoder({ contentTopic }); const decoder = createDecoder(contentTopic); The ephemeral parameter allows you to specify whether messages should NOT be stored by Store peers: const encoder = createEncoder({ contentTopic: contentTopic, // message content topic ephemeral: true, // allows messages NOT be stored on the network }); The pubsubTopicShardInfo parameter allows you to configure a different network configuration for your encoder and decoder: // Create the network config const networkConfig = { clusterId: 3, shards: [1, 2] }; // Create encoder and decoder with custom network config const encoder = createEncoder({ contentTopic: contentTopic, pubsubTopicShardInfo: networkConfig, }); const decoder = createDecoder(contentTopic, networkConfig); info In this example, users send and receive messages on a shared content topic. However, real applications may have users broadcasting messages while others listen or only have 1:1 exchanges. Waku supports all these use cases.","s":"Choose a content topic","u":"/guides/js-waku/light-send-receive","h":"#choose-a-content-topic","p":136},{"i":147,"t":"Create your application's message structure using Protobuf's valid message fields: import protobuf from \"protobufjs\"; // Create a message structure using Protobuf const DataPacket = new protobuf.Type(\"DataPacket\") .add(new protobuf.Field(\"timestamp\", 1, \"uint64\")) .add(new protobuf.Field(\"sender\", 2, \"string\")) .add(new protobuf.Field(\"message\", 3, \"string\")); info Have a look at the Protobuf installation guide for adding the protobufjs package to your project.","s":"Create a message structure","u":"/guides/js-waku/light-send-receive","h":"#create-a-message-structure","p":136},{"i":149,"t":"To send messages over the Waku Network using the Light Push protocol, create a new message object and use the lightPush.send() function: // Create a new message object const protoMessage = DataPacket.create({ timestamp: Date.now(), sender: \"Alice\", message: \"Hello, World!\", }); // Serialise the message using Protobuf const serialisedMessage = DataPacket.encode(protoMessage).finish(); // Send the message using Light Push await node.lightPush.send(encoder, { payload: serialisedMessage, });","s":"Send messages using light push","u":"/guides/js-waku/light-send-receive","h":"#send-messages-using-light-push","p":136},{"i":151,"t":"To receive messages using the Filter protocol, create a callback function for message processing, then use the filter.subscribe() function to subscribe to a content topic: // Create the callback function const callback = (wakuMessage) => { // Check if there is a payload on the message if (!wakuMessage.payload) return; // Render the messageObj as desired in your application const messageObj = DataPacket.decode(wakuMessage.payload); console.log(messageObj); }; // Create a Filter subscription const { error, subscription } = await node.filter.createSubscription({ contentTopics: [contentTopic] }); if (error) { // handle errors if happens throw Error(error); } // Subscribe to content topics and process new messages await subscription.subscribe([decoder], callback); The pubsubTopicShardInfo parameter allows you to configure a different network configuration for your Filter subscription: // Create the network config const networkConfig = { clusterId: 3, shards: [1, 2] }; // Create Filter subscription with custom network config const subscription = await node.filter.createSubscription(networkConfig); You can use the subscription.unsubscribe() function to stop receiving messages from a content topic: await subscription.unsubscribe([contentTopic]); Congratulations! You have successfully sent and received messages over the Waku Network using the Light Push and Filter protocols. Have a look at the light-js and light-chat examples for working demos.","s":"Receive messages using filter","u":"/guides/js-waku/light-send-receive","h":"#receive-messages-using-filter","p":136},{"i":153,"t":"Waku nodes can be configured using a combination of the following methods: Command line options and flags Environment variables TOML configuration files (currently the only supported format) Default values info Take note of the precedence order: Each configuration method overrides the one below it (e.g., command line options override environment variables and configuration files).","s":"Node Configuration Methods","u":"/guides/nwaku/config-methods","h":"","p":152},{"i":155,"t":"Node configuration is primarily done using command line options, which override other methods. Specify configuration options by providing them in this format after the binary name: ./build/wakunode2 --tcp-port=65000 When running your node with Docker, provide the command line options after the image name in this format: docker run wakuorg/nwaku --tcp-port=65000","s":"Command line options","u":"/guides/nwaku/config-methods","h":"#command-line-options","p":152},{"i":157,"t":"Nodes can be configured using environment variables by prefixing the variable name with WAKUNODE2_ and using the configuration option in SCREAMING_SNAKE_CASE format. To set the tcp-port configuration, the wakunode2 binary should be called in this format: WAKUNODE2_TCP_PORT=65000 ./build/wakunode2 When running your node with Docker, start the node using the -e command option: docker run -e \"WAKUNODE2_TCP_PORT=65000\" wakuorg/nwaku info This is the second configuration method in order of precedence. Command Line Options override environment variables.","s":"Environment variables","u":"/guides/nwaku/config-methods","h":"#environment-variables","p":152},{"i":159,"t":"Nodes can be configured using a configuration file following the TOML format: TOML Config File log-level = \"DEBUG\" tcp-port = 65000 topic = [\"/waku/2/default-waku/proto\"] metrics-logging = false The config-file configuration option lets you specify the configuration file path: ./build/wakunode2 --config-file=[TOML CONFIGURATION FILE] You can also specify the configuration file via environment variables: # Using environment variables WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE] ./build/wakunode2 # Using environment variables with Docker docker run -e \"WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE]\" wakuorg/nwaku info This is the third configuration method in order of precedence. Command Line Options and Environment Variables override configuration files.","s":"Configuration files","u":"/guides/nwaku/config-methods","h":"#configuration-files","p":152},{"i":161,"t":"The default configuration is used when no other options are specified. By default, a nwaku node does the following: Generate a new Node Key and PeerID. Listen for incoming libp2p connections on the default TCP port (60000). Subscribe to the default Pub/Sub topic (/waku/2/default-waku/proto). Enable the Relay protocol for relaying messages. Enable the Store protocol as a client, allowing it to query peers for historical messages but not store any message itself. To see the default values of all configuration options, run wakunode2 --help: ./build/wakunode2 --help tip To explore the available node configuration options, have a look at the Node Configuration Options guide.","s":"Default configuration values","u":"/guides/nwaku/config-methods","h":"#default-configuration-values","p":152},{"i":163,"t":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","s":"Retrieve Messages Using Store Protocol","u":"/guides/js-waku/store-retrieve-messages","h":"","p":162},{"i":165,"t":"Use the createLightNode() function to create a Light Node and interact with the Waku Network: import { createLightNode } from \"@waku/sdk\"; // Create and start a Light Node const node = await createLightNode({ defaultBootstrap: true }); await node.start();","s":"Create a light node","u":"/guides/js-waku/store-retrieve-messages","h":"#create-a-light-node","p":162},{"i":167,"t":"Use the node.waitForPeers() method to wait for the node to connect with Store peers: import { Protocols } from \"@waku/sdk\"; // Wait for a successful peer connection await node.waitForPeers([Protocols.Store]); You can also specify a dedicated Store peer to use for queries when creating the node. This is particularly useful when running your own Store node or when you want to use a specific Store node in the network: const node = await createLightNode({ defaultBootstrap: true, store: { peer: \"/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm...\" // multiaddr or PeerId of your Store node } }); If the specified Store peer is not available, the node will fall back to using random Store peers in the network.","s":"Connect to store peers","u":"/guides/js-waku/store-retrieve-messages","h":"#connect-to-store-peers","p":162},{"i":169,"t":"Choose a content topic for filtering the messages to retrieve and create a message decoder: import { createDecoder } from \"@waku/sdk\"; // Choose a content topic const contentTopic = \"/store-guide/1/message/proto\"; // Create a message decoder const decoder = createDecoder(contentTopic);","s":"Choose a content topic","u":"/guides/js-waku/store-retrieve-messages","h":"#choose-a-content-topic","p":162},{"i":171,"t":"@waku/sdk provides the queryWithOrderedCallback() and queryGenerator() functions for querying Store nodes and retrieving historical or missed messages. The responses from Store nodes are paginated and require you to process each page sequentially.","s":"Retrieve messages","u":"/guides/js-waku/store-retrieve-messages","h":"#retrieve-messages","p":162},{"i":173,"t":"The store.queryWithOrderedCallback() function provides a straightforward method for querying Store nodes and processing messages in chronological order through a callback function. It accepts these parameters: decoders: List of decoders that specify the content topic to query for and their message decryption methods. callback: The callback function for processing the retrieved messages. options (optional): Query options to filter the retrieved messages. // Create the callback function const callback = (wakuMessage) => { // Render the message/payload in your application console.log(wakuMessage); }; // Query the Store peer await node.store.queryWithOrderedCallback([decoder], callback); info The queryWithOrderedCallback() function always returns the most recent messages in a page first.","s":"queryWithOrderedCallback","u":"/guides/js-waku/store-retrieve-messages","h":"#querywithorderedcallback","p":162},{"i":175,"t":"The store.queryGenerator() function provides more control and flexibility over processing messages retrieved from Store nodes through Async Generators. It accepts these parameters: decoders: List of decoders that specify the content topic to query for and their message decryption methods. options (optional): Query options to filter the retrieved messages. // Create the store query const storeQuery = node.store.queryGenerator([decoder]); // Process the messages for await (const messagesPromises of storeQuery) { // Fulfil the messages promises const messages = await Promise.all( messagesPromises.map(async (p) => { const msg = await p; // Render the message/payload in your application console.log(msg); }) ); } info The queryGenerator() function always returns the oldest messages in a page first.","s":"queryGenerator","u":"/guides/js-waku/store-retrieve-messages","h":"#querygenerator","p":162},{"i":178,"t":"The pageDirection option specifies the direction in which pages are retrieved: BACKWARD (default): Most recent page first. FORWARD: Oldest page first. import { PageDirection } from \"@waku/sdk\"; // Retrieve recent messages first const queryOptions = { pageDirection: PageDirection.BACKWARD, }; // Retrieve oldest messages first const queryOptions = { pageDirection: PageDirection.FORWARD, }; // Query the Store peer with options await node.store.queryWithOrderedCallback([decoder], callback, options); const storeQuery = node.store.queryGenerator([decoder, options]);","s":"pageDirection","u":"/guides/js-waku/store-retrieve-messages","h":"#pagedirection","p":162},{"i":180,"t":"The cursor option specifies the starting index for retrieving messages. For example, consider a query that retrieves the first page messages and then continues with the next page: import { waku } from \"@waku/sdk\"; // Create the callback function const messages = []; const callback = (wakuMessage) => { messages.push(wakuMessage); // Return \"true\" to stop retrieving pages // Here, it retrieves only the first page return true; }; // Retrieve the first page of messages // This retrieves all the messages if \"return true\" is not present await node.store.queryWithOrderedCallback([decoder], callback); // Create the cursor const lastMessage = messages[messages.length - 1]; const cursor = await waku.createCursor(lastMessage); // Retrieve the next page of messages // The message at the cursor index is excluded from the result await node.store.queryWithOrderedCallback([decoder], callback, { cursor: cursor, }); console.log(messages); info If you omit the cursor option, the query will start from the beginning or end of the history, depending on the page direction.","s":"cursor","u":"/guides/js-waku/store-retrieve-messages","h":"#cursor","p":162},{"i":182,"t":"The timeFilter option specifies a time frame to retrieve messages from. For example, consider a query that retrieves messages from the previous week: // Get the time frame const endTime = new Date(); const startTime = new Date(); startTime.setDate(endTime.getDate() - 7); // Retrieve a week of messages const queryOptions = { timeFilter: { startTime, endTime, }, }; // Query the Store peer with options await node.store.queryWithOrderedCallback([decoder], callback, options); const storeQuery = node.store.queryGenerator([decoder, options]); info The timeFilter option significantly reduces message retrieval performance. To optimise it, consider resuming message retrieval using a cursor that starts from the last seen message. Congratulations! You have successfully retrieved and filtered historical messages on a Light Node using the Store protocol. Have a look at the store-js and store-reactjs-chat examples for working demos.","s":"timeFilter","u":"/guides/js-waku/store-retrieve-messages","h":"#timefilter","p":162},{"i":184,"t":"nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically: nwaku node running Relay and Store protocols with RLN enabled. Simple frontend to interact with the node and Waku network to send and receive messages. Grafana metrics dashboard for advanced users and node operators to monitor the node.","s":"Run Nwaku with Docker Compose","u":"/guides/nwaku/run-docker-compose","h":"","p":183},{"i":186,"t":"tip Check out the Waku Node Operator Cheatsheet to learn how to easily run, monitor, and interact with a node.","s":"Video tutorial","u":"/guides/nwaku/run-docker-compose","h":"#video-tutorial","p":183},{"i":188,"t":"Git or GitHub Desktop Docker and Docker Compose Ethereum Sepolia HTTPS Endpoint Wallet with Sepolia Ethereum (~0.6 Sepolia ETH) A password to protect your RLN membership info We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.","s":"Prerequisites","u":"/guides/nwaku/run-docker-compose","h":"#prerequisites","p":183},{"i":190,"t":"git clone https://github.com/waku-org/nwaku-compose cd nwaku-compose","s":"Clone the repository","u":"/guides/nwaku/run-docker-compose","h":"#clone-the-repository","p":183},{"i":192,"t":"Docker Compose reads the .env file from the filesystem. You can use .env.example as a template to provide the configuration values. The recommended process for working with .env files is to duplicate .env.example, rename it as .env, and then make the necessary value edits. cp .env.example .env ${EDITOR} .env caution Ensure that you do NOT include any secrets in the .env.example file, as it could accidentally be shared in your Git repository.","s":"Configure the setup","u":"/guides/nwaku/run-docker-compose","h":"#configure-the-setup","p":183},{"i":194,"t":"The RLN membership is your access key to The Waku Network. Its registration is done on-chain, allowing your nwaku node to send messages decentralised and privately, respecting some rate limits. Other peers won't relay messages that exceed the rate limit. This command registers your membership and saves it in the keystore/keystore.json file. You should have Docker running at this step: ./register_rln.sh tip If you only want to relay traffic without sending messages to the network, you don't need to register for RLN membership.","s":"Register for RLN membership","u":"/guides/nwaku/run-docker-compose","h":"#register-for-rln-membership","p":183},{"i":196,"t":"Launch all the processes: nwaku node, database for storing messages, and Grafana for metrics with the following command. Your RLN membership is loaded into nwaku under the hood: docker-compose up -d View the logs of the node to confirm that it is running correctly: docker-compose logs -f nwaku","s":"Run the node","u":"/guides/nwaku/run-docker-compose","h":"#run-the-node","p":183},{"i":198,"t":"Visit http://localhost:3000/d/yns_4vFVk/nwaku-monitoring to view your node metrics in real time. tip To access Grafana from outside your machine, remove 127.0.0.1 and open the port. Consider setting up a password for Grafana to ensure security.","s":"Monitor the node","u":"/guides/nwaku/run-docker-compose","h":"#monitor-the-node","p":183},{"i":200,"t":"Your nwaku node provides a REST API on port 8645 for interacting with it: # Get nwaku version curl --location 'http://127.0.0.1:8645/debug/v1/version' # Get nwaku info curl --location 'http://127.0.0.1:8645/debug/v1/info' Send a message to a contentTopic, which all subscribers will receive. Please note that the payload is encoded in base64. curl --location 'http://127.0.0.1:8645/relay/v1/auto/messages' \\ --header 'Content-Type: application/json' \\ --data '{ \"payload\": \"'$(echo -n \"Hello Waku Network - from Anonymous User\" | base64)'\", \"contentTopic\": \"/my-app/2/chatroom-1/proto\" }' Retrieve messages sent to a contentTopic. Please note that this query can be made to any Store node within the network: curl --location 'http://127.0.0.1:8645/store/v1/messages?contentTopics=%2Fmy-app%2F2%2Fchatroom-1%2Fproto&pageSize=50&ascending=true' \\ --header 'Accept: application/json' tip If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord. Congratulations! You have successfully started a nwaku node with RLN enabled using Docker Compose. Have a look at the Node Configuration Examples and Advanced Configuration guides to learn how to configure nwaku for different use cases.","s":"Interact with the node","u":"/guides/nwaku/run-docker-compose","h":"#interact-with-the-node","p":183},{"i":202,"t":"Here are the available node configuration options, along with their default values and descriptions:","s":"Node Configuration Options","u":"/guides/nwaku/config-options","h":"","p":201},{"i":204,"t":"Name Default Value Description config-file Loads configuration from a TOML file (cmd-line parameters take precedence) protected-shard newSeq[ProtectedShard](0) Shards and its public keys to be used for message validation, shard:pubkey. Argument may be repeated","s":"Application-level config","u":"/guides/nwaku/config-options","h":"#application-level-config","p":201},{"i":206,"t":"Name Default Value Description log-level logging.LogLevel.INFO Sets the log level for process. Supported levels: TRACE, DEBUG, INFO, NOTICE, WARN, ERROR or FATAL log-format logging.LogFormat.TEXT Specifies what kind of logs should be written to stdout. Supported formats: TEXT, JSON","s":"Log config","u":"/guides/nwaku/config-options","h":"#log-config","p":201},{"i":208,"t":"Name Default Value Description cluster-id 0 Cluster id that the node is running in. Node in a different cluster id is disconnected agent-string nwaku Node agent string which is used as identifier in network nodekey P2P node private key as 64-char hex string listen-address defaultListenAddress() Listening address for LibP2P (and Discovery v5, if enabled) traffic tcp-port 60000 TCP listening port ports-shift 0 Add a shift to all port numbers nat any Specify method to use for determining public address. Must be one of: any, none, upnp, pmp, extip:IP ext-multiaddr External multiaddresses to advertise to the network. Argument may be repeated ext-multiaddr-only false Only announce external multiaddresses max-connections 50 Maximum allowed number of libp2p connections relay-service-ratio \"60:40\" This percentage ratio represents the relay peers to service peers. For example, 60:40, tells that 60% of the max-connections will be used for relay protocol and the other 40% of max-connections will be reserved for other service protocols (e.g., filter, lightpush, store, metadata, etc.) peer-store-capacity Maximum stored peers in the peerstore peer-persistence false Enable peer persistence","s":"General node config","u":"/guides/nwaku/config-options","h":"#general-node-config","p":201},{"i":210,"t":"Name Default Value Description dns-addrs true Enable resolution of dnsaddr, dns4 or dns6 multiaddrs dns-addrs-name-server [\"1.1.1.1\", \"1.0.0.1\"] DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated dns4-domain-name The domain name resolving to the node's public IPv4 address","s":"DNS addrs config","u":"/guides/nwaku/config-options","h":"#dns-addrs-config","p":201},{"i":212,"t":"Name Default Value Description relay true Enable relay protocol: true|false relay-peer-exchange false Enable gossipsub peer exchange in relay protocol: true|false rln-relay false Enable spam protection through rln-relay: true|false rln-relay-cred-path The path for persisting rln-relay credential rln-relay-membership-index The index of the onchain commitment to use rln-relay-dynamic false Enable waku-rln-relay with on-chain dynamic group management: true|false rln-relay-id-key Rln relay identity secret key as a Hex string rln-relay-id-commitment-key Rln relay identity commitment key as a Hex string rln-relay-eth-client-address ws://localhost:8540/ WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/ rln-relay-eth-contract-address Address of membership contract on an Ethereum testnet rln-relay-eth-private-key Private key for broadcasting transactions execute false Runs the registration function on-chain. By default, a dry-run will occur rln-relay-cred-password Password for encrypting RLN credentials rln-relay-bandwidth-threshold 0 # to maintain backwards compatibility Message rate in bytes/sec after which verification of proofs should happen staticnode Peer multiaddr to directly connect with. Argument may be repeated keep-alive false Enable keep-alive for idle connections: true|false pubsub-topic Default pubsub topic to subscribe to. Argument may be repeated. Deprecated! Please use shard and/or content-topic instead shard Shard to subscribe to. Argument may be repeated num-shards-in-network Number of shards in the network. Used to map content topics to shards when using autosharding content-topic Default content topic to subscribe to. Argument may be repeated reliability false Enable experimental reliability protocol true|false","s":"Relay config","u":"/guides/nwaku/config-options","h":"#relay-config","p":201},{"i":214,"t":"Name Default Value Description store false Enable/disable waku store protocol storenode Peer multiaddress to query for storage store-message-retention-policy time:172800 Message store retention policy. Time retention policy: time:. Capacity retention policy: capacity:. Size retention policy: size:. Set to none to disable store-message-db-url sqlite://store.sqlite3 The database connection URL for persistent storage store-message-db-vacuum false Enable database vacuuming at start. Only supported by SQLite database engine store-message-db-migration true Enable database migration at start","s":"Store and message store config","u":"/guides/nwaku/config-options","h":"#store-and-message-store-config","p":201},{"i":216,"t":"Name Default Value Description store-sync false Enable/disable waku store sync protocol store-sync-interval 300 5 minutes Interval between store synchronization attempts store-sync-range 3600 1 hour Amount of time to sync store-sync-relay-jitter 20 seconds Sync range offset to account for relay's message propagation jitter","s":"Store Sync","u":"/guides/nwaku/config-options","h":"#store-sync","p":201},{"i":218,"t":"Name Default Value Description filter false Enable filter protocol: true|false filternode Peer multiaddr to request content filtering of messages filter-subscription-timeout 300 # 5 minutes Timeout for filter subscription without ping or refresh it, in seconds. Only for v2 filter protocol filter-max-peers-to-serve 1000 Maximum number of peers to serve at a time. Only for v2 filter protocol filter-max-criteria 1000 Maximum number of pubsub and content topic combinations per peer at a time. Only for v2 filter protocol","s":"Filter config","u":"/guides/nwaku/config-options","h":"#filter-config","p":201},{"i":220,"t":"| Name | Default Value | Description | | --------------- | ------------- | --------------------------------------------------------- | ----- | | lightpush | false | Enable lightpush protocol: true | false | | lightpushnode | | Peer multiaddr to request lightpush of published messages |","s":"Light push config","u":"/guides/nwaku/config-options","h":"#light-push-config","p":201},{"i":222,"t":"Name Default Value Description rest false Enable Waku REST HTTP server: true|false rest-address 127.0.0.1 Listening address of the REST HTTP server rest-port 8645 Listening port of the REST HTTP server rest-relay-cache-capacity 30 Capacity of the Relay REST API message cache rest-admin false Enable access to REST HTTP Admin API: true|false rest-allow-origin Allow cross-origin requests from the specified origin. When using the REST API in a browser, specify the origin host to get a valid response from the node REST HTTP server. This option may be repeated and can contain wildcards (?,*) for defining URLs and ports such as localhost:*, 127.0.0.1:8080, or allow any website with *","s":"REST HTTP config","u":"/guides/nwaku/config-options","h":"#rest-http-config","p":201},{"i":224,"t":"Name Default Value Description metrics-server false Enable the metrics server: true|false metrics-server-address 127.0.0.1 Listening address of the metrics server metrics-server-port 8008 Listening HTTP port of the metrics server metrics-logging true Enable metrics logging: true|false","s":"Metrics config","u":"/guides/nwaku/config-options","h":"#metrics-config","p":201},{"i":226,"t":"Name Default Value Description dns-discovery false Enable discovering nodes via DNS dns-discovery-url URL for DNS node list in format 'enrtree://@' dns-discovery-name-server [\"1.1.1.1\", \"1.0.0.1\"] DNS name server IPs to query. Argument may be repeated rendezvous true Enable waku rendezvous discovery server","s":"DNS discovery config","u":"/guides/nwaku/config-options","h":"#dns-discovery-config","p":201},{"i":228,"t":"Name Default Value Description discv5-discovery false Enable discovering nodes via Node Discovery v5 discv5-udp-port 9000 Listening UDP port for Node Discovery v5 discv5-bootstrap-node Text-encoded ENR for bootstrap node. Used when connecting to the network. Argument may be repeated discv5-enr-auto-update false Discovery can automatically update its ENR with the IP address discv5-table-ip-limit 10 Maximum amount of nodes with the same IP in discv5 routing tables discv5-bucket-ip-limit 2 Maximum amount of nodes with the same IP in discv5 routing table buckets discv5-bits-per-hop 1 Kademlia's b variable, increase for less hops per lookup","s":"Discv5 config","u":"/guides/nwaku/config-options","h":"#discv5-config","p":201},{"i":230,"t":"Name Default Value Description peer-exchange false Enable waku peer exchange protocol (responder side): true|false peer-exchange-node Peer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side)","s":"Waku peer exchange config","u":"/guides/nwaku/config-options","h":"#waku-peer-exchange-config","p":201},{"i":232,"t":"Name Default Value Description websocket-support false Enable websocket: true|false websocket-port 8000 WebSocket listening port websocket-secure-support false Enable secure websocket: true|false websocket-secure-key-path Secure websocket key path: '/path/to/key.txt' websocket-secure-cert-path Secure websocket Certificate path: '/path/to/cert.txt'","s":"WebSocket config","u":"/guides/nwaku/config-options","h":"#websocket-config","p":201},{"i":234,"t":"Name Default Value Description rate-limit This is a repeatable option. Each can describe a specific rate limit configuration for a particular protocol. Formatted as::volume/period - if protocol is not given, settings will be taken as default for un-set protocols. Ex: 80/2s -Supported protocols are: lightpush|filter|px|store|storev2|storev3 -volume must be an integer value, representing number of requests over the period of time allowed. -period must be an integer with defined unit as one of h|m|s|ms - storev2 and storev3 takes precedence over store which can easy set both store protocols at once. - In case of multiple set of the same protocol limit, last one will take place. - if config is not set, - which is the default - means unlimited requests are allowed. -filter has a bit different approach. It has a default setting applied if not overridden. Rate limit setting for filter will be applied per subscriber-peers, not globally - it must be considered when changing the setting. Examples: --rate-limit=\"100/1s\" - default for all protocols if not set otherwise. --rate-limit=\"lightpush:0/0s\" - lightpush protocol will not be rate-limited. --rate-limit=\"store:130/1500ms\" - both store-v3 and store-v2 will apply 130 request per each 1500ms separately. --rate-limit=\"px:10/1h\" PeerExchange will serve only 10 requests every hour. --rate-limit=\"filter:8/5m\" - will allow 8 subs/unsubs/ping requests for each subscriber within every 5 min. tip To configure your node using the provided configuration options, have a look at the Node Configuration Methods guide.","s":"Non-relay, request-response protocol DOS protection configuration","u":"/guides/nwaku/config-options","h":"#non-relay-request-response-protocol-dos-protection-configuration","p":201},{"i":236,"t":"info When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level. You can find the addresses of a running node through its logs or by calling the Get node info endpoint of the REST API.","s":"Find Your Node Address","u":"/guides/nwaku/find-node-address","h":"","p":235},{"i":238,"t":"Look for the log entry that begins with Listening on, for example: Nwaku Log Output INF 2023-06-15 16:09:54.448+01:00 Listening on topics=\"waku node\" tid=1623445 file=waku_node.nim:922 full=[/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn][/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn] # Listening TCP transport address /ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn # Listening WebSocket address /ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn","s":"Listening addresses","u":"/guides/nwaku/find-node-address","h":"#listening-addresses","p":235},{"i":240,"t":"A nwaku node can encode its addressing information in an Ethereum Node Record (ENR).","s":"Discoverable ENR addresses","u":"/guides/nwaku/find-node-address","h":"#discoverable-enr-addresses","p":235},{"i":242,"t":"Look for the log entry that begins with DNS: discoverable ENR, for example: Nwaku Log Output INF 2023-06-15 16:09:54.448+01:00 DNS: discoverable ENR topics=\"waku node\" tid=1623445 file=waku_node.nim:923 enr=enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB # ENR the node addresses are encoded in enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB","s":"ENR for DNS discovery","u":"/guides/nwaku/find-node-address","h":"#enr-for-dns-discovery","p":235},{"i":244,"t":"Look for the log entry that begins with Discv5: discoverable ENR, for example: Nwaku Log Output INF 2023-06-15 16:09:54.448+01:00 Discv5: discoverable ENR topics=\"waku node\" tid=1623445 file=waku_node.nim:924 enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw # ENR the node addresses are encoded in enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw Congratulations! You have successfully found the listening and discoverable addresses for your nwaku node. Have a look at the Configure Peer Discovery guide to learn how to discover and connect with peers in the network.","s":"ENR for Discv5","u":"/guides/nwaku/find-node-address","h":"#enr-for-discv5","p":235},{"i":246,"t":"Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources. This guide provides detailed steps to download, build, configure, and connect a nwaku node to the Waku Network. It also includes interacting with the node and finding its addresses. info We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.","s":"Run a Nwaku Node","u":"/guides/nwaku/run-node","h":"","p":245},{"i":248,"t":"To run a node, you must have the nwaku binary. Nwaku provides multiple options for running a node: Run nwaku in Docker (recommended)​ We recommend using Docker Compose to run a node because it's the simplest and fastest way to configure and run one: Description Documentation Docker Compose Run a nwaku node with Docker Compose Run Nwaku with Docker Compose Docker Container Run a nwaku node in a Docker Container Run Nwaku in a Docker Container Download the binary​ Description Documentation Precompiled Binary Download a precompiled binary of the nwaku node Download Nwaku Binary Nightly Release Try the latest nwaku updates without compiling the binaries Download Nightly Release Build the binary​ Description Documentation Build from Source Build the node from the nwaku source code Build Nwaku from Source tip You can run the nwaku binaries and Docker images on cloud service providers like Google Cloud, Microsoft Azure, Amazon Web Services, and DigitalOcean.","s":"Get the node binary","u":"/guides/nwaku/run-node","h":"#get-the-node-binary","p":245},{"i":250,"t":"Once you have gotten the nwaku binary, run it using the default configuration: # Run the Docker Compose docker-compose up -d # Run the standalone binary ./build/wakunode2 tip To learn how to customise the configuration of a nwaku node, have a look at the Node Configuration Methods and Node Configuration Examples guides.","s":"Run the node","u":"/guides/nwaku/run-node","h":"#run-the-node","p":245},{"i":252,"t":"To join the Waku Network, nodes must bootstrap for an entry point before discovering more peers. Nwaku provides multiple peer discovery mechanisms: Description Documentation Static Peers Configure the bootstrap nodes that nwaku should establish connections upon startup Configure Static Peers DNS Discovery Enable nwaku to bootstrap nodes using the DNS Discovery mechanism Configure DNS Discovery Discv5 Enable nwaku to discover peers using the Discv5 mechanism Configure Discv5 Peer Exchange Enable Peer Exchange protocol for light nodes to request peers from your nwaku node Configure Peer Exchange tip We suggest configuring WebSocket transport for your node to enable support and serving of browser peers using @waku/sdk.","s":"Bootstrap the node","u":"/guides/nwaku/run-node","h":"#bootstrap-the-node","p":245},{"i":254,"t":"You can interact with a running nwaku node through the REST API, such as querying the node information using the Get node info endpoint: Request Response curl --location 'http://127.0.0.1:8645/debug/v1/info' \\ --header 'Accept: application/json' { \"listenAddresses\": [ \"/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmUbPquFQqje3jiqoB5YoiUbBya59NB4qqEzeiTNGHeA6w\" ], \"enrUri\": \"enr:-Iu4QCQZXZDb_JsYmLoYor0F5E_95HbIywgO_wgx2rIdDbmCJZkTzmlCr0wmMzV47lgik_tVwww5mIng90Ris83TisMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQPszztG-Ev52ZB7tk0jF8s6Md4KvyY_rhzNZokaaB_ABIN0Y3CC6mCFd2FrdTIB\" } info The listenAddresses field stores the node's listening addresses, while the enrUri field stores the discoverable ENR URI for peer discovery.","s":"Interact with the node","u":"/guides/nwaku/run-node","h":"#interact-with-the-node","p":245},{"i":256,"t":"You can check the health status of the node by calling the Get node health status endpoint of the REST API: Request Response curl --location 'http://127.0.0.1:8645/health' \\ --header 'Accept: text/plain' Node is healthy tip If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord. Congratulations! You have successfully started, configured, and connected a nwaku node to the Waku Network. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.","s":"Check the node health status","u":"/guides/nwaku/run-node","h":"#check-the-node-health-status","p":245},{"i":258,"t":"If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order. For example, if you are interested in the version v0.32.0 and are currently running v0.30.0, follow the instructions for v0.31.0 and then the ones for v0.32.0","s":"Upgrade Instructions","u":"/guides/nwaku/upgrade-instructions","h":"","p":257},{"i":260,"t":"v0.32.0 The --protected-topic CLI config was deprecated and is replaced by the new --protected-shard configuration. Instead of configuring topic:public_key you will now need to configure shard:public_key For example, if you used to run your node with --protected-topic=\"waku/2/rs/3/4:your_public_key\" you will need to replace this configuration for --protected-shard=\"4:your_public_key\" v0.31.0 Named sharding was deprecated in this version. This means that pubsub topics will only be supported if they comply with the static sharding format: /waku/2/rs// In order to migrate your existing application, you need to: Make sure that your clients are sending messages to pubsub topics in the required format. Check that in your interactions with Nwaku's REST API or when using js-waku, the configured pubsub topics follow the static sharding format defined above. When running a node with the --pubsub-topic CLI flag, the values provided should comply with the static sharding format. If your application relies on nodes or clients that may not be updated immediately, keep your node on an older version while subscribing to both the current pubsub topic and the new pubsub topic that will comply with the static sharding format. In that case, you can keep backward compatibility for a migration period.","s":"Target Releases","u":"/guides/nwaku/upgrade-instructions","h":"#target-releases","p":257},{"i":262,"t":"Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.","s":"Content Topics","u":"/learn/concepts/content-topics","h":"","p":261},{"i":264,"t":"Here is the recommended format for content topics: /{application-name}/{version}/{content-topic-name}/{encoding} application-name: This is the unique name of your decentralised application (DApp) to prevent conflicts with other DApps. version: Typically starting at 1, this field helps track breaking changes in your messages. content-topic-name: The specific name of the content topic used for filtering. encoding: The message encoding or serialisation format, with Protocol Buffers (proto) being the recommended choice. For example, if your DApp is called SuperCrypto and it allows users to receive notifications and send private messages, you can consider using the following content topics: /supercrypto/1/notification/proto /supercrypto/1/private-message/proto tip While you can choose any encoding format for your Content Topic, we highly recommend using Protocol Buffers (proto) because of its efficiency. Choosing a lightweight format ensures optimal performance of your DApp.","s":"Naming format","u":"/learn/concepts/content-topics","h":"#naming-format","p":261},{"i":266,"t":"When choosing a content topic, it is essential to consider the privacy implications. Here are several factors to keep in mind:","s":"Naming considerations","u":"/learn/concepts/content-topics","h":"#naming-considerations","p":261},{"i":268,"t":"The Filter, Store, and Light Push protocols share content topics with peers, allowing them to link IP and content topic interests. The Relay protocol, using GossipSub, provides recipient anonymity, which can be compromised if the content topic exposes user information. For example, instead of using Personally Identifiable Information (PII) in the content topic (e.g., a public key), you can create buckets (e.g., based on the first 4 bytes of the public key hash). info Waku is developing privacy-preserving features like Anonymous Filter Subscription for the Filter protocol and Anonymous Query for the Store protocol to hide content topics from potential adversaries.","s":"Protocols disclose content topics to peers","u":"/learn/concepts/content-topics","h":"#protocols-disclose-content-topics-to-peers","p":261},{"i":270,"t":"You can increase k-anonymity within the network by using a unified content topic across the entire application or targeting specific features like notifications or private messages, allowing multiple users to share it. We recommend switching functionality using the Protocol Buffer (proto) message format. By doing so, applications can retain a high granularity and functionality while using a single content topic, preserving user privacy. For example: message NotificationPayload { ... } message FeatureAbcPayload { ... } // By default, all fields in protobuf are optional so only field may be encoded at a time message Payload { NotificationPayload notification = 1; FeatureAbcPayload feature_abc = 2; }","s":"Increasing k-anonymity preserves user anonymity","u":"/learn/concepts/content-topics","h":"#increasing-k-anonymity-preserves-user-anonymity","p":261},{"i":272,"t":"When an application uses a single content topic, all users using request/response protocols (Filter, Store) receive all its messages. For heavy traffic, developers can create buckets by hashing a unique identifier (e.g., recipient's ID, public key, or app domain topic) and adding its first byte to the content topic, like /my-app/0/a/proto. This approach divides traffic into multiple topics, reducing the messages users have to download. Developers can add more first bytes to the content topic over time to improve efficiency and privacy based on messages and user needs. info The k value of k-anonymity equals the number of IDs for which the first character of the hash is \"a\". For example, using a single content topic in an application with 10,000 users results in k = 10,000. However, using the hash ID's first character, k reduces to 10,000 / 16 = 625.","s":"Creating buckets help in distributing traffic","u":"/learn/concepts/content-topics","h":"#creating-buckets-help-in-distributing-traffic","p":261},{"i":274,"t":"This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network. info You can configure a nwaku node to use multiple peer discovery mechanisms simultaneously.","s":"Configure Peer Discovery","u":"/guides/nwaku/configure-discovery","h":"","p":273},{"i":276,"t":"You can provide static peers to a nwaku node during startup using the staticnode configuration option. To connect to multiple peers on startup, repeat the staticnode option: ./build/wakunode2 \\ --staticnode=[PEER MULTIADDR 1] \\ --staticnode=[PEER MULTIADDR 2] For example, consider a nwaku node that connects to two static peers on the same local host (IP: 0.0.0.0) using TCP ports 60002 and 60003: ./build/wakunode2 \\ --staticnode=/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \\ --staticnode=/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ","s":"Configure static peers","u":"/guides/nwaku/configure-discovery","h":"#configure-static-peers","p":273},{"i":278,"t":"To enable DNS Discovery in a nwaku node, use the following configuration options: dns-discovery: Enables DNS Discovery on the node (disabled by default). dns-discovery-url: URL for DNS node list in the format enrtree://@ where is the fully qualified domain name and is the base32 encoding of the compressed 32-byte public key that signed the list at that location. dns-discovery-name-server (optional): DNS name server IPs to query. You can repeat this option to provide multiple DNS name servers. ./build/wakunode2 \\ --dns-discovery=true \\ --dns-discovery-url=enrtree://[PUBLIC KEY]@[DOMAIN NAME] \\ --dns-discovery-name-server=[DNS NAME SERVER IP] info If you omit the dns-discovery-name-server option, nwaku will attempt to use the CloudFlare servers 1.1.1.1 and 1.0.0.1. For example, consider a nwaku node that enables DNS Discovery, connects to a DNS node list, and queries the IPs 8.8.8.8 and 8.8.4.4: ./build/wakunode2 \\ --dns-discovery=true \\ --dns-discovery-url=enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im \\ --dns-discovery-name-server=8.8.8.8 \\ --dns-discovery-name-server=8.8.4.4","s":"Configure DNS discovery","u":"/guides/nwaku/configure-discovery","h":"#configure-dns-discovery","p":273},{"i":280,"t":"To enable Discv5 in a nwaku node, use the following configuration options: discv5-discovery: Enables Discv5 on the node (disabled by default). discv5-bootstrap-node: ENR for Discv5 routing table bootstrap node. You can repeat this option to provide multiple bootstrap entries. ./build/wakunode2 \\ --discv5-discovery=true \\ --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 1] \\ --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 2] For example, consider a nwaku node that enables Discv5 and bootstraps its routing table using a static ENR: ./build/wakunode2 \\ --discv5-discovery=true \\ --discv5-bootstrap-node=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw info When Discv5 is enabled and used with DNS Discovery, the nwaku node will attempt to bootstrap the Discv5 routing table by extracting ENRs from peers discovered through DNS.","s":"Configure Discv5","u":"/guides/nwaku/configure-discovery","h":"#configure-discv5","p":273},{"i":282,"t":"To enable Peer Exchange in a nwaku node, use the following configuration options: peer-exchange: Enables Peer Exchange on the node as a responder (disabled by default). peer-exchange-node (optional): Multiaddr for bootstrap node with the peer exchange protocol enabled. ./build/wakunode2 \\ --peer-exchange=true \\ --peer-exchange-node=[PEER MULTIADDR WITH EXCHANGE ENABLED] For example, consider two nwaku nodes configured as a server (peer exchange responder node) and client (node using peer exchange) on the same local host (IP: 0.0.0.0): Server: Nwaku Node with Peer Exchange Enabled ./build/wakunode2 --peer-exchange=true Client: Nwaku Node Bootstrapping with Peer Exchange ./build/wakunode2 \\ --tcp-port=30305 \\ --ports-shift=1 \\ --peer-exchange-node=/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmLCe6zVqCS6KMqqRbbhyoJjfYZGr1Q3thTSbyKzibQkFR info nwaku provides a relay-peer-exchange option via libp2p for peer exchange, allowing network growth through neighbouring nodes. However, this feature can compromise security and network robustness, so we recommend only using it in high-trust environments.","s":"Configure peer exchange","u":"/guides/nwaku/configure-discovery","h":"#configure-peer-exchange","p":273},{"i":284,"t":"When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping. Once a connection is established, the node must actively seek out additional peers to have: Sufficient peers in the Relay mesh: The goal is to have at least 6 peers in the mesh. This ensures a robust network where messages can be efficiently relayed. Reserve peers for backup: It is essential to have a surplus of peers available as reserves. These reserves are backups when the current peers become overloaded or experience unexpected disconnections. Peers with specific capabilities: The node seeks out peers with specific capabilities, such as Store, Light Push, or Filter. This allows for targeted interactions and enhanced functionality based on the desired capabilities. Waku supports multiple peer discovery mechanisms, such as: Configuring Static Peers Peer Discovery via DNS Discv5 Ambient Peer Discovery Peer Exchange","s":"Peer Discovery","u":"/learn/concepts/peer-discovery","h":"","p":283},{"i":286,"t":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more. Pros​ Decentralised with random sampling from a global view. Continuously researched and improved. Cons​ Requires lots of connections and involves frequent churn. Relies on User Datagram Protocol (UDP), which is not supported in web browsers.","s":"Discv5","u":"/learn/concepts/discv5","h":"","p":285},{"i":288,"t":"DNS Discovery protocol is executed. Alice retrieves Bob's ENR (Ethereum Node Record) from DNS Server. Alice executes the Discv5 protocol with Bob using UDP connection details from ENR. Bob returns Carol's, David's and Erin's ENRs to Alice. Alice decodes ENRs and extracts the details of Carol, David, and Erin's TCP and UDP connections. Alice executes the Discv5 protocol with Carol using UDP connection details from ENR. Carol returns Frank's, Gwen's and Harry's ENRs to Alice. Alice decodes ENRs and extracts Frank's, Gwen's and Harry's TCP and UDP connection details. Alice selects to dial David, Frank and Gwen. Alice dials David, Frank and Gwen over libp2p using TCP connection details from ENRs.","s":"Overview","u":"/learn/concepts/discv5","h":"#overview","p":285},{"i":290,"t":"Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr. This bootstrapping method allows anyone to register and publish a domain name for the network, promoting increased decentralisation. Pros​ Low latency, low resource requirements. Easy bootstrap list updates by modifying the domain name, eliminating the need for code changes. Ability to reference a larger list of nodes by including other domain names in the code or ENR tree. Cons​ Vulnerable to censorship: Domain names can be blocked or restricted. Limited scalability: The listed nodes are at risk of being overwhelmed by receiving all queries. Also, operators must provide their ENR to the domain owner for listing.","s":"DNS Discovery","u":"/learn/concepts/dns-discovery","h":"","p":289},{"i":292,"t":"DNS lookup query to retrieve TXT data stored on example.com domain. enrtree-root is returned, and the value of e is the enr-root, the root hash of the node subtree. DNS lookup query to retrieve TXT data stored on .example.com domain. enrtree-branch is returned; this tree contains hashes of node subtrees. DNS lookup query to retrieve TXT data stored on DU...VQ.example.com domain, the first leaf of enrtree-branch. enr record is returned. Returned value is decoded, and peer connection details such as IP address and port are learned.","s":"Overview","u":"/learn/concepts/dns-discovery","h":"#overview","p":289},{"i":294,"t":"This guide provides detailed steps to configure a nwaku node for different use cases.","s":"Node Configuration Examples","u":"/guides/nwaku/configure-nwaku","h":"","p":293},{"i":296,"t":"To join the Waku Network, nodes must bootstrap for an entry point before discovering more peers. Nwaku provides multiple peer discovery mechanisms: Configure Static Peers Configure DNS Discovery Configure Discv5 Configure Peer Exchange","s":"Connect to other peers","u":"/guides/nwaku/configure-nwaku","h":"#connect-to-other-peers","p":293},{"i":298,"t":"You can set up an IPv4 DNS domain name that resolves to the public IPv4 address of a node using the dns4-domain-name option. This allows the node's publicly announced multiaddrs to use the /dns4 scheme. ./build/wakunode2 --dns4-domain-name=[DOMAIN NAME] For example, consider the domain name nwakunode.com, which resolves to a nwaku node: ./build/wakunode2 --dns4-domain-name=nwakunode.com Browser nodes can only connect to nodes with a domain name and secure WebSocket (wss) configured. These nodes will generate a discoverable ENR with /wss as the multiaddr and /dns4 as the domain name. This configuration is essential for verifying domain certificates when establishing a secure connection. info This example describes configuring a domain name that resolves to your node's IP address and is unrelated to DNS Discovery. tip You can use the domain name provided by your cloud provider to configure the domain name for your node.","s":"Configure a domain name","u":"/guides/nwaku/configure-nwaku","h":"#configure-a-domain-name","p":293},{"i":300,"t":"To enable message caching and serve them to network peers, enable the Store protocol using the following configuration options: store: Enables storing messages to serve them to peers (disabled by default). store-message-retention-policy: Retention policy of the store node (how long messages will be stored). Three different retention policies are supported: Time retention policy: time: (e.g., time:14400) Capacity retention policy: capacity: (e.g, capacity:25000) Size retention policy: size: (e.g, size:512MB or size:10GB) Set this option to none to disable the retention policy. If you omit this option, it will default to time:172800 (48 hours). store-message-db-url: Database connection URL for storing messages in the SQLAlchemy database URL format. Setting this option to an empty string will instruct the node to use the fallback in-memory message store. If you omit this option, it will default to sqlite://store.sqlite3. ./build/wakunode2 \\ --store=true \\ --store-message-retention-policy=[MESSAGE RETENTION POLICY] \\ --store-message-db-url=[DATABASE CONNECTION URL] For example, consider a nwaku node that is configured to be a Store protocol and retain messages received in the last 21600 seconds (6 hours): ./build/wakunode2 \\ --store=true \\ --store-message-retention-policy=time:21600 \\ --store-message-db-url=sqlite://store.sqlite3 You can configure nwaku as a Store client using the storenode option. This allows the node to query peers for historical messages but not store any message itself. ./build/wakunode2 --storenode=[STORE PEER MULTIADDR] For example, consider a nwaku node that does not store messages but can query peers for historical messages: ./build/wakunode2 --storenode=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV","s":"Configure store protocol and message store","u":"/guides/nwaku/configure-nwaku","h":"#configure-store-protocol-and-message-store","p":293},{"i":302,"t":"To enable synchronization between stores, enable the protocol via the configuration options below; store-sync: Enable store sync protocol (disable by default). store-sync-interval: Interval between store synchronization attempts, in seconds (300s default). store-sync-range: Amount of time to sync, in seconds (3600s default). store-sync-relay-jitter: Sync range offset to account for relay's message propagation jitter, in seconds (20s default). Configuration example. ./build/wakunode2 \\ --store-sync=true \\ --store-sync-interval=300 \\ --store-sync-range=3600 \\ --store-sync-relay-jitter=20","s":"Configure store sync","u":"/guides/nwaku/configure-nwaku","h":"#configure-store-sync","p":293},{"i":304,"t":"Nodes generate new random key pairs at each boot, leading to different multiaddrs. To maintain consistency, you can use a pre-generated private key with the nodekey option: ./build/wakunode2 --nodekey=[NODE PRIVATE KEY] This option takes a Secp256k1 private key (64-char hex string). On Linux, you can use the OpenSSL rand command for a pseudo-random 32-byte hex string: openssl rand -hex 32 # 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 On Linux, you can create a reusable key file using OpenSSL. To get the 32-byte private key in hex format, use the ecparam command and some standard utilities: # Generate key file openssl ecparam -genkey -name secp256k1 -out my_private_key.pem # Extract 32-byte private key openssl ec -in my_private_key.pem -outform DER | tail -c +8 | head -c 32| xxd -p -c 32 # read EC key # writing EC key # 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 You can use the output 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 as a Node Key for nwaku: ./build/wakunode2 --nodekey=286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8","s":"Generate and configure a node key","u":"/guides/nwaku/configure-nwaku","h":"#generate-and-configure-a-node-key","p":293},{"i":306,"t":"WebSocket is the only transport method browser nodes support using @waku/sdk. To enable WebSocket in nwaku to serve browser peers, use the following configuration options: websocket-support: Enables WebSocket (ws) on the node (disabled by default). websocket-port (optional): WebSocket listening port. If you omit this option, it will default to 8000. websocket-secure-support: Enables Secure WebSocket (wss) on the node (disabled by default). websocket-secure-key-path: Secure WebSocket key path. websocket-secure-cert-path: Secure WebSocket Certificate path. ./build/wakunode2 \\ --websocket-support=true \\ --websocket-port=[WEBSOCKET LISTENING PORT] \\ --websocket-secure-support=true \\ --websocket-secure-key-path=[SECURE WEBSOCKET KEY PATH] \\ --websocket-secure-cert-path=[SECURE WEBSOCKET CERTIFICATE PATH] For example, consider a nwaku node that enabled WebSocket (unencrypted) for local testing on port 8001: ./build/wakunode2 \\ --websocket-support=true \\ --websocket-port=8001 Consider a nwaku node that enabled Secure WebSocket (encrypted) using its key and certificate (privkey.pem and fullchain.pem) on port 8002: ./build/wakunode2 \\ --websocket-secure-support=true \\ --websocket-secure-key-path=privkey.pem \\ --websocket-secure-cert-path=fullchain.pem \\ --websocket-port=8002 tip You can use Let's Encrypt or Certbot to generate a valid certificate for your nwaku node: sudo certbot certonly -d ","s":"Configure WebSocket transport","u":"/guides/nwaku/configure-nwaku","h":"#configure-websocket-transport","p":293},{"i":308,"t":"Nwaku provides a REST API to interact with the node and Waku Network. To enable the REST API, use the following configuration options: rest: Enables the REST API server on the node (disabled by default). rest-address (optional): Listening address of the REST API server. If you omit this option, it will default to 127.0.0.1. rest-port (optional): Listening port of the REST API server. If you omit this option, it will default to 8645. rest-relay-cache-capacity (optional): Capacity of the Relay REST API message cache. If you omit this option, it will default to 30. rest-admin (optional): Enables access to REST admin API (disabled by default). rest-private (optional): Enables access to REST private API (disabled by default). ./build/wakunode2 \\ --rest=true \\ --rest-address=[REST SERVER LISTENING ADDRESS] \\ --rest-port=[REST SERVER LISTENING PORT] \\ --rest-relay-cache-capacity=[MESSAGE CACHE CAPACITY] \\ --rest-admin=[true|false] \\ --rest-private=[true|false] For example, consider a nwaku node that enabled the REST API server on port 9000: ./build/wakunode2 \\ --rest=true \\ --rest-port=9000 \\ --rest-address=127.0.0.1 Consider a nwaku node that enabled the REST admin and private API with a message cache capacity of 100: ./build/wakunode2 \\ --rest=true \\ --rest-admin=true \\ --rest-private=true \\ --rest-relay-cache-capacity=100","s":"Configure REST API server","u":"/guides/nwaku/configure-nwaku","h":"#configure-rest-api-server","p":293},{"i":310,"t":"To enable nwaku to serve light clients, enable the Filter protocol using filter option: ./build/wakunode2 --filter=true You can configure nwaku as a Filter client using the filternode and filter-timeout options. This allows the node to request content filtering of messages from peers. ./build/wakunode2 \\ --filternode=[FILTER PEER MULTIADDR] \\ --filter-timeout=[FILTER PEER TIMEOUT] For example, consider a nwaku node that requests content filtering of messages from peers with a timeout of 21600 seconds (6 hours): ./build/wakunode2 \\ --filternode=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV \\ --filter-timeout=21600 info If you omit the filter-timeout option, it will default to 14400 seconds (4 hours).","s":"Configure filter protocol","u":"/guides/nwaku/configure-nwaku","h":"#configure-filter-protocol","p":293},{"i":312,"t":"To enable nwaku to serve light clients, enable the Light Push protocol using the lightpush option: ./build/wakunode2 --lightpush=true You can configure nwaku as a Light Push client using the lightpushnode option. This allows the node to request lightpush of published messages from peers. ./build/wakunode2 --lightpushnode=[LIGHT PUSH PEER MULTIADDR] For example, consider a nwaku node that requests lightpush of published messages from peers: ./build/wakunode2 --lightpushnode=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV","s":"Configure light push protocol","u":"/guides/nwaku/configure-nwaku","h":"#configure-light-push-protocol","p":293},{"i":314,"t":"When using a reverse proxy server for SSL/TLS encryption, you only want to announce the proxy server's IP or domain. Nwaku provides the ext-multiaddr-only and ext-multiaddr options for specifying published multiaddr: ./build/wakunode2 \\ --ext-multiaddr-only=true \\ --ext-multiaddr=[MULTIADDR TO PUBLISH] info The ext-multiaddr-only option takes precedence over the nat and dns4-domain-name options, using the values provided by the ext-multiaddr option instead.","s":"Run nwaku behind a reverse proxy","u":"/guides/nwaku/configure-nwaku","h":"#run-nwaku-behind-a-reverse-proxy","p":293},{"i":316,"t":"The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network. info Peer Exchange enables requesting random peers from other network nodes without revealing information about their connectivity or neighbourhood. Pros​ Low resource requirements. Decentralised with random sampling of nodes from a global view using Discv5. Cons​ Decreased anonymity. Imposes additional load on responder nodes.","s":"Peer Exchange","u":"/learn/concepts/peer-exchange","h":"","p":315},{"i":318,"t":"DNS Discovery protocol is executed. Alice retrieves Bob's websocket multiaddr from DNS Server. Alice dials Bob using libp2p protocols. Alice executes a Peer Exchange query to Bob. Bob returns Carol's and David's ENR to Alice. Alice decodes ENRs and extracts Carol's and David's websocket multiaddrs. Alice dials Carol and David. Alice can now drop the connection with Bob (bootstrap node); Alice has 2 connections to the Waku Network.","s":"Overview","u":"/learn/concepts/peer-exchange","h":"#overview","p":315},{"i":320,"t":"Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node. Pros​ Low latency. Low resource requirements. Cons​ Vulnerable to censorship: Node IPs can be blocked or restricted. Limited scalability: The number of nodes is fixed and cannot easily be expanded. Maintenance challenges: Updating the node list requires modifying the code, which can be cumbersome and involves releasing and deploying.","s":"Static Peers","u":"/learn/concepts/static-peers","h":"","p":319},{"i":322,"t":"Alice establishes connections with Bob and Carol using their node details, which are predefined (hard-coded) into Alice's node.","s":"Overview","u":"/learn/concepts/static-peers","h":"#overview","p":319},{"i":324,"t":"Waku's protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol's security guarantees and limitations. Some of Waku's security features include the following:","s":"Security Features","u":"/learn/security-features","h":"","p":323},{"i":326,"t":"Waku ensures pseudonymity across its protocol layers, using libp2p PeerID as identifiers instead of disclosing true identities. However, it is important to note that pseudonymity does not provide complete anonymity. Actions performed under the same pseudonym (PeerID) can be linked, leading to the potential re-identification of the actual actor.","s":"Pseudonymity","u":"/learn/security-features","h":"#pseudonymity","p":323},{"i":328,"t":"Anonymity means an adversary cannot connect an actor to their actions or data. To achieve anonymity, avoiding linking activities with actors or their Personally Identifiable Information (PII) is crucial. In Waku, the following anonymity features are provided: Publisher-message unlinkability: Ensures that the publisher of messages in the Relay protocol cannot be linked to their published messages. Subscriber-topic unlinkability: Ensures that the subscriber of topics in the Relay protocol cannot be linked to the topics they have subscribed to.","s":"Anonymity/unlinkability","u":"/learn/security-features","h":"#anonymityunlinkability","p":323},{"i":330,"t":"The spam protection feature in Relay ensures that no adversary can flood the system with many messages, intentionally or not, regardless of the content's validity or usefulness. This protection is achieved through the scoring mechanism of GossipSub v1.1. Peers assign scores to their connections based on their behaviour and remove peers with low scores. Ongoing research is being conducted, including developing Rate Limit Nullifiers (RLN), which can be explored further at: https://github.com/vacp2p/research/issues/148.","s":"Spam protection","u":"/learn/security-features","h":"#spam-protection","p":323},{"i":332,"t":"Confidentiality in Waku is ensured through data encryption, while integrity and authenticity are achieved through digital signatures. These security measures are available in Waku Message (version 1) and Noise protocols, which offer payload encryption and encrypted signatures. Noise protocols also facilitate secure channel negotiation within the Waku Network.","s":"Data confidentiality, integrity, and authenticity","u":"/learn/security-features","h":"#data-confidentiality-integrity-and-authenticity","p":323},{"i":334,"t":"In protocols like Store and Filter, where direct connections are required for the designated service, anonymity or unlinkability is not guaranteed. This is because nodes use their PeerID to identify each other during direct connections, making the service obtained in these protocols linkable to the beneficiary's PeerID, considered Personally Identifiable Information (PII). In Store, the queried node can link the querying node's PeerID to the topics being queried. Similarly, in Filter, a node can link the PeerID of a light node to its content filter.","s":"Security considerations","u":"/learn/security-features","h":"#security-considerations","p":323},{"i":336,"t":"Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery. Waku is a transport-agnostic framework that allows developers to choose and support multiple protocols according to their requirements. For Waku nodes, the following transports are recommended: TCP: By default, Waku nodes use TCP for communication. Service nodes should employ TCP for listening to and connecting with other nodes. Secure WebSocket: In browser environments, secure WebSocket is used. Service nodes are encouraged to set up SSL certificates to enable incoming connections from browsers and serve them securely. Other protocols like WebRTC, WebTransport, and QUIC have been researched and studied for potential integration. info Waku ensures compatibility and improved communication capabilities by following these recommended transports.","s":"Transports","u":"/learn/concepts/transports","h":"","p":335},{"i":338,"t":"The following features are currently experimental and under research and initial implementation:","s":"Research","u":"/learn/research","h":"","p":337},{"i":340,"t":"We aim to enable an incentivised spam protection technique to enhance Relay by using Rate Limit Nullifiers (RLN). In this advanced method, peers are limited to a certain messaging rate per epoch, and an immediate financial penalty is enforced for spammers who break this rate. You can find more details in the RLN Relay blog post. We have prepared a PoC implementation of this method in JS: https://examples.waku.org/rln-js/","s":"Economic spam resistance","u":"/learn/research","h":"#economic-spam-resistance","p":337},{"i":342,"t":"Denial of service signifies the case where an adversarial peer exhausts another node's service capacity (e.g., by making a large number of requests) and makes it unavailable to the rest of the system. RnD on DoS attack mitigation can be tracked from here: https://github.com/vacp2p/research/issues/148. In a nutshell, peers have to pay for the service they obtain from each other. In addition to incentivising the service provider, accounting also makes DoS attacks costly for malicious peers. The accounting model can be used in Store and Filter to protect against DoS attacks. Additionally, along with RLN, this gives node operators who provide a useful service to the network an incentive to perform that service. Read more here: https://vac.dev/building-privacy-protecting-infrastructure You can also read more about the ongoing challenges the Waku team is working on here: https://github.com/waku-org/research","s":"Prevention of denial of service (DoS) and node incentivisation","u":"/learn/research","h":"#prevention-of-denial-of-service-dos-and-node-incentivisation","p":337},{"i":344,"t":"Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.","s":"Network Domains","u":"/learn/concepts/network-domains","h":"","p":343},{"i":346,"t":"Peer discovery in Waku facilitates locating other nodes within the network. As a modular protocol, Waku incorporates various discovery mechanisms, such as Discv5 and Peer Exchange. These mechanisms allow developers to choose the most suitable option(s) for their specific use cases and user environments, including mobile phones, desktop browsers, servers, and more.","s":"Discovery domain","u":"/learn/concepts/network-domains","h":"#discovery-domain","p":343},{"i":348,"t":"GossipSub derives its name from the practice within Pub/Sub networks where peers gossip about the messages they have encountered, thus establishing a message delivery network. Waku employs gossiping through Relay to distribute messages across the network. Additionally, Waku introduces RLN Relay, an experimental mechanism that combines privacy preservation and economic spam protection.","s":"Gossip domain","u":"/learn/concepts/network-domains","h":"#gossip-domain","p":343},{"i":350,"t":"Waku provides a set of protocols to optimise its performance in resource-limited environments like low bandwidth or mostly offline scenarios for multiple purposes. Store enables the retrieval of historical messages. Filter efficiently retrieves a subset of messages to conserve bandwidth. Light Push facilitates message publication for nodes with limited bandwidth and short connection windows.","s":"Request/response domain","u":"/learn/concepts/network-domains","h":"#requestresponse-domain","p":343},{"i":352,"t":"Here is a diagram illustrating the interaction between different protocols within the Waku Network. The Pub/Sub topic pubtopic1 serves as a means of routing messages (the network employs a default Pub/Sub topic) and indicates that it is subscribed to messages on that topic for a relay. Node D serves as a Store and is responsible for storing messages. Node A creates a WakuMessage msg1 with Content Topic contentTopic1. Node F requests to get messages filtered by Pub/Sub topic pubtopic1 and Content Topic contentTopic1. Node D subscribes F to this filter and will forward messages that match that filter in the future. Node A publishes msg1 on pubtopic1. The message is sent from Node A to Node B and then forwarded to Node D. Node D, upon receiving msg1, stores the message for future retrieval by other nodes and forwards it to Node C. Node D also pushes msg1 to Node F, informing it about the arrival of a new message. At a later time, Node E comes online and requests messages matching pubtopic1 and contentTopic1 from Node D. Node D responds with msg1 and potentially other messages that match the query.","s":"Overview of protocol interaction","u":"/learn/concepts/network-domains","h":"#overview-of-protocol-interaction","p":343},{"i":354,"t":"How can I start building my application using Waku? Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node. Does messaging on Waku require a gas fee? No, sending and receiving messages on Waku involves no gas fee. What encryption does Waku use? Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to use custom protocols or Waku message payload encryption methods freely. Where does Waku store the messages? Waku's Store protocol is designed to temporarily store messages within the network. However, Waku does not guarantee the message's availability and recommends using Codex for long-term storage. Can Waku only be used for wallet-to-wallet messaging? No, Waku is flexible and imposes no specific rules on identifiers. How does Waku differ from IPFS? Waku focuses on short, ephemeral, real-time messages, while IPFS focuses on large, long-term data storage. Although there's an overlap between the two technologies, Waku does not currently support large data for privacy reasons. What are Rate Limiting Nullifiers (RLN)? Rate Limiting Nullifier is a zero-knowledge (ZK) protocol enabling spam protection in a decentralized network while preserving privacy. Each message must be accompanied by a ZK proof, which Relay nodes verify to ensure the publishers do not send more messages than they are allowed. The ZK proof does not leak any private information about message publishers - it only proves they are members of a set of users allowed to publish a certain number of messages per given time frame. How to start a Waku node? Follow the README instructions at nwaku-compose.","s":"Waku FAQ","u":"/learn/faq","h":"","p":353},{"i":356,"t":"The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include: DoS/spam protection with privacy-preserving Rate-Limiting Nullifiers. Scalability by sharding traffic into 8 pubsub topics. Automatic shard selection based on content topic. Services for resource-restricted nodes, including historical message storage and retrieval, filtering, etc. tip If you want to learn more about the Waku Network, The Waku Network: Technical Overview article provides an in-depth look under the hood.","s":"The Waku Network","u":"/learn/waku-network","h":"","p":355},{"i":358,"t":"Applications or projects can build decentralized communication components on this network, gaining from the fault-tolerance of shared infrastructure, the out-of-the-box censorship resistance of a p2p network and the privacy-preservation of Waku protocols. Supporters of public goods and decentralized infrastructure can run their nodes to support the network. We are also working on incentivisation vectors to encourage more node operators to provide services to the network.","s":"Why join the Waku network?","u":"/learn/waku-network","h":"#why-join-the-waku-network","p":355},{"i":360,"t":"Ethereum Sepolia HTTPS endpoint, which can be yours or from a third party. Have a look at the Access a Sepolia Node Using Infura guide for a free Infura option. This node is used to interact with the on-chain RLN membership contract. Wallet with Sepolia Ethereum (less than 0.1 Sepolia ETH). Have a look at the Create a Sepolia Ethereum Wallet and Obtain Sepolia Ethereum from Faucet guides to get a Sepolia wallet and fund it with some Sepolia Ethereum. This wallet is required to register RLN membership, which is essential for publishing on the network.","s":"Prerequisites","u":"/learn/waku-network","h":"#prerequisites","p":355},{"i":362,"t":"Have a look at the Run Nwaku with Docker Compose guide for instructions on running a nwaku node in the Waku Network. Use the Sepolia node and wallet you obtained above. info The public Waku Network replaces the previous experimental shared routing layer based on a default pubsub topic (/waku/2/default-waku/proto). If your project currently uses this or any other shared pubsub topics, we encourage you to migrate to the public Waku Network with built-in DoS protection, scalability, and reasonable bandwidth usage.","s":"Running a Waku network node","u":"/learn/waku-network","h":"#running-a-waku-network-node","p":355},{"i":364,"t":"Definitions and usage of the terminology used in the Waku ecosystem.","s":"Waku Docs Glossary","u":"/learn/glossary","h":"","p":363},{"i":366,"t":"Bootstrapping is the initial entry point of a node to the Waku Network. Once connected, other peer discovery methods can be employed to locate other peers in the network.","s":"Bootstrapping","u":"/learn/glossary","h":"#bootstrapping","p":363},{"i":368,"t":"A content topic is a string attached to messages to enable protocol-level features like selective message processing and retrieval based on specific criteria.","s":"Content topic","u":"/learn/glossary","h":"#content-topic","p":363},{"i":370,"t":"Dappnode is an open-source platform that simplifies the hosting and management of decentralised applications and blockchain nodes, including Waku.","s":"Dappnode","u":"/learn/glossary","h":"#dappnode","p":363},{"i":372,"t":"Discv5 is a peer discovery mechanism using a Distributed Hash Table (DHT) to store ENR records, providing censorship resistance, load distribution, and enhanced network resilience.","s":"Discv5","u":"/learn/glossary","h":"#discv5","p":363},{"i":374,"t":"DNS discovery is a peer discovery mechanism that allows the retrieval of an ENR tree from the TXT field of a domain name, enabling the storage of node connection details and promoting decentralisation.","s":"DNS discovery","u":"/learn/glossary","h":"#dns-discovery","p":363},{"i":376,"t":"Ethereum Node Record (ENR) is a specification used to represent and identify nodes, facilitating discovery and communication within the network. Besides connection details, ENR also includes node configuration information like enabled protocol and shards.","s":"ENR","u":"/learn/glossary","h":"#enr","p":363},{"i":378,"t":"Filter is a protocol that enables light nodes to selectively subscribe to specific messages transmitted by peers using content topics. It is designed to be a lightweight alternative for accessing the Relay network.","s":"Filter","u":"/learn/glossary","h":"#filter","p":363},{"i":380,"t":"GossipSub is a protocol for efficient and scalable information dissemination in decentralised networks commonly used in blockchain systems.","s":"GossipSub","u":"/learn/glossary","h":"#gossipsub","p":363},{"i":382,"t":"Libp2p is a modular network stack and protocol suite that allows developers to build decentralised, peer-to-peer applications across various network protocols.","s":"Libp2p","u":"/learn/glossary","h":"#libp2p","p":363},{"i":384,"t":"A light node is a resource-limited device or client that leverages service nodes to access the Relay network.","s":"Light node","u":"/learn/glossary","h":"#light-node","p":363},{"i":386,"t":"Light push is a protocol enabling light nodes to send messages to the Relay network and receive acknowledgements confirming that a peer has received them.","s":"Light push","u":"/learn/glossary","h":"#light-push","p":363},{"i":388,"t":"Mostly offline devices are clients who spend most of their time offline or disconnected from the internet and only occasionally to the internet and Waku Network. Examples include browsers and mobile phones.","s":"Mostly offline","u":"/learn/glossary","h":"#mostly-offline","p":363},{"i":390,"t":"A node is a device or client that implements Waku protocols and leverages the Waku Network to enable secure and private peer-to-peer web3 communication.","s":"Node","u":"/learn/glossary","h":"#node","p":363},{"i":392,"t":"A node key is a Secp256k1 (64-char hex string) private key for generating the PeerID, listening addresses, and discovery addresses of a Waku node.","s":"Node key","u":"/learn/glossary","h":"#node-key","p":363},{"i":394,"t":"Out-of-band refers to exchanging information through a separate, secure channel distinct from the main communication method to enhance security.","s":"Out-of-band","u":"/learn/glossary","h":"#out-of-band","p":363},{"i":396,"t":"The payload field in a Waku Message contains the application data, serving as the business logic message transmitted between clients over Waku. Applications can encrypt the payload or employ encryption methods specified in Waku Message Payload Encryption.","s":"Payload","u":"/learn/glossary","h":"#payload","p":363},{"i":398,"t":"A peer refers to other nodes and participants of the Waku Network with whom communication and interaction are possible.","s":"Peer","u":"/learn/glossary","h":"#peer","p":363},{"i":400,"t":"Peer discovery is when a node locates and gets information about other peers in the Waku Network.","s":"Peer discovery","u":"/learn/glossary","h":"#peer-discovery","p":363},{"i":402,"t":"Peer exchange is a peer discovery mechanism that enables light nodes to request and receive peers from other nodes in the network, allowing them to bootstrap and expand their connections without depending on Discv5.","s":"Peer exchange","u":"/learn/glossary","h":"#peer-exchange","p":363},{"i":404,"t":"PeerID is the unique identifier of a node in the Waku Network generated from the cryptographic hash of the node's public key.","s":"Peer ID","u":"/learn/glossary","h":"#peer-id","p":363},{"i":406,"t":"A protocol is a set of rules that enables nodes within the Waku Network to perform various functionalities such as message sending, relaying, filtering, storing, retrieving, and more.","s":"Protocol","u":"/learn/glossary","h":"#protocol","p":363},{"i":408,"t":"Publish/Subscribe (Pub/Sub) is an asynchronous messaging pattern where publishers send messages to topics, and subscribers receive messages from topics of interest, allowing efficient one-to-many communication.","s":"Pub/Sub","u":"/learn/glossary","h":"#pubsub","p":363},{"i":410,"t":"A Pub/Sub topic is a string that serves as an identifier for the topic of interest among GossipSub peers. Peers interested in the same topic are likely to maintain a connection and forward messages received on that topic.","s":"Pub/Sub topic","u":"/learn/glossary","h":"#pubsub-topic","p":363},{"i":412,"t":"Rate Limit Nullifiers (RLN) are a construct based on zero-knowledge proofs that enables rate limiting functionality while preserving the users's anonymity.","s":"Rate limit nullifiers","u":"/learn/glossary","h":"#rate-limit-nullifiers","p":363},{"i":414,"t":"Relay is a protocol that extends the GossipSub protocol to enable secure and censorship resistant message sending and receiving among peers while preserving privacy. It also scales the Waku Network to accommodate many nodes efficiently.","s":"Relay","u":"/learn/glossary","h":"#relay","p":363},{"i":416,"t":"Resource-limited refers to environments or devices restricting available resources, including bandwidth, CPU, memory, disk, and battery power.","s":"Resource-limited","u":"/learn/glossary","h":"#resource-limited","p":363},{"i":418,"t":"RLN Relay is an extension of the Relay protocol that uses Rate Limit Nullifiers (RLN) to prevent spam economically by enforcing a rate limit on messages over time, imposing penalties, and facilitating network removal for spammers.","s":"RLN relay","u":"/learn/glossary","h":"#rln-relay","p":363},{"i":420,"t":"SDKs are tools, libraries, and resources to integrate Waku's private, secure, and censorship-free communication features into various applications.","s":"SDK","u":"/learn/glossary","h":"#sdk","p":363},{"i":422,"t":"Store is a protocol that enables the storage of relayed messages in the network, allowing offline peers to retrieve missed messages upon reconnecting to the network.","s":"Store","u":"/learn/glossary","h":"#store","p":363},{"i":424,"t":"A transport is a network mechanism that establishes connections between peers and enables efficient transmission, routing, and delivery of data packets.","s":"Transport","u":"/learn/glossary","h":"#transport","p":363},{"i":426,"t":"Waku is a family of private, secure, decentralised, and peer-to-peer web3 communication protocols designed to operate in resource-limited environments and suitable for node or desktop application use. Additionally, these protocols collectively form the Waku Network.","s":"Waku","u":"/learn/glossary","h":"#waku","p":363},{"i":428,"t":"Waku Message defines the structure of messages in the Waku Network, including the content topic, payload, and metadata for application-specific processing.","s":"Waku message","u":"/learn/glossary","h":"#waku-message","p":363},{"i":430,"t":"Waku Message Payload Encryption provides guidelines for implementing secure and private communication in the Waku Network. It covers encryption, decryption, and signing methods for message payloads, focusing on confidentiality, authenticity, integrity, and unlinkability.","s":"Waku message payload encryption","u":"/learn/glossary","h":"#waku-message-payload-encryption","p":363},{"i":432,"t":"The Waku Network is an open-access, scalable peer-to-peer messaging network emphasizing privacy protection and accessibility to resource limited devices.","s":"Waku network","u":"/learn/glossary","h":"#waku-network","p":363},{"i":434,"t":"Waku Noise is a specified way to use the Noise Protocol Framework to build protocols that enable secure key-exchange mechanisms for encrypted communication with confidentiality, authenticity, integrity, strong forward secrecy, and identity-hiding properties.","s":"Waku noise","u":"/learn/glossary","h":"#waku-noise","p":363},{"i":436,"t":"A migration guide for refactoring your application code from Waku v0.026 to v0.027.","s":"Migrating to Waku v0.027","u":"/migrations/js-waku/migration_v0.026_0.027","h":"","p":435},{"i":438,"t":"Migrating to Waku v0.027 Table of Contents Network Configuration Default Network Configuration Static Sharding Auto Sharding Pubsub Topic Configuration Removed APIs Type Changes Internal/Private Utility Function Changes","s":"Table of Contents","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#table-of-contents","p":435},{"i":440,"t":"The way to configure network settings for a Waku node has been simplified. The new NetworkConfig type only allows for Static Sharding or Auto Sharding.","s":"Network Configuration","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#network-configuration","p":435},{"i":442,"t":"If no network configuration is provided when creating a Light Node, The Waku Network configuration will be used by default. Before import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode(); // This would use the default pubsub topic, that was, `/waku/2/default-waku/proto` After import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode(); // This will now use The Waku Network configuration by default: // { clusterId: 1, shards: [0,1,2,3,4,5,6,7] }","s":"Default Network Configuration","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#default-network-configuration","p":435},{"i":444,"t":"Before import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ shardInfo: { clusterId: 1, shards: [0, 1, 2, 3] } }); After import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ networkConfig: { clusterId: 1, shards: [0, 1, 2, 3] } });","s":"Static Sharding","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#static-sharding","p":435},{"i":446,"t":"Before import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ shardInfo: { clusterId: 1, contentTopics: [\"/my-app/1/notifications/proto\"] } }); After import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ networkConfig: { clusterId: 1, contentTopics: [\"/my-app/1/notifications/proto\"] } });","s":"Auto Sharding","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#auto-sharding","p":435},{"i":448,"t":"Named pubsub topics are no longer supported. You must use either Static Sharding or Auto Sharding to configure pubsub topics. Before import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ pubsubTopics: [\"/waku/2/default-waku/proto\"] }); After Use Static Sharding: import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ networkConfig: { clusterId: 1, shards: [0, 1, 2, 3, 4, 5, 6, 7] } }); Or use Auto Sharding: import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ networkConfig: { clusterId: 1, contentTopics: [\"/your-app/1/default/proto\"] } });","s":"Pubsub Topic Configuration","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#pubsub-topic-configuration","p":435},{"i":450,"t":"The following APIs have been removed: ApplicationInfo type: Use string for application and version in NetworkConfig instead. shardInfo option in createLightNode: Use networkConfig instead. pubsubTopics option in createLightNode: Use networkConfig with Static Sharding or Auto Sharding instead. If you were using ApplicationInfo before, you should now use ContentTopicInfo (Auto Sharding) and specify your application and version in the content topic string. Before import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ shardInfo: { clusterId: 1, application: \"my-app\", version: \"1\" } }); After import { createLightNode } from \"@waku/sdk\"; const waku = await createLightNode({ networkConfig: { clusterId: 1, contentTopics: [\"/my-app/1/default/proto\"] } });","s":"Removed APIs","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#removed-apis","p":435},{"i":452,"t":"ShardingParams has been removed. Use NetworkConfig instead. NetworkConfig is now defined as StaticSharding | AutoSharding. StaticSharding is equivalent to the previous ShardInfo. AutoSharding is equivalent to the previous ContentTopicInfo.","s":"Type Changes","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#type-changes","p":435},{"i":454,"t":"Several utility functions have been updated or added: ensureShardingConfigured has been removed. Use derivePubsubTopicsFromNetworkConfig instead. New function derivePubsubTopicsFromNetworkConfig has been added to derive pubsub topics from the network configuration. shardInfoToPubsubTopics now accepts Partial instead of Partial. New function pubsubTopicsToShardInfo has been added to convert pubsub topics to a ShardInfo object. If you were using any of these utility functions directly, you'll need to update your code accordingly. Before import { ensureShardingConfigured } from \"@waku/utils\"; const result = ensureShardingConfigured(shardInfo); After import { derivePubsubTopicsFromNetworkConfig } from \"@waku/utils\"; const pubsubTopics = derivePubsubTopicsFromNetworkConfig(networkConfig); Note: The default NetworkConfig for The Waku Network is now { clusterId: 1, shards: [0,1,2,3,4,5,6,7] }.","s":"Internal/Private Utility Function Changes","u":"/migrations/js-waku/migration_v0.026_0.027","h":"#internalprivate-utility-function-changes","p":435},{"i":457,"t":"We can think of incentivisation tools as a two-by-two matrix: rewards vs punishment; monetary vs reputation. In other words, there are four quadrants: monetary reward: the node gets rewarded; monetary punishment: the nodes deposits funds that are taken away (slashed) if it misbehaves; reputation reward: the node's reputation increases if it behaves well; reputation punishment: the node's reputation decreases if it behaves badly. Reputation only works if high reputation brings tangible benefits. For example, if nodes chose neighbors based on reputation, low-reputation nodes miss out on potential revenue. Reputation scores may be local (a node assigns scores to its neighbors) or global (each node gets a uniform score). Global reputation in its simplest form involves a trusted third party, although decentralised approaches are also possible.","s":"Incentivisation tools","u":"/research/research-and-studies/incentivisation","h":"#incentivisation-tools","p":455},{"i":459,"t":"We may split incentivized decentralised networks into early file-sharing, blockchains, and decentralised storage.","s":"Prior work","u":"/research/research-and-studies/incentivisation","h":"#prior-work","p":455},{"i":461,"t":"Early P2P file-sharing networks employ reputation-based approaches and sticky defaults. For instance, the BitTorrent protocol rewards uploading peers with faster downloads. The download bandwidth available to a peer depends on how much it has uploaded. Moreover, peers share pieces of a file before having received it in whole. This non-monetary i13n policy has been proved to work in practice.","s":"Early P2P file-sharing","u":"/research/research-and-studies/incentivisation","h":"#early-p2p-file-sharing","p":455},{"i":463,"t":"Bitcoin has introduced proof-of-work (PoW) for native monetary rewards in a P2P network. PoW miners are automatically assigned newly mined coins for generating blocks. Miners must expend physical resources to generate a block. If the block is invalid, these expenses are not compensated (implicit monetary punishment). Proof-of-stake (PoS), used in Ethereum and many other cryptocurrencies, introduces explicit monetary punishments. PoS validators lock up (stake) native tokens and get rewarded for validating blocks or slashed for misbehaviour.","s":"Blockchains","u":"/research/research-and-studies/incentivisation","h":"#blockchains","p":455},{"i":465,"t":"Post-Bitcoin decentralised storage networks include Codex, Storj, Sia, Filecoin, IPFS. Their i13n methods combine techniques from early P2P file-sharing with blockchain-inspired reward mechanisms.","s":"Decentralised storage","u":"/research/research-and-studies/incentivisation","h":"#decentralised-storage","p":455},{"i":467,"t":"On this page Waku is a family of protocols for a modular privacy-preserving censorship-resistant decentralised communication network. The backbone of Waku is the Relay protocol (and its spam-protected version RLN-Relay). Additionally, there are light protocols: Store, Filter, and Lightpush. Light protocols are also referred to as client-server protocols and request-response protocols. A server is a node running Relay and a server-side of at least one light protocol. A client is a node running a client-side of any of the light protocols. A server may sometimes be referred to as a full node, and a client as a light node. There is no strict definition of a full node vs a light node in Waku (see discussion). In light protocols, a client sends a request to a server, and a server performs some actions and returns a response: Store: the server responds with messages relayed that match a set of criteria; Filter: the server will relay (only) messages that pass a filter to the client; Lightpush: the server publishes the client's message to the Relay network.","s":"Waku background","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":469,"t":"Waku has no consensus and no native token, which brings it closer to reputation-incentivised file-sharing networks. As of late 2023, Waku only operates under reputation-based rewards and punishments. While RLN-Relay adds monetary punishments for spammers, slashing is yet to be activated. Monetary rewards and punishments should ideally be atomically linked with the node's behaviour. A benefit of blockchains in this respect is that the desired behaviour of miners or validators can be verified automatically. Enforcing atomicity in a communication network is more challenging: it is non-trivial to prove that a given piece of data has been relayed. Our goal is to combine monetary and reputation-based incentives for Waku. Monetary incentives have demonstrated their robustness in blockchains. We think they are necessary to scale the network beyond the initial phase when it's maintained altruistically.","s":"Waku i13n challenges","u":"/research/research-and-studies/incentivisation","h":"#waku-i13n-challenges","p":455},{"i":471,"t":"Waku Store is a light protocol for querying historic messages that works as follows: the client sends a HistoryQuery to the server; the server sends a HistoryResponse to the client. The response may be split into multiple parts, as specified by pagination parameters in PagingInfo. We define a relevant message as a message that matches client-defined criteria (e.g., relayed within a given time frame). Upon receiving a request, a server should quickly send back a response containing all and only relevant messages.","s":"Waku Store","u":"/research/research-and-studies/incentivisation","h":"#waku-store","p":455},{"i":473,"t":"On this page An incentivised Store protocol has the following extra steps: pricing: cost calculation price advertisement price negotiation payment: payment itself proof of payment reputation results cross-checking In this document, we focus on the simplest proof-of-concept (PoC) i13n for Store. Compared to the fully-fledged protocol, the PoC version is simplified in the following ways: cost calculation is based on a common-knowledge price; there is no price advertisement and no price negotiation; each query is paid for in a separate transaction, txid acts a proof of payment; the reputation system is simplified (see below); the results are not cross-checked. In the PoC protocol: the client calculates the price based on the known rate per hour of history; the client pays the appropriate amount to the server's address; the client sends a HistoryQuery to the server alongside the proof of payment (txid); the server checks that the txid corresponds to a confirmed transaction with at least the required amount; the server sends a HistoryResponse to the client. In further subsections, we list the potential direction for future work towards a fully-fledged i13n mechanism.","s":"Waku Store incentivisation","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":475,"t":"For PoC, we assume a constant price per hour of history. This price and the blockchain address of the server are assumed to be common knowledge. This simplifies the client-server interaction, avoiding the price negotiation step. In the future versions of the protocol, the price will be negotiated and will depend on multiple parameters, such as the total size of the relevant messages in the response.","s":"Pricing","u":"/research/research-and-studies/incentivisation","h":"#pricing","p":455},{"i":477,"t":"DoS protection - see https://github.com/waku-org/research/issues/66 Cost calculation - see https://github.com/waku-org/research/issues/35 Price advertisement - see https://github.com/waku-org/research/issues/51 Price negotiation - see https://github.com/waku-org/research/issues/52","s":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work","p":455},{"i":479,"t":"For the PoC, each request is paid for with a separate transaction. The transaction hash (txid) acts as a proof of payment. The server verifies the payment by ensuring that: the transaction has been confirmed; the transaction is paying the proper amount to the server's account; the txid does not correspond to any prior response. The client gives proof of payment before it receives the response. Other options could be: the client pays after the fact; the client pays partly upfront and partly after the fact; a centralised third party (either trusted or semi-trusted, like a smart contract) ensures atomicity; cryptographically ensured atomicity (similar to atomic swaps, Lightning, or Hopr). Our design considerations are: the PoC protocol should be simple; servers are more \"permanent\" entities and are more likely to have long-lived identities; it is more important to protect the clients's privacy than the server's privacy. In light of these criteria, we suggest that the client pays first. This is simpler than splitting the payment, or involving an extra atomicity-enforcing mechanism. Moreover, pre-payment is arguably more privacy-preserving than post-payment, which encourages servers to deanonymise clients to prevent fraud.","s":"Payment","u":"/research/research-and-studies/incentivisation","h":"#payment","p":455},{"i":481,"t":"Add more payment methods - see https://github.com/waku-org/research/issues/58 Design a subscription model with service credentials - see https://github.com/waku-org/research/issues/59 Add privacy to service credentials - see https://github.com/waku-org/research/issues/60 Consider the impact of network disruptions - see https://github.com/waku-org/research/issues/65","s":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work-1","p":455},{"i":483,"t":"We use reputation to discourage the server from taking the payment and not responding. The client keeps track of the server's reputation: all servers start with zero reputation points; if the server honours the request, it gets +n points; if the server does not respond before a timeout, it gets -m points. if the server's reputation drops below k points, the client will never query it again. n, m, and k are subject to configuration. Optionally, a client may treat a given server as trusted, assigning it a constant positive reputation. Potential issues: An attacker can establish new server identities and continue running away with clients' money. Countermeasures: a client only queries trusted servers (which however leads to centralisation); when querying a new server, a client first sends a small (i.e. cheap) request as a test; more generally, the client selects a server on a case-by-case basis, weighing the payment amount against the server's reputation. The ban mechanism can theoretically be abused. For instance, a competitor may attack the victim server and cause the clients who were awaiting the response to ban that server. Countermeasure: prevent DoS-attacks.","s":"Reputation","u":"/research/research-and-studies/incentivisation","h":"#reputation","p":455},{"i":485,"t":"Design a more comprehensive reputation system: local reputation - see https://github.com/waku-org/research/issues/48 global reputation - see https://github.com/waku-org/research/issues/49","s":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work-2","p":455},{"i":487,"t":"As there is no consensus over past messages, a client may want to query multiple servers and merge their responses. Cross-checking helps ensure that servers are a) not censoring real messages; b) not injecting fake messages into history. Cross-checking is absent in PoC but may be considered later.","s":"Results cross-checking","u":"/research/research-and-studies/incentivisation","h":"#results-cross-checking","p":455},{"i":489,"t":"Cross-checking the results against censorship - see https://github.com/waku-org/research/issues/57 Use RLN to limit fake message insertion - see https://github.com/waku-org/research/issues/38","s":"Future work","u":"/research/research-and-studies/incentivisation","h":"#future-work-3","p":455},{"i":491,"t":"On this page We should think about what the success metrics for an incentivised protocol are, and how to measure them both in simulated settings, as well as in a live network.","s":"Evaluation","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":493,"t":"On this page Analyze privacy issues - see https://github.com/waku-org/research/issues/61 Analyze decentralised storage protocols and their relevance e.g. as back-end storage for Store servers - see https://github.com/waku-org/research/issues/34 Analyze the role of message senders, in particular, whether they should pay for sending non-ephemeral messages - see https://github.com/waku-org/research/issues/32 Generalise incentivisation protocol to other Waku light protocols (Lightpush and Filter) - see https://github.com/waku-org/research/issues/67.","s":"Longer-term future work","u":"/research/research-and-studies/incentivisation","h":"","p":455},{"i":495,"t":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","s":"Comparing Waku and libp2p","u":"/learn/waku-vs-libp2p","h":"","p":494},{"i":497,"t":"Waku intends to incentivise mechanisms to run nodes, but it is not part of libp2p's scope. Additionally, users or developers do not have to deploy their infrastructure as a prerequisite to use Waku. It is a service network. However, you are encouraged to run a node to support and decentralise the network.","s":"Waku as a service network","u":"/learn/waku-vs-libp2p","h":"#waku-as-a-service-network","p":494},{"i":499,"t":"Waku includes various protocols covering the following domains: privacy preservation, censorship resistance, and platform agnosticism, allowing it to run on any platform or environment. Waku provides out-of-the-box protocols to enable mostly offline/resource-limited devices, Store/Light Push/Filter caters to those use cases.","s":"Waku as a turnkey solution","u":"/learn/waku-vs-libp2p","h":"#waku-as-a-turnkey-solution","p":494},{"i":501,"t":"libp2p does not have strong spam protection guarantees, RLN Relay is a protocol being developed by the Waku team towards this goal.","s":"Economic spam protection","u":"/learn/waku-vs-libp2p","h":"#economic-spam-protection","p":494},{"i":503,"t":"Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:","s":"Protocols","u":"/learn/concepts/protocols","h":"","p":502},{"i":505,"t":"Relay protocol employs a Pub/Sub architecture to facilitate the sending and receiving of messages among peers. It extends the libp2p GossipSub protocol to create a privacy-focused peer-to-peer messaging protocol that enables secure communication channels, encryption, and protection against censorship. It also scales the Waku Network to accommodate many nodes efficiently.","s":"Relay","u":"/learn/concepts/protocols","h":"#relay","p":502},{"i":507,"t":"RLN Relay protocol extends the Relay protocol by using Rate Limit Nullifiers (RLN) to provide efficient and economic spam-prevention. It enforces a rate limit on messages over time for all peers in the network, economically preventing spam, and imposes financial penalties and network removal for spammers. You can find more details in the RLN Relay blog post.","s":"RLN relay","u":"/learn/concepts/protocols","h":"#rln-relay","p":502},{"i":509,"t":"Filter protocol allows light nodes to selectively subscribe to specific messages relayed by other peers using content topics. It is designed to be a lightweight alternative for accessing the Relay network, particularly tailored for devices with limited bandwidth. info Filter protocol helps optimise bandwidth usage, but it has fewer privacy guarantees as it must disclose the content topic to its peers to retrieve messages.","s":"Filter","u":"/learn/concepts/protocols","h":"#filter","p":502},{"i":511,"t":"Store protocol is responsible for storing messages relayed in the network, making it possible to query and retrieve them later. This functionality benefits offline peers by enabling them to retrieve missed messages upon reconnection. info Using Relay and Filter protocols is recommended when a node is online, as Store does not guarantee data availability. The Store protocol is suitable for retrieving messages when connecting to the network, like when a DApp starts.","s":"Store","u":"/learn/concepts/protocols","h":"#store","p":502},{"i":513,"t":"Light Push is a Request/Response protocol for nodes with limited bandwidth and short connection windows. It allows a client to receive an acknowledgement when sending messages, indicating that at least one peer has received them. Subsequently, the remote peer forwards these messages to the Relay network. info While the Light Push protocol acknowledges the receipt by the remote peer, it does not guarantee network-wide propagation.","s":"Light push","u":"/learn/concepts/protocols","h":"#light-push","p":502},{"i":515,"t":"Waku Message specifies the structure and format of messages in the Waku Network. It includes the following attributes: content_topic attribute for content-based filtering. payload attribute containing the message data payload to be sent. meta attribute for conveying additional details to various protocols for application-specific processing. timestamp attribute signifying the time at which the message was generated by its sender. ephemeral attribute specifying whether the network should not store the message.","s":"Waku message","u":"/learn/concepts/protocols","h":"#waku-message","p":502},{"i":517,"t":"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.","s":"Capped Bandwidth in Waku","u":"/research/research-and-studies/capped-bandwidth","h":"","p":516},{"i":519,"t":"First of all, let's begin with the terminology. We have talked in the past about \"predictable\" bandwidth, but a better name would be \"capped\" bandwidth. This is because it is totally fine that the waku traffic is not predictable, as long as it is capped. And it has to be capped because otherwise, no one will be able to run a node. Since we aim that everyone can run a full waku node (at least subscribed to a single shard) it is of paramount importance that the bandwidth requirements (up/down) are i) reasonable to run with a residential internet connection in every country and ii) limited to an upper value, aka capped. If the required bandwidth to stay up to date with a topic is higher than what the node has available, then it will start losing messages and won't be able to stay up to date with the topic messages. And not to mention the problems this will cause to other services and applications being used by the user. The main problem is that one can't just choose the bandwidth it allocates to relay. One could set the maximum bandwidth willing to allocate to store but this is not how relay works. The required bandwidth is not set by the node, but by the network. If a pubsub topic a has a traffic of 50 Mbps (which is the sum of all messages being sent multiplied by its size, times the D_out degree), then if a node wants to stay up to date in that topic, and relay traffic in it, then it will require 50 Mbps. There is no thing such as \"partially contributing\" to the topic (with eg 25Mbps) because then you will be losing messages, becoming an unreliable peer and potentially be disconnected. The network sets the pace. So waku needs an upper boundary on the in/out bandwidth (mbps) it consumes. Just like apps have requirements on cpu and memory, we should set a requirement on bandwidth, and then guarantee that if you have that bandwidth, you will be able to run a node without any problem. And this is the tricky part. This metric is Waku's constraint, similar to the gas-per-block limit in blockchains.","s":"Problem","u":"/research/research-and-studies/capped-bandwidth","h":"#problem","p":516},{"i":521,"t":"Quick summary of the evolution to solve this problem: Waku started with no rate-limiting mechanism. The network was subject to DoS attacks. RLN v1 was introduced, which allowed to rate-limit in a privacy-preserving and anonymous way. The rate limit can be configured to 1 message every y seconds. However, this didn't offer much granularity. A low y would allow too many messages and a high y would make the protocol unusable (impossible to send two messages in a row). RLN v2 was introduced, which allows to rate-limit each user to x messages every y seconds. This offers the granularity we need. It is the current solution deployed in The Waku Network.","s":"Previous Work","u":"/research/research-and-studies/capped-bandwidth","h":"#previous-work","p":516},{"i":523,"t":"The current solution to this problem is the usage of RLN v2, which allows to rate-limit x messages every y seconds. On top of this, the introduction of WAKU2-RLN-CONTRACT enforces a maximum amount of messages that can be sent to the network per epoch. This is achieved by limiting the amount of memberships that can be registered. The current values are: R_{max}: 160000 mgs/epoch r_{max}: 600 msgs/epoch r_{min}: 20 msgs/epoch In other words, the contract limits the amount of memberships that can be registered from 266 to 8000 depending on which rate limit users choose. On the other hand 64/WAKU2-NETWORK states that: rlnEpochSizeSec: 600. Meaning the epoch size is 600 seconds. maxMessageSize: 150KB. Meaning the maximum message size that is allowed. Note: recommended average of 4KB. Putting this all together and assuming: Messages are sent uniformly distributed. All users totally consumes its rate-limit. We can expect the following message rate and bandwidth for the whole network: A traffic of 266 msg/second on average (160000/600) A traffic of 6 MBps on average (266 * 4KB * 6), where 4KB is the average message size and 6 is the average gossipsub D-out degree. And assuming a uniform distribution of traffic among 8 shards: 33 msg/second per shard. 0.75 MBps per shard.","s":"Current Solution (RLN v2)","u":"/research/research-and-studies/capped-bandwidth","h":"#current-solution-rln-v2","p":516},{"i":525,"t":"Last updated: 9 February 2024 This Privacy Policy is intended to inform users of our approach to privacy in respect of this website (\"Website\"). In this regard, if you are visiting our Website, this Privacy Policy applies to you.","s":"Privacy Policy","u":"/privacy-policy","h":"","p":524},{"i":527,"t":"For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at Logos Collective Association c/o PST Consulting GmbH Baarerstrasse 10 6300 Zug Switzerland Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association.","s":"1) Who we are","u":"/privacy-policy","h":"#1-who-we-are","p":524},{"i":529,"t":"We aim to limit the collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose. In this regard, we collect and process the following personal data from your use of the Website: IP address: As part of such use of the Website we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time.","s":"2) We limit the collection and processing of personal data from your use of the Website","u":"/privacy-policy","h":"#2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website","p":524},{"i":531,"t":"In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply.","s":"3) Third party processing of personal data","u":"/privacy-policy","h":"#3-third-party-processing-of-personal-data","p":524},{"i":533,"t":"As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us.","s":"4) Security measures we take in respect of the Website","u":"/privacy-policy","h":"#4-security-measures-we-take-in-respect-of-the-website","p":524},{"i":535,"t":"We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation.","s":"5) Exporting data outside the European Union and Switzerland","u":"/privacy-policy","h":"#5-exporting-data-outside-the-european-union-and-switzerland","p":524},{"i":537,"t":"As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to: Ask us to correct or update your personal data (where reasonably possible); Ask us to remove your personal data from our systems; Ask us for a copy of your personal data, which may also be transferred to another data controller at your request; Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent; Object to the processing of your personal data; and File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully.","s":"6) Your choices and rights","u":"/privacy-policy","h":"#6-your-choices-and-rights","p":524},{"i":539,"t":"On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites.","s":"7) Third party links","u":"/privacy-policy","h":"#7-third-party-links","p":524},{"i":541,"t":"We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.","s":"8) This Privacy Policy might change","u":"/privacy-policy","h":"#8-this-privacy-policy-might-change","p":524},{"i":543,"t":"To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology. This document is licensed under CC-BY-SA.","s":"9) Contact information","u":"/privacy-policy","h":"#9-contact-information","p":524},{"i":545,"t":"TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it's affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.","s":"Message Propagation Times With Waku-RLN","u":"/research/research-and-studies/message-propagation","h":"","p":544},{"i":547,"t":"Waku uses relay as a routing protocol, which is an adaptation of gossipsub. It routes messages following a publisher/subscriber architecture, where nodes can publish messages or subscribe to topics. If message m is published to topic t, all i nodes n_1...n_i subscribed to t will get m. The relay protocol ensures that every node gets the messages of the topics it is subscribed to. However, since relay works in a decentralized manner, all nodes contribute to the gossiping of a message, until it has successfully reached all the interested nodes (subscribed to it). This means that a message can travel multiple hops until it reaches all nodes. The amount of hops determines the message propagation time, which is measured as the time difference of when the node published the message and when another node received. This issue aims to go from theory to practice, by i) understanding message propagation times in theory and ii) presenting nwaku simulation results in an end-to-end setup with rln, with real message propagation times.","s":"Introduction","u":"/research/research-and-studies/message-propagation","h":"#introduction","p":544},{"i":549,"t":"Let's start with message propagation times in theory. On a high level, it depends on: The gossipsub configuration, being D one of the most important parameters. This sets the hops that a message will travel to reach all nodes. Higher D, less hops, less delay. Note that a higher D implies more bandwidth consumption. The node. Different nodes will see different propagation times, because a message can travel different paths. A node connected directly to the publisher (1 hop) will see lower propagation times than other nodes further away. Individual propagation times. Since a message can travel multiple hops to reach its destination, each hop adds a contribution to the overall message propagation time. This individual propagation time depends on the characteristics on the nodes involved in the connections. In a D-regular graph, like the one formed by waku nodes around a topic, the maximum amount of hops that a message can travel to reach all nodes can be calculated as ceil(log(total_nodes)/log(D)). For example, with log(1000)/log(6) = 3.85 = 4. So in a network with 1000 nodes and D=6, no matter which node publishes the message, in 4 hops it will reach all the nodes. Notice the \"worst case\" since some nodes might be directly connected to the publisher, so they will get the message in just 1 hop. But how long does it take to jump each hop? It depends on: The latency between nodes. Can be measured as the time to respond to a ping. The size of the messages. The bigger the message, the more time it takes to transmit. Nodes bandwidth. Sender upload bandwidth and receiver download bandwidth. More important when using big message sizes. Message validation time. When each node receives a message, it applies some validation to decide if the message is further gossiped or not. In the case of waku, this is RLN (paper, rfc) Assuming a message m that travels 4 hops from node n1 (publisher) to n5 (subscriber) we can calculate the message propagation time mpt=ipt_1+ipt_2+ipt_3+ipt_4 where ipt is the individual propagation time between each node in the chain. However, specific message propagation times are useless, we need average times under specific conditions. And for this, we need simulations.","s":"Theory","u":"/research/research-and-studies/message-propagation","h":"#theory","p":544},{"i":551,"t":"Using shadow simulator, we have developed a tool that allows to simulate message propagation delays of nwaku (using a slightly modified branch, mainly to instrument it with tools to measure the times + starting from an already connected mesh. Thanks @Menduist for the help. Note that running this simulation requires a significant amount of resources, done with 256 GB of RAM. The configuration of the simulation is (see config): latency=100ms. Average latency in our current waku network. Thanks @vpavlin for the measurements. See this for live data. down_bandwidth=83Mbps, up_bandwidth=38Mbps. As shown in Table 2 that's the worldwide median speed. D=6, which is the current nwaku configuration. nodes=1000. Amount of nodes used in the simulation nwaku was used with a minor modification A total of 10 messages were published, that led to 9990 received messages. Since shadow doesn't take into account CPU times (by now), we simulate it with sleepAsync as per https://github.com/waku-org/research/issues/23 findings. 0.012 seconds for proof verification and 0.15 seconds for proof generation.","s":"Simulations","u":"/research/research-and-studies/message-propagation","h":"#simulations","p":544},{"i":553,"t":"The following figure shows the message propagation time with real simulations, showing the distribution in a network with the above configuration with three different message sizes: 10kB, 100kB, 500kB. Note that the whiskers indicate the best/worst values and the box contains P25 to P75 values. Average mu and P95 are also shown. Raw data here. Important note. The first messages sent in the simulations are omitted, since they show an abnormal propagation delay that doesn't reflect reality. This is due to how flow control works in TCP, where right after connection, the sender node has no idea of the \"bandwidth\" of the receiver node, so it will start sending packages at a lower rate. This translates into high transmission times, and it's more pronounced when dealing with big message sizes. In other words, in a 100Mpbs link, 100Mbits won't be sent in 1 second, or at least not a the beginning, when the node is slowly increasing the rate until based on ACK/NACK ratio. For more information about this, this is explained in here. Conclusions: Using small messages 10kB the average propagation delay is 508 ms, quite reasonable for applications using waku. The variance is acceptable, with 95% of the messages arriving in <627 ms. When using a size of 10kB we can see that the best case propagation delay is 263 ms. This corresponds to the nodes that are just 1 hop from the publisher. The proof generation time 0.15 seconds affects the most, where the rest is the inter-node latency and the transmission of the message itself. We can see that the message propagation delay increases with big messages, 100kB and 500kB. So its probably not a good idea to use waku for such big messages. Note that these simulations had 1000 nodes, so if we scale it to 10000 or beyond, propagation times would be worse. Best case propagation time (lower part of the whisker) is quite similar in all cases. This is because it corresponds to the node that is just 1 hop away from the publisher. Future work: Current waku D values (average of 6 ranging from 4 to 12) have a huge impact on the bandwidth that a node consumes. Are we willing to lower D in order to reduce bandwidth but increase message propagation times? Since shadow doesn't take CPU time into account, it's currently simulated for rln, which should be the biggest bottleneck. Once shadow has this feature times would be more accurate.","s":"Results","u":"/research/research-and-studies/message-propagation","h":"#results","p":544},{"i":555,"t":"Research and Studies: Protocol simulations and theoretical analysis to support the design of Waku protocols. The protocol definitions are on the Waku RFCs website. Benchmarks: Results of implementations and engineering-related benchmarks for Waku clients. Waku also has the following published research papers: WAKU-RLN-RELAY: Privacy-Preserving Peer-to-Peer Economic Spam Protection Message Latency in Waku Relay with Rate Limiting Nullifiers Waku: A Family of Modular P2P Protocols For Secure & Censorship-Resistant Communication The Waku Network as Infrastructure for dApps","s":"Research","u":"/research/","h":"","p":554},{"i":557,"t":"Last updated: 14 February 2024 These website terms of use ('Website Terms of Use') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website. It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use. If you do not agree with these Website Terms of Use, you must not access or use the Website.","s":"Terms of Use","u":"/terms","h":"","p":556},{"i":559,"t":"For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at: Logos Collective Association c/o PST Consulting GmbH Baarerstrasse 10 6300 Zug Switzerland Whenever we refer to “Logos”, “we”, “us” or any other similar references, we are referring to the Logos Collective Association.","s":"1) Who we are","u":"/terms","h":"#1-who-we-are","p":556},{"i":561,"t":"The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk. We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law. We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws. The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein. The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such. Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security.","s":"2) Disclaimers","u":"/terms","h":"#2-disclaimers","p":556},{"i":563,"t":"The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general. The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website. While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion.","s":"3) Forward looking statements","u":"/terms","h":"#3-forward-looking-statements","p":556},{"i":565,"t":"The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: https://creativecommons.org/licenses/by/4.0/.","s":"4) Intellectual property rights","u":"/terms","h":"#4-intellectual-property-rights","p":556},{"i":567,"t":"To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites.","s":"5) Third-party website links","u":"/terms","h":"#5-third-party-website-links","p":556},{"i":569,"t":"We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.","s":"6) Limitation of liability","u":"/terms","h":"#6-limitation-of-liability","p":556},{"i":571,"t":"You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.","s":"7) Indemnity","u":"/terms","h":"#7-indemnity","p":556},{"i":573,"t":"We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.","s":"8) Modifications","u":"/terms","h":"#8-modifications","p":556},{"i":575,"t":"Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.","s":"9) Governing law","u":"/terms","h":"#9-governing-law","p":556},{"i":577,"t":"In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website. We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions. If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking. If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration. Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.","s":"10) Disputes","u":"/terms","h":"#10-disputes","p":556},{"i":579,"t":"These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website. The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use. If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them. If you have any specific questions about these Website Terms of Use, please contact us at legal@free.technology. This document is licensed under CC-BY-SA.","s":"11) About these Website Terms of Use","u":"/terms","h":"#11-about-these-website-terms-of-use","p":556},{"i":582,"t":"This page summarises key performance metrics for nwaku and provides links to detailed test reports. TL;DR​ Average Waku bandwidth usage: ~10 KB/s (minus discv5 Discovery) for 1KB message size and message injection rate of 1msg/s. Confirmed for topologies of up to 2000 Relay nodes. Average time for a message to propagate to 100% of nodes: 0.4s for topologies of up to 2000 Relay nodes. Average per-node bandwidth usage of the discv5 protocol: 8 KB/s for incoming traffic and 7.4 KB/s for outgoing traffic, in a network with 100 continuously online nodes. Future improvements: A messaging API is currently in development to streamline interactions with the Waku protocol suite. Once completed, it will enable benchmarking at the messaging API level, allowing applications to more easily compare their own performance results.","s":"Introduction","u":"/research/benchmarks/test-results-summary","h":"#introduction","p":580},{"i":584,"t":"Average Waku bandwidth usage: ~10 KB/s (minus discv5 Discovery) for 1KB message size and message injection rate of 1msg/s. Confirmed for topologies of up to 2000 Relay nodes. Average time for a message to propagate to 100% of nodes: 0.4s for topologies of up to 2000 Relay nodes. Average per-node bandwidth usage of the discv5 protocol: 8 KB/s for incoming traffic and 7.4 KB/s for outgoing traffic, in a network with 100 continuously online nodes. Future improvements: A messaging API is currently in development to streamline interactions with the Waku protocol suite. Once completed, it will enable benchmarking at the messaging API level, allowing applications to more easily compare their own performance results.","s":"TL;DR","u":"/research/benchmarks/test-results-summary","h":"#tldr","p":580},{"i":587,"t":"The average per-node libp2p bandwidth usage in a 1000-node Relay network with 1KB messages at varying injection rates. Message Injection Rate Average libp2p incoming bandwidth (KB/s) Average libp2p outgoing bandwidth (KB/s) 1 msg/s ~10.1 ~10.3 1 msg/10s ~1.8 ~1.9","s":"Relay Bandwidth Usage: nwaku v0.34.0","u":"/research/benchmarks/test-results-summary","h":"#relay-bandwidth-usage-nwaku-v0340","p":580},{"i":589,"t":"The message propagation latency is measured as the total time for a message to reach all nodes. We compare the latency in different network configurations for the following simulation parameters: Total messages published: 600 Message size: 1KB Message injection rate: 1msg/s The different network configurations tested are: Relay Config: 1000 nodes with relay enabled Mixed Config: 210 nodes, consisting of bootstrap nodes, filter clients and servers, lightpush clients and servers, store nodes Non-persistent Relay Config: 500 persistent relay nodes, 10 store nodes and 100 non-persistent relay nodes Click on a specific config to see the detailed test report. Config Average Message Propagation Latency (s) Max Message Propagation Latency (s) Relay (1000 nodes) 0.05 1.6 Mixed (210 nodes) 0.0125 0.007 Non-persistent Relay (510 nodes) 0.0125 0.25","s":"Message Propagation Latency: nwaku v0.34.0-rc1","u":"/research/benchmarks/test-results-summary","h":"#message-propagation-latency-nwaku-v0340-rc1","p":580},{"i":591,"t":"The average bandwidth usage of discv5 for a network of 100 nodes and message injection rate of 0 or 1msg/s. The measurements are based on a stable network where all nodes have already connected to peers to form a healthy mesh. Message size Average discv5 incoming bandwidth (KB/s) Average discv5 outgoing bandwidth (KB/s) no message injection 7.88 6.70 1KB 8.04 7.40 10KB 8.03 7.45","s":"Discv5 Bandwidth Usage: nwaku v0.34.0","u":"/research/benchmarks/test-results-summary","h":"#discv5-bandwidth-usage-nwaku-v0340","p":580},{"i":594,"t":"The VAC DST team performs regression testing on all new nwaku releases, comparing performance with previous versions. They simulate large Waku networks with a variety of network and protocol configurations that are representative of real-world usage. Test Reports: DST Reports","s":"DST","u":"/research/benchmarks/test-results-summary","h":"#dst","p":580},{"i":596,"t":"The VAC QA team performs interoperability tests for nwaku and go-waku using the latest main branch builds. These tests run daily and verify protocol functionality by targeting specific features of each protocol. Test Reports: QA Reports","s":"QA","u":"/research/benchmarks/test-results-summary","h":"#qa","p":580},{"i":598,"t":"The nwaku team follows a structured release procedure for all release candidates. This involves deploying RCs to status.staging fleet for validation and performing sanity checks. Release Process: nwaku Release Procedure","s":"nwaku","u":"/research/benchmarks/test-results-summary","h":"#nwaku","p":580},{"i":600,"t":"The Waku Research team conducts a variety of benchmarking, performance testing, proof-of-concept validations and debugging efforts. They also maintain a Waku simulator designed for small-scale, single-purpose, on-demand testing. Test Reports: Waku Research Reports Waku Simulator: Waku Simulator Book","s":"Research","u":"/research/benchmarks/test-results-summary","h":"#research","p":580},{"i":602,"t":"Waku is a nascent technology and the Waku community is still growing. Hence, the Waku team is keen to work closely with projects to help leverage Waku technology to drive the success of their own applications. We describe below the expected flow for working with Waku and some rules of engagement to set expectations for project teams interacting with the Waku team.","s":"Rules of Engagement","u":"/rules-of-engagement","h":"","p":601},{"i":604,"t":"We encourage the initial discussion to happen over a video call. However, in-person event or online discussions are also an option. During this initial interaction, the project team should present their product and the needs they have in relation to peer-to-peer communication and real time interaction. The Waku team will provide an overview of Waku and point to specific protocol and software that should help fulfil such needs. Benefits and caveats are highlighted and further documentation and examples will be provided.","s":"1. Initial discussion","u":"/rules-of-engagement","h":"#1-initial-discussion","p":601},{"i":606,"t":"Projects should review Waku documentations and libraries in their own time; start building a PoC using Waku. Projects should start designing over Waku and come up with skeleton design or user flows about specific friction points or complex area (e.g. user experience, scaling). Project should appoint one or two Waku SME (Subject Matter Expert) to drive most discussions with Waku team to start acquire expertise on Waku behaviour. Project's Waku SMEs should present unresolved design issues to Waku team. The Waku team will then review and provide skeleton design solutions on how to overcome said unresolved or complex issues.","s":"2. Solution design","u":"/rules-of-engagement","h":"#2-solution-design","p":601},{"i":608,"t":"The project should finalise a design, solution or protocol they will build using Waku. If they wish to, they can present this solution to the Waku team to get feedback and identify technical gaps. The Waku team can provide feedback, highlight potential caveats, and communicate on delivery timeline for gaps, if any. note While the Waku team can provide feedback or even design potential solution on how Waku could be integrated in an application. It is the responsibility of the project team to understand the potential caveats and limitations that may incur with such a design. The Waku team can provide options, but it is up to the project team to decide on the final solution.","s":"3. Commitment","u":"/rules-of-engagement","h":"#3-commitment","p":601},{"i":610,"t":"The project then start building their MVP using Waku. The Waku team can provide support regarding API usage, bugs encountered, documentation gaps. Waku team will use feedback raised by project to improve APIs, fix bugs and enhance documentation. Waku team continues R&D to deliver any committed technical gaps. Project delivers their MVP. note The Waku team is keen to help any usage of Waku library. Please note that code snippets are necessary for preliminary investigations of issues. Sometimes, a code snippet is not enough; in this case, a minimal reproduction repo is necessary to allow us to do further investigation. If the project is open-source, then the Waku team might try to further investigate using it, as long as the reproduction steps are easy. If no code is provided to help with the investigation, then there is nothing the Waku team can do. For any unresolved issue, the project must open an issue on the related GitHub repository under the waku-org organisation.","s":"4. Building","u":"/rules-of-engagement","h":"#4-building","p":601},{"i":612,"t":"Once the project application is live, the Waku team is keen to maintain regular contact. This can include discussion around performance, bugs found by users, etc. The Waku team is keen to regularly present new and upcoming development to project team, highlight items that are particularly relevant. If a project wishes to take onboard any new Waku protocol, or decide to extend their product with a new functionality using Waku, the circle can resume from step 1.","s":"5. Ongoing relation","u":"/rules-of-engagement","h":"#5-ongoing-relation","p":601},{"i":614,"t":"TLDR: This issue aims to set the maximum bandwidth in x Mbps that each waku shard should consume so that the maximum amount of people can run a full waku node. It is up to https://github.com/waku-org/research/issues/22 to specify how this maximum will be enforced. Conclusion: Limit to 10 Mbps each waku shard.","s":"Maximum Bandwidth for Global Adoption","u":"/research/research-and-studies/maximum-bandwidth","h":"","p":613},{"i":616,"t":"Waku is designed in a way that everyone should be able to run a full node on an average laptop with a residential Internet connection, at least in one shard. This will enable true decentralization and give power to the users, since they won't need to rely on third parties to send/receive messages. Professional node operators running in data centers, can of course contribute to multiple shards, but we should keep the bandwidth/hardware requirements of single shard rather low. This vision opposes the federated approach, where a few nodes requiring vast amounts of resources (cpu, memory, bandwidth) run in data centres, taking the power from the user. While federated approaches are an improvement from traditional client-server architectures, waku envisions a fully peer-to-peer architecture where anyone should be able to run a node. In order to ensure that anyone can run a node in desktop, there are two main limiting factors: Bandwidth consumption in Mbps CPU/memory resources (mainly limited by RLN proof verification) This issue focuses on i) bandwidth consumption and https://github.com/waku-org/research/issues/30 on ii) CPU/memory resources. Note that on https://github.com/waku-org/research/issues/23 an analysis on the impact on RLN was already made, but wasn't focused on scalability. Said issues do. In https://github.com/waku-org/research/issues/22 we discussed why and how to limit the maximum bandwidth per shard, but we haven't come up with a specific number in Mbps. This issue i) presents data from the available bandwidth at different locations and ii) suggests a maximum bandwidth in Mbps that waku should enforce.","s":"Introduction","u":"/research/research-and-studies/maximum-bandwidth","h":"#introduction","p":613},{"i":618,"t":"The following tables show: Table [1] The Q25, Q75 and average bandwidth (upload/download) in Mbps available on different continents. Raw data is available here and credits to @leobago for the summarized version. Note: The below numbers were rounded to the nearest integer. Table [2] The median global bandwidth (upload/download) in Mbps, taken from speedtest (accessed 12 Oct 2023). Table [3] Download bandwidth requirements in Mbps for Netflix video streaming, source. Table [1] Download (Mbps) Upload (Mbps) Q25 Average Q75 Q25 Average Q75 North-America 58 107 137 38 68 85 South-America 21 54 72 13 33 44 Europe 49 93 119 30 56 72 Asia 23 53 71 15 37 50 Oceania 44 84 108 27 50 63 Africa 12 26 33 7 17 22 Table [2] Median Download (Mbps) Median Upload (Mbps) Global 83 38 Table [3] Video resolution Recommended Bandwidth HD 3 Mbps Full HD 5 Mbps 4K/UHD 15 Mbps","s":"Bandwidth availability and usage","u":"/research/research-and-studies/maximum-bandwidth","h":"#bandwidth-availability-and-usage","p":613},{"i":620,"t":"With the above data, we should be informed to take a decision on the maximum bandwidth that we should enforce per shard. With this number, we will apply the techniques explained in https://github.com/waku-org/research/issues/22 to ensure (with some statistical confidence) that the bandwidth won't exceed that number. The trade-off is clear: We enforce a low bandwidth: more people can run full waku nodes, overall network throughput is less, network decentralization is easier, gives power to the user as its fully sovereign. We don't enforce a low bandwidth: not possible to run full waku nodes in laptops acting as a centralization force, nodes are run by few professional operators in data centers, waku users just use light clients, network throughput can scale way easier, federated approach. So it's about where to draw this line. Points to take into account: Relay contributes to bandwidth the most: Relay is the protocol that mostly contributes to bandwidth usage, and it can't choose to allocate fewer bandwidth resources like other protocols (eg store can choose to provide less resources and it will work). In other words, the network sets the relay bandwidth requirements, and if the node can't meet them, it just wont work. Upload and download bandwidth are the same: Due to how gossipsub works, and hence relay, the bandwidth consumption is symmetric, meaning that upload and download bandwidth is the same. This is because of D and the reciprocity of the connections, meaning that one node upload is another download. Nodes not meeting requirements can use light clients. Note that nodes not meeting the bandwidth requirements can still use waku, but they will have to use light protocols, which are a great alternative, especially on mobile, but with some drawbacks (trust assumptions, less reliability, etc) Waku can't take all the bandwidth: Waku is meant to be used in conjunction with other services, so it shouldn't consume all the existing bandwidth. If Waku consumes x Mbps and someone bandwidth is x Mpbs, the UX won't be good. Compare with existing well-known services: As shown in Table [3], Netflix 4K video streaming takes 15Mbps, so that is an order of magnitude to take into account. Coming up with a number: Lowest average download speed across continents is Africa (26 Mbps) Lowest average upload speed across continents is Africa (17 Mbps) Since in waku the bandwidth consumption is symmetric, we are limited by the lowest (17 Mpbs) However waku should not consume all bandwidth, leaving some room for other applications. We could set 10 Mbps, which is between Full HD video and 4K. With 10Mbps the % of average bandwidth waku will consume is: North-America 9 % South-America 18 % Europe 11 % Asia 18 % Oceania 12 % Africa 38 % Conclusion: Limit to 10 Mbps each waku shard. How? Not trivial, see https://github.com/waku-org/research/issues/22#issuecomment-1727795042 Note: This number is not set in stone and is subject to modifications, but it will most likely stay in the same order of magnitude if changed.","s":"Selecting a maximum bandwidth","u":"/research/research-and-studies/maximum-bandwidth","h":"#selecting-a-maximum-bandwidth","p":613},{"i":623,"t":"The Nim Waku Node, nwaku, has the capability of archiving messages until a certain limit (e.g. 30 days) so that other nodes can synchronize their message history throughout the Store protocol. The nwaku originally used SQLite to archive messages but this has an impact on the node. Nwaku is single-threaded and therefore, any SQLite operation impacts the performance of other protocols, like Relay. Therefore, the Postgres adoption is needed to enhance that. https://github.com/waku-org/nwaku/issues/1888","s":"Introduction","u":"/research/benchmarks/postgres-adoption","h":"#introduction","p":621},{"i":625,"t":"Simply pass the next parameter to nwaku --store-message-db-url=\"postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/postgres Notice that this only makes sense if the nwaku has the Store protocol mounted --store=true (start the nwaku node with --help parameter for more Store options)","s":"How to connect the nwaku to Postgres","u":"/research/benchmarks/postgres-adoption","h":"#how-to-connect-the-nwaku-to-postgres","p":621},{"i":627,"t":"https://github.com/waku-org/nwaku-compose https://github.com/waku-org/test-waku-query","s":"Examples of nwaku using Postgres","u":"/research/benchmarks/postgres-adoption","h":"#examples-of-nwaku-using-postgres","p":621},{"i":629,"t":"The following repository was created as a tool to stress and compare performance between nwaku+Postgres and nwaku+SQLite: https://github.com/waku-org/test-waku-query","s":"Stress tests","u":"/research/benchmarks/postgres-adoption","h":"#stress-tests","p":621},{"i":631,"t":"Maximum insert throughput​ Scenario 1 node subscribed to pubsubtopic ‘x’ and the Store protocol mounted. ‘n’ nodes connected to the “store” node, and publishing messages simultaneously to pubsubtopic ‘x’. All nodes running locally in a Dell Latitude 7640. Each published message is fixed, 1.4 KB: publish_one_client.sh The next script is used to simulate multiple nodes publishing messages: publish_multiple_clients.sh Sought goal Find out the maximum number of concurrent inserts that both SQLite and Postgres could support, and check whether Postgres behaves better than SQLite or not. Conclusion Messages are lost after a certain threshold, and this message loss is due to limitations in the Relay protocol (GossipSub - libp2p.) For example, if we set 30 nodes publishing 300 messages simultaneously, then 8997 rows were stored and not the expected 9000, in both SQLite and Postgres databases. The reason why few messages were lost is because the message rate was higher than the relay protocol can support, and therefore a few messages were not stored. In this example, the test took 38.8’’, and therefore, the node was receiving 232 msgs/sec, which is much more than the normal rate a node will work with, which is ~10 msgs/sec (rate extracted from Grafana’s stats for the status.prod fleet.) As a conclusion, the bottleneck is within the Relay protocol itself and not the underlying databases. Or, in other words, both SQLite and Postgres can support the maximum insert rate a Waku node will operate within normal conditions.","s":"Insert test results","u":"/research/benchmarks/postgres-adoption","h":"#insert-test-results","p":621},{"i":633,"t":"In this case, we are comparing Store performance by means of Rest service. Scenario node_a: one nwaku node with Store and connected to Postgres. node_b: one nwaku node with Store and using SQLite. Both Postgres and SQLite contain +1 million rows. node_c: one nwaku node with REST enabled and acting as a Store client for node_a. node_d: one nwaku node with REST enabled and acting as a Store client for node_b. With jmeter, 10 users make REST Store requests concurrently to each of the “rest” nodes (node_c and node_d.) All nwaku nodes running statusteam/nim-waku:v0.19.0 This is the jmeter project used. Results With this, the node_b brings a higher throughput than the node_a and that indicates that the node that uses SQLite performs better. The following shows the measures taken by jmeter with regard to the REST requests.","s":"Query test results (jmeter)","u":"/research/benchmarks/postgres-adoption","h":"#query-test-results-jmeter","p":621},{"i":635,"t":"In this test suite, only the Store protocol is being analyzed, i.e. without REST. For that, a go-waku node is used, which acts as Store client. On the other hand, we have another go-waku app that publishes random Relay messages periodically. Therefore, this can be considered a more realistic approach. The following diagram shows the topology used: For that, the next apps were used: Waku-publisher. This app can publish Relay messages with different numbers of clients Waku-store-query-generator. This app is based on the Waku-publisher but in this case, it can spawn concurrent go-waku Store clients. That topology is defined in this docker-compose file. Notice that the two nwaku nodes run the very same version, which is compiled locally. Comparing archive SQLite & Postgres performance in nwaku-b6dd6899​ The next results were obtained by running the docker-compose-manual-binaries.yml from test-waku-query-c078075 in the sandbox machine (metal-01.he-eu-hel1.misc.wakudev.status.im.) Scenario 1 Store rate: 1 user generating 1 store-req/sec. Relay rate: 1 user generating 10msg/sec, 10KB each. In this case, we can see that the SQLite performance is better regarding the store requests. The following graph shows how the SQLite node has blocking periods whereas the Postgres always gives a steady rate. Scenario 2 Store rate: 10 users generating 1 store-req/sec. Relay rate: 1 user generating 10msg/sec, 10KB each. In this case, is more evident that the SQLite performs better. Scenario 3 Store rate: 25 users generating 1 store-req/sec. Relay rate: 1 user generating 10msg/sec, 10KB each. In this case, the performance is similar regarding the timings. The store rate is bigger in SQLite and Postgres keeps the same level as in scenario 2. Comparing archive SQLite & Postgres performance in nwaku-b452ed8​ This nwaku commit is after a few Postgres optimizations were applied. The next results were obtained by running the docker-compose-manual-binaries.yml from test-waku-query-c078075 in the sandbox machine (metal-01.he-eu-hel1.misc.wakudev.status.im.) Scenario 1 Store rate 1 user generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 1 req/sec that would be expected without pagination. Relay rate: 1 user generating 10msg/sec, 10KB each. It cannot be appreciated but the average Store time was 11ms. Scenario 2 Store rate: 10 users generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 10 req/sec that would be expected without pagination. Relay rate: 1 user generating 10msg/sec, 10KB each. Scenario 3 Store rate: 25 users generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 25 req/sec that would be expected without pagination. Relay rate: 1 user generating 10msg/sec, 10KB each. Conclusions​ After comparing both systems, SQLite performs much better than Postgres However, a benefit of using Postgres is that it performs asynchronous operations, and therefore doesn’t consume CPU time that would be better invested in Relay for example. Remember that nwaku is single-threaded and chronos performs orchestration among a bunch of async tasks, and therefore it is not a good practice to block the whole nwaku process in a query, as happens with SQLite After applying a few Postgres enhancements, it can be noticed that the use of concurrent Store queries doesn’t go below the 250ms barrier. The reason for that is that most of the time is being consumed in this point. The libpqisBusy() function indicates that the connection is still busy even the queries finished. Notice that we usually have a rate below 1100 req/minute in status.prod fleet (checked November 7, 2023.)","s":"Query test results (only Store protocol)","u":"/research/benchmarks/postgres-adoption","h":"#query-test-results-only-store-protocol","p":621},{"i":637,"t":"This study aims to look for possible issues when having only one single database while several Waku nodes insert or retrieve data from it. The following diagram shows the scenery used for such analysis. There are three nim-waku nodes that are connected to the same database and all of them are trying to write messages to the same PostgreSQL instance. With that, it is very common to see errors like: ERR 2023-11-27 13:18:07.575+00:00 failed to insert message topics=\"waku archive\" tid=2921 file=archive.nim:111 err=\"error in runStmt: error in dbConnQueryPrepared calling waitQueryToFinish: error in query: ERROR: duplicate key value violates unique constraint \\\"messageindex\\\"\\nDETAIL: Key (storedat, id, pubsubtopic)=(1701091087417938405, 479c95bbf74222417abf76c7f9c480a6790e454374dc4f59bbb15ca183ce1abd, /waku/2/default-waku/proto) already exists.\\n The db-postgres-hammer is aimed to stress the database from the select point of view. It performs N concurrent select queries with a certain rate. Results​ The following results were obtained by using the sandbox machine (metal-01.he-eu-hel1.misc.wakudev) and running nim-waku nodes from https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e and using the test-waku-query project from https://github.com/waku-org/test-waku-query/tree/fef29cea182cc744c7940abc6c96d38a68739356 The following shows the results Two nwaku-postgres-additional inserting messages plus 50 db-postgres-hammer making 10 selects per second. Five nwaku-postgres-additional inserting messages plus 50 db-postgres-hammer making 10 selects per second. In this case, the insert time gets more spread because the insert operations are shared amongst five more nodes. The Store query time remains the same on average. Five nwaku-postgres-additional inserting messages plus 100 db-postgres-hammer making 10 selects per second. This case is similar to 2. but stressing more the database.","s":"Multiple nodes & one single database","u":"/research/benchmarks/postgres-adoption","h":"#multiple-nodes--one-single-database","p":621},{"i":640,"t":"Since RLN has been chosen as the spamming protection mechanism for waku, we must understand the practical implications of using it. This issue explains the main differences between relay and rln-relay and gives some benchmarks after running simulations using waku-simulator, in a network with the following characteristics: 100 nwaku nodes, each one with a valid rln membership and publishing a message every 10 seconds to a common topic. rln contract deployed in Ethereum Sepolia 10.000 memberships registered in the contract pure relay (store and light protocols disabled) The main deltas rln vs rln-relay are: New proof field in WakuMessage containing 384 extra bytes. This field must be generated and attached to each message. New validator, that uses proof to Accept or Reject the message. The proof has to be verified. New dependency on a blockchain, Ethereum, or any EVM chain, to keep track of the members allowed to publish. But what are the practical implications of these?","s":"Introduction","u":"/research/research-and-studies/rln-key-benchmarks","h":"#introduction","p":638},{"i":642,"t":"Proof generation is constant-ish. 0.15 second for each proof Proof verification is constant-ish, 0.012 seconds. In a network with 10k nodes and D=6 this would add an overhead delay of 0.06 seconds. Gossipsub scoring drops connections from spammer peers, which acts as the punishment (instead of slashing). Validated in the simulation. Rln doesn't have any impact on memory consumption.","s":"TLDR:","u":"/research/research-and-studies/rln-key-benchmarks","h":"#tldr","p":638},{"i":644,"t":"Seems that proof generation times stay constant no matter the size of the message. In the following simulation it was increased from: 1kB, 10kB, 50kB, 150kB. On average it takes 0.15 seconds to calculate the message proof. This means that when a node wants to send a message, it will need to spend this time generating the proof. It seems very reasonable and it actually acts as a mini proof of work, where a consumer computer won't be able to publish a really high number of messages per second.","s":"Proof generation times","u":"/research/research-and-studies/rln-key-benchmarks","h":"#proof-generation-times","p":638},{"i":646,"t":"On the other hand, rln also adds an overhead in the gossipsub validation process. On average it takes 0.012 seconds to verify the proof. It seems that when we increase the message size, validation time seems to increase a bit, which can be for any other reason besides rln itself (eg deserializing the message might take longer). This number seems reasonable and shouldn't affect that much the average delay of a message. Assuming a d-regular graph, with 10k nodes and D=6, we can have up to log(total_nodes)/log(D)=5 hops. So in the worst case, rln will add a network latency of 0.012*5 = 0.06 seconds","s":"Proof verification times","u":"/research/research-and-studies/rln-key-benchmarks","h":"#proof-verification-times","p":638},{"i":648,"t":"For the initial release of RLN, slashing won't be implemented and it still remains unclear if it will be implemented in the future. Luckily, even if slashing is not implemented rln can be used to detect spam and punish the sender off-chain (instead of slashing an onchain collateral). This is done with gossipsub scoring. In the following simulation, we can see 100 nwaku interconnected nodes, where one of them suddenly starts spamming the network with multiple valid rln messages 3000 messages/minute. Since its rate limited to 1msg/10 seconds, we can see that in almost no time, every node in the network disconnects from the spammer peer (see red node), leaving it with 0 peers, which disincentivise such attacks and without requiring a financial slashing.","s":"Spam protection","u":"/research/research-and-studies/rln-key-benchmarks","h":"#spam-protection","p":638},{"i":650,"t":"Using RLN implies that waku should now piggyback on a blockchain (the case study uses Ethereum Sepolia) and has to stay up to date with the latest events emitted by the rln smart contract. These events are used to locally construct a tree that contains all members allowed to create valid proofs to send messages. Some numbers: A tree with 10k members takes 2Mbytes of space. Negligible. A tree with 10k members takes <4 minutes to synchronize. Assumable since it's done just once. With a block range of 5000 blocks for each request, we would need 520 requests to synchronize 1 year of historical data from the tree. Assumable since most of the free endpoints out there allow 100k/day.","s":"RLN tree sync","u":"/research/research-and-studies/rln-key-benchmarks","h":"#rln-tree-sync","p":638},{"i":652,"t":"Same simulation with 100 nodes was executed with rln and without rln: Memory consumption is almost identical with rln without rln Couldn't capture cpu metrics Minor differences in messages per seconds is due to injection technique, nothing related to rln itself.","s":"Performance relay vs. rln-relay","u":"/research/research-and-studies/rln-key-benchmarks","h":"#performance-relay-vs-rln-relay","p":638},{"i":654,"t":"We take security seriously at Waku and across the Institute of Free Technology and its affiliates. Please report any security incidents via security@free.technology. Please report any discovered vulnerabilities in our bounty programme at HackenProof to help ensure our protocols and software remain secure.","s":"Security","u":"/security","h":"","p":653},{"i":656,"t":"Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy. tip Check out our Learn section, YouTube channel, and Blog to dive into how Waku works behind the scenes!","s":"Introduction to Waku","u":"/","h":"","p":655},{"i":658,"t":"Waku is not a blockchain but a network composed of protocols designed for Web3 communication, operating without the need for gas fees. Waku is not just for messaging applications; it supports the development of complex applications that require secure and private data transmission. Waku is not a long-term data storage network; it focuses on short, ephemeral, real-time messaging.","s":"What isn’t Waku?","u":"/","h":"#what-isnt-waku","p":655},{"i":660,"t":"Chat Messengers: Waku can be used to build private, decentralised chat apps resistant to censorship. Voting and Proposals: Exchange votes on proposals off-chain via Waku to save gas fees, then submit aggregated results to the blockchain. NFT Marketplaces: Use Waku to handle off-chain NFT bids and offers for gas savings, and to integrate social interactions like likes and comments. State Channels: Establish and maintain state channels with Waku, facilitating seamless message exchanges and updates without blockchain interaction. Signature Exchange for Multi-Signature Wallets: Allow multi-signature wallet owners to exchange signatures privately and securely through Waku. Game Mechanics Communication: Implement Waku as a communication layer for decentralised, peer-to-peer gaming, avoiding centralised infrastructure. Layer 2 Coordination (Open Market, Spam Protected Mempool): Broadcast and aggregate Layer 2 transactions via Waku to enhance privacy and scalability, reducing network load. Social Media Platforms: Beyond chat messengers, use Waku for decentralised, censorship-resistant social media platforms like news feeds and multimedia sharing. tip Looking for what to build with Waku? Discover a collection of sample ideas and use cases for inspiration, curated by our community at: https://ideas.waku.org/ and Awesome Waku.","s":"What can Waku be used for?","u":"/","h":"#what-can-waku-be-used-for","p":655},{"i":664,"t":"Waku is a decentralised, permissionless system where anyone can run a node, use the network, and contribute to its support. We recommend following the Run Nwaku with Docker Compose guide and Waku Node Operator Cheatsheet to easily run a node. tip If you encounter issues running your node or require assistance with anything, please visit the #node-help channel on our Discord.","s":"Run a Waku node","u":"/","h":"#run-a-waku-node","p":655},{"i":666,"t":"Waku is implemented in multiple SDKs, allowing it to integrate with different languages and address various use cases efficiently. Description Documentation @waku/sdk JavaScript/TypeScript SDK designed for browser environments JavaScript Waku SDK @waku/react React components and UI adapters designed for seamless integration with @waku/sdk Build React DApps Using @waku/react","s":"Integrate using SDKs","u":"/","h":"#integrate-using-sdks","p":655},{"i":668,"t":"Description Documentation REST API REST API interface provided by nwaku and go-waku to interact with the Waku Network Waku Node REST API Reference @waku/create-app Starter kit to bootstrap your next @waku/sdk project from various example templates Scaffold DApps Using @waku/create-app tip Explore some example apps built using Waku at https://examples.waku.org/ and view a list of projects and workshops from previous hackathons at Awesome Waku.","s":"Other integrations","u":"/","h":"#other-integrations","p":655}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,2.985,1,2.106,2,3.355,3,3.795,4,2.226,5,0.862,6,4.93,7,4.163,8,6.317,9,1.1,10,4.791,11,4.93,12,4.791,13,4.004,14,3.931,15,3.504,16,4.081,17,2.268,18,2.05]],["t/4",[5,0.862,6,6.535,7,5.103,9,1.1,10,4.791,19,5.689,20,3.861,21,4.733,22,2.636,23,3.861,24,3.453,25,4.93,26,5.084,27,5.084,28,5.457]],["t/6",[4,2.979,6,6.956,7,5.571,12,4.378,14,3.592,22,3.355,23,3.529,29,2.868,30,4.988,31,8.039,32,6.85,33,4.157,34,6.85,35,5.455]],["t/8",[0,2.473,4,2.703,6,7.007,7,5.368,9,0.911,13,3.317,22,2.867,23,3.199,36,4.084,37,5.233,38,5.621,39,3.864,40,3.52,41,3.768,42,3.317,43,4.059,44,3.768,45,3.768,46,6.209,47,5.621,48,6.209,49,6.209,50,4.521,51,2.704,52,2.947,53,6.209,54,1.541]],["t/10",[1,1.176,2,1.874,3,2.119,5,0.481,9,0.614,13,3.933,15,1.957,16,4.429,17,2.75,18,1.144,20,3.188,37,3.527,38,3.788,40,2.373,55,3.177,56,2.659,57,4.927,58,3.392,59,5.518,60,0.892,61,2.936,62,0.763,63,2.425,64,2.753,65,1.572,66,2.236,67,3.177,68,2.48,69,1.472,70,2.425,71,5.601,72,1.73,73,3.788,74,6.187,75,4.185,76,4.505,77,6.187,78,3.527,79,1.537,80,3.177,81,2.604,82,2.425,83,3.788,84,3.177,85,5.707,86,3.245,87,3.047,88,2.936,89,4.185,90,4.185,91,4.185,92,4.185,93,3.332,94,2.604,95,1.798,96,2.936,97,3.043,98,3.177,99,4.582,100,3.047,101,3.177,102,2.675,103,4.198,104,2.839,105,4.185,106,3.047,107,3.788,108,1.928,109,4.185,110,3.332,111,0.569,112,1.488]],["t/12",[5,0.918,7,3.344,15,2.815,16,4.35,17,2.89,18,1.646,25,3.96,54,2.225,57,6.361,85,4.224,86,3.158,111,0.819,113,4.57,114,8.116,115,2.858,116,3.568,117,4.045,118,3.747,119,7.232,120,6.021,121,6.021,122,2.052,123,2.858,124,3.049,125,5.451,126,5.451,127,2.967,128,7.988,129,2.949,130,3.849,131,6.021]],["t/14",[15,3.288,16,3.829,26,4.77,73,6.365,85,4.933,86,3.688,99,4.376,114,7.994,117,3.56,119,6.365,126,6.365,129,3.444,132,4.495,133,8.83,134,5.599,135,7.032,136,5.599,137,7.443,138,5.599,139,6.365,140,5.927,141,3.622]],["t/16",[5,0.932,9,0.904,16,4.416,17,2.744,18,1.685,20,4.178,25,4.052,54,2.251,56,2.647,62,1.123,117,4.107,118,3.834,122,2.1,123,2.924,124,3.119,125,5.577,132,3.938,141,3.174,142,8.11,143,4.322,144,5.335,145,7.342,146,6.161,147,4.486,148,6.161,149,6.161,150,4.906,151,4.486,152,5.577,153,4.677,154,2.881]],["t/18",[1,1.718,4,1.816,5,0.703,9,1.41,13,3.266,14,3.206,22,3.177,24,2.816,42,3.266,50,5.876,55,6.125,56,2.627,60,1.303,97,2.527,100,5.876,155,5.153,156,3.329,157,5.308,158,4.021,159,5.308,160,5.153,161,3.805,162,6.113,163,3.805,164,3.149,165,3.044,166,5.153,167,3.329,168,2.35,169,1.98,170,3.542,171,2.902,172,6.113]],["t/20",[5,1.01,9,1.023,22,3.55,24,4.43,42,3.723,54,1.73,63,4.038,65,2.618,173,5.698,174,5.075,175,4.23,176,5.957,177,6.161,178,5.55,179,3.591,180,4.13,181,6.31]],["t/22",[5,0.899,24,3.603,28,3.385,42,3.569,54,1.941,60,0.991,63,2.694,65,2.51,79,1.708,88,3.262,112,1.653,154,2.174,158,3.058,169,2.164,171,3.171,173,4.634,174,3.385,175,2.822,176,4.532,177,4.687,178,5.32,179,2.395,180,2.755,182,2.277,183,1.708,184,1.217,185,3.058,186,3.702,187,2.893,188,3.919,189,2.438,190,3.702,191,4.649,192,2.174,193,3.919,194,2.972,195,3.504,196,2.081,197,3.058,198,4.649,199,4.209,200,4.209,201,2.582,202,2.582,203,3.504,204,2.582,205,4.209,206,5.631,207,3.385,208,3.262,209,4.209,210,4.209,211,3.919,212,4.209,213,2.053,214,6.874,215,4.649,216,2.174,217,5.631,218,4.649]],["t/24",[0,1.853,1,1.307,5,1.13,6,3.059,7,1.606,8,2.438,9,0.981,10,4.272,12,2.973,15,1.352,16,2.532,17,1.408,18,0.791,22,2.575,24,3.079,26,1.962,33,1.755,45,2.823,52,1.373,60,1.244,62,0.848,111,1.2,122,0.986,157,1.902,159,3.059,166,2.438,167,1.575,168,1.112,169,2.372,175,2.823,182,1.417,184,1.558,201,2.583,213,1.277,219,1.277,220,2.618,221,2.303,222,2.618,223,4.686,224,2.278,225,2.63,226,2.539,227,3.059,228,1.676,229,2.438,230,1.464,231,2.196,232,2.662,233,2.485,234,2.815,235,1.999,236,1.477,237,1.755,238,3.116,239,2.973,240,3.263,241,2.029,242,2.973,243,2.618,244,3.531,245,2.812,246,1.755,247,1.417,248,2.029,249,2.637,250,1.645,251,2.485,252,2.278,253,1.899,254,1.522,255,2.196,256,1.755,257,1.517,258,2.756,259,1.8,260,1.332,261,2.196,262,1.8,263,2.106,264,1.517,265,2.106,266,2.303,267,1.464,268,0.91]],["t/26",[9,1.357,20,3.302,21,3.302,22,2.254,24,2.952,51,2.791,56,2.754,98,4.865,144,4.215,150,5.103,151,4.666,228,3.713,249,3.634,255,4.865,269,5.802,270,3.042,271,4.666,272,4.865,273,4.865,274,3.559,275,4.666,276,3.891,277,4.215,278,6.06,279,5.474,280,5.402,281,4.215,282,3.245,283,6.409,284,4.348,285,5.402,286,4.348]],["t/28",[0,2.638,1,2.388,2,2.965,3,3.353,5,0.761,9,0.972,22,2.99,24,3.051,35,5.273,42,3.537,50,4.822,55,6.452,56,2.846,155,5.582,156,3.606,157,4.356,158,4.356,159,6.175,160,5.582,161,4.121,167,3.606,169,2.145,242,5.433,247,3.244,287,5.995,288,5.582,289,6.622]],["t/30",[0,2.23,5,0.993,22,3.039,24,3.504,29,2.343,42,2.99,72,2.314,159,6.098,167,3.048,169,1.813,173,4.508,174,4.076,175,3.397,176,6.289,177,6.504,183,3.174,214,5.774,242,4.862,246,3.397,247,4.233,248,5.337,290,3.174,291,2.742,292,4.718,293,5.597,294,4.718,295,4.718,296,5.597,297,5.597,298,5.597,299,6.412,300,5.597]],["t/32",[1,2.025,5,0.693,9,0.593,11,2.655,29,2.522,54,2.685,65,2.707,71,5.453,82,2.339,99,4.485,111,1.327,112,1.435,130,2.58,159,2.655,168,2.316,169,1.308,183,2.935,201,4.003,213,2.659,232,3.405,242,3.85,246,2.45,257,3.159,291,1.977,301,4.036,302,3.924,303,2.45,304,7.991,305,4.036,306,3.402,307,3.402,308,4.036,309,1.552,310,2.289,311,4.036,312,2.655,313,2.117,314,4.036,315,6.024,316,4.036,317,6.524,318,3.654,319,3.064,320,5.453,321,3.654,322,3.402,323,3.214,324,4.036,325,2.655,326,2.939,327,2.512]],["t/34",[5,0.533,9,0.307,22,0.734,31,1.76,36,1.373,39,2.21,54,2.707,65,2.302,97,1.468,99,1.299,101,2.696,111,0.483,112,1.262,127,0.776,159,3.048,168,1.365,169,0.676,183,2.008,184,1.555,185,2.336,201,1.972,213,0.922,214,1.585,224,1.023,225,1.824,232,1.415,233,1.115,242,1.335,246,1.267,274,1.16,276,0.976,302,1.934,310,2.966,317,3.215,318,1.89,319,1.585,320,1.89,328,1.663,329,3.69,330,1.585,331,2.812,332,2.491,333,4.633,334,1.76,335,3.374,336,2.586,337,3.048,338,3.551,339,3.215,340,1.89,341,2.088,342,1.76,343,4.949,344,1.335,345,2.088,346,1.585,347,2.088,348,2.475,349,2.627,350,2.057,351,2.088,352,1.585,353,1.76,354,1.76,355,2.993,356,1.76,357,2.018,358,1.76,359,1.76,360,1.095,361,1.267,362,1.89,363,1.585,364,1.267,365,7.805,366,5.466,367,2.088,368,2.088,369,3.551,370,2.088,371,1.76,372,2.088,373,2.088,374,2.088,375,2.088,376,2.088,377,3.551,378,2.088,379,2.088,380,2.088,381,2.088,382,2.088,383,4.633,384,2.088,385,2.088,386,0.734,387,1.52,388,1.76,389,2.088,390,1.76,391,4.633,392,1.373,393,2.491,394,3.517,395,6.127,396,1.585,397,2.088,398,2.088,399,2.088,400,4.633,401,2.088,402,2.088,403,2.088,404,3.215,405,2.088,406,1.76,407,5.466,408,6.664,409,1.76,410,4.633,411,5.466,412,3.551,413,2.088,414,2.088,415,2.088,416,1.89,417,1.76,418,3.551,419,3.551,420,1.52,421,2.088]],["t/36",[5,0.682,15,1.85,39,2.462,54,2.777,62,1.081,65,1.486,97,1.635,99,3.693,108,1.823,111,0.807,168,2.737,169,1.282,183,1.453,184,1.545,185,2.602,201,2.197,203,3.112,225,2.335,232,1.576,233,5.071,242,2.529,276,1.85,310,3.382,319,3.003,337,2.602,339,3.581,340,3.581,343,3.581,348,3.17,362,5.372,363,3.003,364,2.401,392,3.903,422,3.956,423,7.12,424,3.581,425,1.635,426,3.956,427,2.776,428,6.006,429,3.335,430,3.335,431,3.335,432,3.15,433,3.335,434,3.581,435,1.723,436,3.956,437,3.956,438,3.956]],["t/38",[5,0.635,54,2.748,65,2.074,101,4.19,108,2.543,111,0.75,168,2.896,169,1.788,183,2.028,184,1.758,201,3.066,226,2.863,234,2.896,242,3.528,258,4.465,310,2.097,319,4.19,329,4.395,334,4.653,349,3.13,364,4.573,439,7.766,440,3.631,441,5.72,442,6.821,443,3.271,444,5.52,445,4.653,446,4.395]],["t/40",[0,1.262,5,0.936,9,0.465,22,1.114,24,1.46,33,1.923,54,2.674,60,1.066,62,0.911,65,1.19,100,2.307,101,2.405,108,1.46,111,1.201,122,1.08,124,1.604,127,1.177,129,1.552,159,2.084,167,1.725,168,1.923,169,1.62,183,1.164,184,1.61,201,1.76,219,2.208,222,2.868,223,1.604,224,1.552,226,1.901,234,1.218,235,2.149,236,2.957,242,3.197,250,1.885,254,1.037,258,1.878,260,1.46,266,2.523,268,0.997,276,1.482,309,1.218,310,2.674,312,2.084,313,1.662,319,2.405,330,4.704,334,2.671,349,2.836,364,3.035,394,2.405,435,1.38,439,4.528,441,3.797,442,4.528,445,2.671,446,2.523,447,6.196,448,2.671,449,2.868,450,2.178,451,5.002,452,3.169,453,3.169,454,3.169,455,2.149,456,1.725,457,2.868,458,2.223,459,1.578,460,2.533,461,2.868,462,2.523,463,2.025,464,2.307,465,1.923,466,2.523,467,3.169,468,3.169,469,3.169,470,2.868,471,1.31]],["t/42",[0,3.102,1,2.188,2,3.487,3,3.943,5,0.895,22,2.739,24,3.588,45,4.727,122,2.654,201,4.326,244,5.912,245,3.755,246,4.727,247,3.815,248,5.464]],["t/44",[5,0.947,22,2.218,24,2.906,112,2.242,154,2.949,173,3.738,176,4.279,177,5.779,182,3.089,183,2.317,201,5.094,202,3.503,244,6.252,246,3.828,247,4.035,248,5.779,260,2.906,275,4.592,276,2.949,299,6.942,425,2.607,448,6.942,472,8.236,473,6.307,474,3.925,475,5.71,476,4.425,477,6.307,478,4.788]],["t/46",[1,1.46,2,2.326,3,2.631,9,1.22,24,2.394,62,0.947,97,2.148,112,1.847,116,3.079,122,2.832,154,2.429,171,2.466,183,1.909,184,0.947,201,2.886,233,2.775,244,3.944,248,6.302,263,3.783,278,5.262,279,5.466,284,4.903,344,3.321,390,4.379,479,5.195,480,4.703,481,2.946,482,5.195,483,5.195,484,5.195,485,5.195,486,3.783,487,5.195,488,4.137,489,4.137,490,4.379,491,2.545,492,3.079,493,4.703,494,4.379,495,4.703,496,5.195,497,3.321,498,5.195,499,6.542,500,3.417,501,4.137,502,5.195,503,3.783,504,3.783,505,5.195,506,4.379,507,2.725,508,5.195]],["t/48",[0,3.537,1,1.993,2,3.176,3,3.592,5,1.021,26,4.813,60,1.512,111,0.965,169,2.298,175,4.305,184,1.293,219,3.132,225,2.792,226,2.696,232,3.537,233,4.743,234,3.726,258,4.204,259,4.415]],["t/50",[9,0.98,15,3.122,17,2.021,62,1.217,99,4.156,153,5.069,169,2.163,175,4.052,184,1.557,226,2.537,234,2.567,250,2.103,258,5.585,259,5.318,325,4.392,327,4.156,509,6.045,510,3.567,511,4.685,512,7.154,513,4.392,514,4.862,515,5.069,516,6.677,517,6.677]],["t/52",[1,1.03,15,2.618,17,1.695,20,1.888,22,1.289,24,1.688,26,3.799,54,2.735,62,0.668,99,5.771,111,0.498,127,1.361,147,2.668,153,4.251,168,2.153,169,1.187,175,2.224,183,2.497,184,1.02,192,1.713,216,1.713,234,2.613,246,2.224,250,0.902,258,5.843,259,2.281,276,1.713,310,2.128,350,3.244,363,2.782,435,3.57,465,2.224,511,2.571,512,6.56,513,2.41,518,3.665,519,2.571,520,3.318,521,2.668,522,5.069,523,3.318,524,2.035,525,1.442,526,1.409,527,4.459,528,3.683,529,5.069,530,5.6,531,3.665,532,3.665,533,3.665,534,3.665,535,3.665,536,3.665,537,3.665,538,2.123,539,3.318,540,3.318,541,2.342]],["t/54",[0,3.061,2,0.992,3,2.451,5,0.919,6,3.184,7,1.231,8,1.868,9,1.35,10,3.631,12,3.094,13,1.184,15,3.865,16,2.635,17,1.719,18,1.021,19,1.682,20,1.142,22,0.779,24,1.021,29,1.563,42,1.184,50,3.524,60,1.211,62,0.882,63,1.284,64,1.458,68,1.313,69,0.779,70,1.284,88,1.555,106,1.613,111,0.862,154,1.036,157,3.737,158,1.458,159,3.184,164,1.142,167,2.033,169,2.055,173,3.367,175,2.266,176,1.503,177,1.555,178,2.974,180,1.313,182,2.371,183,0.814,184,1.549,185,1.458,186,2.974,189,1.162,193,1.868,203,1.162,204,1.231,208,1.555,211,1.868,213,2.137,223,1.891,224,1.829,225,0.872,230,3.89,234,1.861,235,2.08,236,2.014,237,2.266,238,3.035,239,3.094,240,2.62,242,1.416,245,2.334,247,1.829,249,2.744,250,1.891,251,1.995,252,1.085,253,1.524,254,0.725,258,2.868,259,2.324,268,1.522,291,1.085,302,1.207,303,1.345,309,0.852,337,1.458,348,1.184,386,0.779,425,1.544,471,0.916,512,1.682,513,1.458,514,1.613,529,2.006,542,3.148,543,1.765,544,2.216,545,1.313,546,2.719,547,1.555,548,1.379,549,1.682,550,1.765,551,1.682,552,1.868,553,2.719,554,2.216,555,2.216,556,2.216,557,1.085,558,1.184,559,1.458,560,1.256,561,1.184,562,2.006,563,1.868,564,2.216,565,2.719,566,1.682,567,1.379,568,1.765,569,3.381,570,1.021,571,1.682,572,1.868,573,1.184,574,1.765,575,1.458,576,2.006]],["t/56",[0,3.105,4,0.853,5,0.765,7,3.696,9,0.679,14,1.506,15,3.833,18,2.615,29,1.202,30,2.091,36,1.889,50,2.091,51,1.251,52,1.363,59,1.948,70,1.664,72,1.187,111,1.42,115,2.195,118,2.878,122,1.576,136,2.287,157,1.889,180,1.702,182,1.407,207,2.091,221,2.287,223,1.454,224,1.407,230,3.694,250,1.919,251,1.534,252,1.407,253,2.978,254,3.022,268,2.96,277,1.889,291,1.407,302,1.564,309,2.804,329,2.287,386,1.01,425,1.911,460,2.939,464,2.091,557,3.26,560,2.622,561,2.47,577,2.47,578,2.287,579,2.599,580,1.787,581,1.889,582,1.889,583,1.835,584,2.18,585,3.367,586,0.989,587,2.287,588,2.18,589,2.287,590,1.948,591,2.287,592,3.367,593,2.871,594,1.595,595,2.091,596,1.363,597,1.384,598,2.382,599,1.564,600,1.534,601,3.041,602,3.041,603,3.112,604,1.479,605,1.534,606,2.42,607,2.42,608,1.787]],["t/58",[0,2.245,1,2.148,2,2.524,3,2.854,5,0.997,9,1.273,17,2.313,29,2.36,33,3.421,62,1.58,110,4.489,111,1.393,127,2.094,182,2.761,245,3.685,249,3.196,250,2.288,251,4.083,252,3.744,253,3.54,254,1.844,260,2.597,261,4.279,262,3.508,263,4.104,264,2.956,265,4.104,266,4.489,267,2.854,268,1.773,291,2.761,597,2.718]],["t/60",[1,1.83,5,0.967,9,0.956,22,2.958,24,3.001,54,2.53,65,2.447,111,1.143,245,4.491,250,1.603,252,3.191,253,2.659,310,2.475,312,4.284,313,3.416,386,2.291,425,3.477,435,2.837,456,4.58,605,3.48,608,4.054,609,4.57,610,5.897,611,4.743]],["t/62",[4,0.956,5,0.942,15,1.506,16,1.753,17,0.975,18,0.881,22,1.133,23,1.659,29,1.348,40,4.026,54,2.679,57,4.034,59,2.184,60,0.686,65,1.21,100,2.344,108,1.483,111,1.337,117,1.63,122,1.097,123,1.528,124,2.565,134,2.564,165,1.603,168,1.947,245,3.722,250,2.302,251,4.379,254,1.657,260,1.483,268,1.013,310,3.259,435,3.362,443,3.711,456,4.464,596,1.528,601,2.118,603,3.32,612,5.668,613,1.788,614,2.058,615,1.908,616,2.344,617,2.872,618,2.714,619,1.908,620,2.915,621,2.915,622,3.074,623,4.586,624,4.586,625,2.564,626,2.714,627,2.564,628,2.259,629,3.22,630,1.866,631,2.714,632,3.22,633,3.22,634,3.22,635,1.954,636,2.915,637,2.444,638,1.577,639,2.915]],["t/64",[1,1.054,5,0.952,9,0.837,22,1.319,23,2.937,24,1.728,42,2.004,54,2.702,65,2.59,72,1.551,95,1.612,111,1.301,122,1.278,123,1.781,168,1.442,173,3.378,176,3.867,177,3.999,189,1.967,234,1.442,236,1.191,245,3.324,252,4.272,253,3.905,290,2.127,310,2.926,435,2.483,443,4.086,456,3.754,575,2.467,605,2.004,610,3.396,611,2.731,622,3.459,640,7.498,641,5.16,642,3.396,643,4.805,644,3.751,645,3.396,646,6.241,647,4.184,648,2.467,649,5.16,650,3.751,651,3.751,652,3.396,653,3.751]],["t/66",[5,0.798,22,1.726,23,2.528,54,2.741,65,3.027,72,2.028,111,1.191,234,1.886,236,1.559,245,4.224,250,2.275,251,4.304,252,3.401,253,3.289,310,3.062,435,2.137,443,2.908,456,3.781,612,4.442,622,4.214,623,4.442,624,4.442,640,4.442,641,4.442,643,4.136,646,6.285,647,4.89,648,3.228,649,4.442,652,4.442,654,4.136,655,4.907]],["t/68",[5,0.761,17,2.573,22,2.99,24,3.051,54,2.543,65,2.488,111,1.276,168,2.546,209,7.695,235,3.653,250,2.092,257,3.473,310,2.516,312,4.356,313,3.473,435,3.702,456,4.628,656,6.622,657,5.582,658,6.622]],["t/70",[0,3.597,1,2.048,2,3.263,3,3.691,18,2.47,111,0.991,174,5.307,224,3.57,254,2.955,268,2.293,557,4.424,558,3.894,577,3.894,637,5.533,659,5.804,660,5.533,661,6.598,662,3.823]],["t/72",[1,1.976,4,2.088,5,0.808,18,1.923,59,4.77,111,1.201,127,2.612,154,3.288,173,4.167,180,4.167,182,3.444,207,5.12,254,2.889,545,4.167,553,5.12,557,4.325,584,5.337,585,6.43,586,2.421,587,5.599,588,5.337,663,5.927]],["t/74",[18,2.089,277,5.024,284,5.182,455,3.283,460,3.868,481,4.331,557,4.553,565,6.767,664,7.639,665,4.243,666,6.915,667,4.527,668,6.083,669,7.639,670,4.883]],["t/76",[18,1.993,40,4.133,54,2.242,224,4.424,284,4.945,507,3.823,557,4.806,565,7.145,671,7.612,672,5.114,673,7.289,674,6.598,675,5.804,676,6.144,677,3.969]],["t/78",[0,1.304,2,1.465,5,0.824,9,0.48,18,1.959,20,1.686,21,2.643,29,1.37,40,1.856,54,2.28,62,0.596,66,1.748,72,2.121,103,2.22,111,1.122,117,3.204,122,1.115,127,1.906,141,1.686,151,2.383,182,2.513,196,1.465,213,1.445,219,1.445,223,1.657,228,1.896,252,2.513,253,2.094,254,3.006,260,1.508,268,2.596,272,2.484,276,1.53,277,2.153,309,2.754,360,1.716,443,1.94,465,1.986,471,1.353,474,2.037,481,2.909,490,2.759,541,2.092,552,2.759,557,4.227,558,2.741,561,1.748,565,4.608,567,2.037,577,1.748,589,2.606,596,2.436,599,1.782,601,2.153,604,1.686,609,3.6,616,2.383,617,2.909,638,1.603,665,2.85,666,2.963,678,5.131,679,2.963,680,2.296,681,2.963,682,4.645,683,5.039,684,3.273,685,3.273,686,5.131,687,4.325,688,2.963,689,3.273,690,2.963,691,2.759,692,3.273,693,3.273,694,2.606,695,2.484,696,3.273,697,3.273,698,3.273,699,3.273,700,3.273,701,1.603,702,2.963,703,3.273,704,2.484,705,2.963,706,2.963,707,2.963,708,2.759,709,2.606]],["t/80",[1,2.146,45,4.636,69,2.687,157,5.024,168,2.936,184,1.392,223,3.868,225,3.006,226,2.903,227,5.024,229,6.439,230,3.868,231,5.798,282,3.868,710,7.639,711,5.562,712,4.081]],["t/82",[5,0.838,24,3.358,44,4.424,54,2.436,65,2.738,66,3.894,108,3.358,173,4.32,176,4.945,178,5.804,181,6.598,217,7.612,331,4.424,456,3.969,713,7.289,714,7.289,715,9.031,716,6.598]],["t/84",[0,2.345,5,0.905,9,0.864,22,2.071,29,2.465,54,2.448,62,1.073,65,2.212,111,1.38,115,2.795,127,2.187,168,2.263,183,2.891,219,2.599,223,2.981,232,3.135,245,4.563,249,3.338,250,1.449,310,2.237,312,5.177,313,4.127,386,2.071,425,3.253,435,2.564,456,4.827,471,2.434,613,3.27]],["t/86",[5,0.936,9,1.033,22,1.759,54,2.556,56,2.149,65,1.878,97,2.908,122,1.704,127,1.857,169,2.279,183,2.584,184,1.696,225,1.968,226,1.9,238,3.758,239,3.196,241,3.508,310,3.093,335,3.64,336,3.64,348,4.348,349,4.615,350,4.076,525,3.204,526,3.129,573,2.671,596,2.373,600,2.671,604,2.576,717,4.378,718,8.14,719,5,720,5,721,5,722,3.795,723,3.034,724,3.64,725,3.981,726,4.526]],["t/88",[5,0.593,9,0.758,11,3.395,17,2.506,20,2.659,21,2.659,22,1.816,27,4.88,54,2.747,62,1.311,65,1.939,97,3.703,98,3.918,111,0.978,184,1.311,225,2.831,226,1.961,259,3.212,310,1.961,515,3.918,727,4.351,728,7.497,729,5.047,730,4.351,731,3.622,732,3.918,733,3.133,734,3.918,735,5.162,736,5.162,737,4.351,738,5.162,739,4.11,740,5.162,741,5.162,742,4.673,743,5.162]],["t/90",[9,0.753,22,1.804,54,2.333,65,1.927,95,2.204,108,3.299,111,0.697,147,3.734,154,2.398,183,1.884,184,1.504,196,2.296,213,2.264,226,1.949,227,4.711,228,5.444,257,2.69,270,2.435,291,2.512,310,3.136,348,2.74,349,2.908,435,2.234,488,4.084,504,6.009,615,3.039,712,2.74,716,6.483,717,3.192,725,4.084,744,3.479,745,4.149,746,5.128,747,3.734,748,7.162,749,3.893,750,2.398,751,5.128,752,3.373,753,3.598,754,5.215,755,7.162,756,5.128,757,3.373,758,5.128,759,3.734,760,5.128]],["t/92",[0,2.473,5,0.937,24,2.86,54,2.024,65,2.333,127,2.306,173,3.679,183,2.995,184,1.485,185,5.362,214,6.909,219,2.741,247,3.041,276,2.903,310,2.359,337,5.987,353,5.233,354,5.233,355,7.672,356,5.233,357,2.704,358,5.233,359,5.233,360,3.256,361,4.947,542,5.233,647,3.768,761,5.621,762,4.521]],["t/94",[5,0.719,42,3.343,54,2.703,183,2.299,184,1.665,192,3.831,203,3.282,226,2.378,227,4.116,228,3.625,310,3.114,337,4.116,349,3.548,427,4.39,428,4.75,440,4.116,446,4.983,475,5.665,604,3.224,727,5.274,729,4.39,737,5.274,763,5.665,764,5.665,765,4.39,766,3.894,767,5.274]],["t/96",[5,0.642,9,0.536,27,4.597,54,2.74,60,0.778,62,0.665,97,2.801,99,4.218,103,2.475,183,1.34,184,1.843,203,1.913,225,2.987,226,1.386,227,4.458,228,3.233,276,1.706,310,2.575,337,2.399,348,1.949,427,2.559,428,2.769,429,3.075,430,3.075,431,3.075,432,2.905,433,3.075,465,2.214,504,4.063,541,2.332,570,1.681,604,1.879,637,2.769,729,5.326,730,3.075,737,4.704,754,2.656,764,5.052,766,2.27,768,2.656,769,3.075,770,2.905,771,3.302,772,4.724,773,5.712,774,2.656,775,7.591,776,3.648,777,3.648,778,3.648,779,3.648,780,3.648,781,3.648,782,4.236,783,1.913,784,2.332,785,1.681,786,3.075,787,3.648,788,2.475]],["t/98",[0,2.93,1,2.067,5,1.044,12,5.805,13,3.93,14,3.858,22,3.194,24,3.389,68,4.359,69,2.587,164,3.79,169,2.383,221,5.858,548,4.578,789,6.659,790,6.201,791,6.659,792,6.201]],["t/101",[12,6.171,13,5.157,22,2.473,108,3.239,129,3.444,158,5.808,164,3.622,561,5.157,793,7.031,794,5.599,795,6.365,796,7.031,797,5.12,798,4.267,799,7.031,800,6.703,801,4.933,802,5.337]],["t/103",[18,2.151,22,2.766,60,1.677,163,4.895,168,3.023,265,5.727,282,3.982,762,5.727,803,5.518,804,3.38,805,6.629,806,6.629,807,7.12,808,7.865]],["t/105",[1,2.167,12,4.93,13,4.994,22,2.713,42,4.12,154,3.606,158,5.073,195,4.045,386,2.713,809,5.073,810,6.501,811,7.713,812,6.982,813,7.713,814,6.501]],["t/107",[5,0.714,12,6.178,13,4.862,16,3.381,22,2.867,37,5.233,56,2.668,61,4.356,68,3.679,122,2.116,166,5.233,169,2.641,175,3.768,196,2.78,250,2.006,252,3.041,253,3.328,282,3.144,386,2.867,425,2.566,547,4.356,597,2.993,600,3.317,619,3.679,815,5.621,816,5.621,817,5.621,818,4.521,819,5.621,820,5.621,821,4.713]],["t/109",[5,0.862,12,4.791,14,3.931,18,2.05,22,2.636,69,2.636,182,3.671,254,2.452,471,3.098,557,3.671,558,4.004,559,4.93,560,4.25,561,4.004,594,4.163,800,5.689,822,3.931,823,5.084,824,5.689]],["t/111",[5,0.854,9,1.09,12,5.839,18,2.03,24,3.421,44,4.506,62,1.353,160,6.258,169,2.405,192,3.472,274,4.124,282,3.76,507,3.894,670,4.746,774,5.406,825,3.76,826,6.258,827,7.425,828,7.425]],["t/113",[0,2.278,1,1.607,2,2.56,3,2.895,5,1.075,9,1.282,17,1.731,23,2.946,24,2.634,60,1.219,62,1.042,81,3.559,111,1.049,127,2.124,164,2.946,165,2.847,184,1.592,203,4.047,238,5.495,239,3.655,240,4.012,241,4.012,386,2.011,425,3.611,500,3.761,551,4.341,772,3.559,783,2.999,785,2.634,797,4.163,798,3.47,829,4.341,830,4.341,831,5.176,832,4.553]],["t/115",[5,0.838,24,4.16,42,3.894,72,3.013,167,3.969,173,5.352,174,5.307,175,4.424,176,6.126,177,6.336,238,5.242,241,6.884,833,7.612]],["t/117",[5,0.743,43,4.167,54,2.618,65,2.429,97,2.177,122,1.153,141,1.743,168,1.301,183,2.68,184,1.834,192,1.582,195,1.775,203,1.775,225,2.544,226,2.457,230,1.714,232,1.348,233,1.808,234,1.301,235,1.454,236,1.075,238,4.222,239,3.366,241,4.536,250,0.833,257,1.775,258,2.006,260,1.559,270,2.5,310,2.457,335,3.835,336,2.464,348,3.454,349,3.666,350,3.051,352,2.569,425,1.399,435,2.816,455,1.454,463,3.366,521,2.464,525,1.332,526,1.301,527,2.695,528,3.464,549,7.045,573,2.813,575,2.226,598,1.743,600,1.808,766,2.106,804,2.263,834,2.226,835,5.853,836,5.449,837,4.194,838,4.768,839,3.064,840,2.853,841,2.464,842,2.695,843,3.064,844,1.88]],["t/119",[1,0.87,5,0.702,43,4.603,54,2.609,58,1.426,65,2.292,97,1.279,143,2.171,168,1.19,183,2.551,184,1.798,192,1.447,203,1.623,225,2.733,226,2.319,230,1.567,232,1.233,233,1.653,234,1.19,235,2.11,236,0.983,238,4.046,239,3.138,241,4.281,250,0.762,258,1.834,260,1.426,270,2.896,310,2.639,335,3.574,336,2.253,348,3.259,349,3.46,350,2.844,352,2.349,425,1.279,435,2.657,463,3.138,525,1.932,526,1.887,527,2.464,528,3.229,548,1.926,550,6.417,570,1.426,573,1.653,575,2.036,598,1.594,665,4.206,724,2.253,725,2.464,766,3.055,804,2.11,837,3.909,840,2.609,841,2.253,842,2.464,843,2.802,845,4.046,846,5.143,847,4.444,848,2.802,849,4.444,850,5.524,851,3.095,852,4.444,853,2.802]],["t/121",[5,0.594,21,0.988,33,1.163,39,1.193,43,4.31,54,2.683,65,2.187,72,0.792,79,0.704,97,0.792,122,1.125,127,0.712,132,3.301,167,1.044,168,1.269,169,0.621,183,1.597,184,1.814,203,1.731,225,0.754,226,1.963,230,0.971,232,0.764,233,1.024,234,0.737,238,4.173,240,6.074,241,4.085,270,2.063,310,2.86,335,3.761,348,3.11,350,3.686,425,1.364,435,2.536,460,0.971,463,2.11,525,1.299,526,1.269,528,3.83,549,3.921,550,4.113,567,1.193,594,2.414,598,0.988,613,1.065,665,3.534,701,0.939,724,1.396,765,1.345,766,2.054,768,4.633,772,1.193,804,1.418,807,2.988,836,2.782,837,1.527,838,2.988,839,2.988,842,1.527,845,3.11,846,4.353,847,3.935,848,1.735,850,2.988,852,1.735,854,1.527,855,1.527,856,1.616,857,5.363,858,2.782,859,1.917,860,1.917,861,1.917,862,1.917,863,5.165,864,3.301,865,3.301,866,2.316,867,4.347,868,1.917,869,1.917,870,1.917,871,1.917,872,1.917,873,1.917,874,1.917,875,1.917,876,2.403,877,4.347,878,1.917,879,2.11,880,1.345,881,1.917,882,2.628,883,3.301,884,1.917,885,1.917,886,1.527,887,1.735,888,1.735,889,1.917,890,3.301,891,1.917]],["t/123",[1,1.152,5,0.926,24,1.888,26,2.78,40,2.324,41,3.698,43,4.777,54,2.513,58,1.888,65,1.54,72,1.694,88,2.876,108,1.888,122,2.479,129,2.008,169,1.974,184,1.11,189,3.814,219,2.69,235,1.761,236,1.935,238,3.885,239,2.62,240,4.275,270,2.892,310,3.427,425,1.694,463,2.62,465,2.487,466,3.264,541,2.62,549,4.625,550,3.264,580,2.551,701,2.008,723,2.487,770,3.264,804,1.761,833,3.455,835,3.71,836,3.455,845,2.189,846,3.455,849,3.71,892,4.099,893,4.099,894,3.71,895,3.71,896,4.099,897,4.099,898,3.455,899,7.272,900,4.099,901,4.099,902,4.099,903,4.099,904,4.099,905,4.099,906,4.099,907,4.099,908,4.099,909,4.099,910,4.099,911,4.099,912,3.264,913,4.099]],["t/125",[0,2.532,1,1.786,2,2.846,3,3.219,18,2.667,56,2.732,72,2.628,111,0.864,127,2.362,141,3.275,165,3.165,202,3.531,224,4.056,229,5.359,275,4.629,281,4.182,331,3.858,455,2.732,460,3.219,486,4.629,581,4.182,582,4.182,583,4.064,584,4.826,585,4.629,635,3.858,659,5.062,670,4.064,711,4.629,914,5.062,915,6.357,916,5.359,917,5.755,918,5.359]],["t/127",[5,0.484,18,1.15,25,4.086,54,2.159,76,5.377,108,1.938,165,3.093,173,4.376,183,1.545,216,1.967,224,3.043,583,2.689,672,6.103,677,2.291,683,3.35,722,3.193,804,1.808,825,2.13,914,3.35,916,3.546,917,3.808,919,3.808,920,3.546,921,4.207,922,4.207,923,6.212,924,5.623,925,4.207,926,4.207,927,4.207,928,4.207,929,4.207,930,7.875,931,4.207,932,3.063,933,4.207,934,4.207,935,5.88,936,6.224,937,7.385,938,7.385,939,7.385,940,7.385,941,4.207,942,4.207,943,4.207,944,6.212,945,4.207,946,6.212,947,6.212,948,5.623,949,4.207,950,4.207,951,4.207,952,4.207,953,4.207,954,4.207,955,2.618,956,4.207,957,6.212,958,4.207,959,4.207,960,4.207,961,4.207]],["t/129",[5,0.808,15,3.288,18,1.923,202,3.905,260,3.239,274,3.905,284,4.77,331,4.267,386,2.473,455,3.022,507,3.688,583,4.495,670,4.495,671,5.927,672,6.195,675,5.599,676,5.927,679,7.994,962,5.927,963,5.599,964,7.031,965,6.365,966,7.031,967,7.031]],["t/131",[18,1.975,161,4.495,224,3.538,254,2.363,274,5.678,290,4.095,490,6.088,548,4.495,582,4.751,672,6.3,674,8.129,677,5.567,750,3.377,968,5.752,969,7.223]],["t/133",[0,2.512,18,2.759,21,3.249,54,2.045,111,1.12,118,3.925,183,2.317,219,2.785,223,3.194,224,3.089,254,3.301,268,2.591,299,5.316,309,2.425,386,2.218,425,2.607,460,3.194,471,2.607,557,4.035,558,3.369,577,3.369,582,4.149,590,4.279,662,3.308,968,5.022,970,4.319]],["t/135",[0,2.877,5,0.83,9,1.06,18,2.456,111,0.982,116,5.322,122,2.462,196,3.234,219,3.189,223,3.657,254,2.363,268,2.824,331,4.383,465,4.383,541,4.617,582,4.751,583,4.617,596,3.429,609,5.067,677,3.933]],["t/137",[0,3.441,1,1.908,2,3.04,3,4.374,5,1.092,22,3.038,24,3.129,29,2.843,60,1.842,111,0.923,173,4.025,184,1.574,213,2.998,219,2.998,225,2.673,226,2.581,232,3.441,233,3.628,234,2.611,247,3.327,291,3.327,762,4.945]],["t/139",[0,1.667,5,0.998,9,0.908,22,1.472,29,1.752,54,2.604,62,1.128,64,2.753,65,1.572,108,1.928,111,1.363,115,1.987,127,1.555,168,2.379,169,1.356,182,3.031,183,2.704,184,0.763,213,1.848,219,1.848,223,2.119,232,2.465,245,3.921,249,2.373,250,1.03,254,1.369,268,1.316,310,2.351,312,4.842,313,3.861,350,2.425,357,2.695,386,2.176,393,2.936,425,2.558,435,3.542,456,4.429,471,1.73,515,4.697,613,2.324,730,3.527,971,3.788,972,4.185,973,2.839,974,3.955,975,3.081,976,3.527,977,3.527,978,2.604,979,3.788]],["t/141",[5,0.774,54,2.556,62,1.227,72,2.784,111,1.168,183,2.474,247,3.299,251,4.59,268,2.118,310,2.559,312,4.429,313,3.532,357,3.742,360,3.532,392,4.429,435,2.933,455,2.894,456,3.667,647,4.087,974,4.304,975,4.711,978,4.191]],["t/143",[4,1.888,5,0.731,9,0.933,17,2.787,22,2.236,54,2.421,60,2.079,62,1.158,65,2.388,79,2.335,110,5.062,111,0.864,168,2.444,250,2.4,435,3.606,455,2.732,459,3.165,613,3.531,657,6.978,980,8.335,981,5.062,982,6.357,983,6.357]],["t/145",[5,0.419,9,0.536,11,2.399,22,1.283,54,2.647,56,1.568,62,1.383,65,1.37,79,2.489,97,2.307,122,1.243,127,1.355,169,1.808,183,2.788,184,1.636,196,1.633,225,1.436,226,1.386,232,1.453,236,2.152,250,0.898,268,1.755,310,3.411,313,1.913,335,5.527,336,2.656,348,4.795,349,4.891,350,4.998,352,4.236,357,1.589,360,1.913,459,1.816,525,2.987,526,2.918,547,3.915,573,1.949,596,1.732,600,1.949,604,1.879,613,3.099,647,2.214,717,3.473,723,2.214,724,2.656,725,2.905,726,3.302,832,2.905,974,2.332,975,1.816,978,4.218,984,3.302,985,5.052,986,3.786]],["t/147",[0,2.417,5,0.923,24,2.795,54,1.993,65,2.279,86,3.182,127,2.254,173,3.595,183,2.949,184,1.64,185,5.281,214,6.095,219,2.679,247,2.972,276,2.837,310,2.305,337,5.919,353,5.114,354,5.114,355,7.585,356,5.114,357,2.642,358,5.114,359,5.114,360,3.182,361,4.872,542,5.114,647,3.682,761,5.492,762,4.417,987,6.067,988,4.116]],["t/149",[5,1.069,9,0.828,54,2.588,60,1.202,62,1.027,168,2.167,183,2.808,184,1.826,203,2.956,225,3.008,232,3.044,233,4.083,276,3.574,310,2.904,337,3.708,427,5.362,428,4.279,429,4.751,430,4.751,431,4.751,432,4.489,433,4.751,435,2.455,766,3.508,768,4.104,769,4.751,770,4.489,771,6.919,783,2.956,840,4.751,989,5.637]],["t/151",[5,0.848,9,0.508,15,1.617,26,2.346,54,2.664,60,1.142,62,1.345,79,1.27,99,4.079,122,1.178,129,1.694,168,2.837,169,1.12,183,2.933,184,1.539,192,2.504,196,1.548,203,1.813,219,1.527,226,2.49,232,2.61,233,1.847,234,3.069,258,4.731,268,1.684,276,1.617,278,2.518,310,3.034,350,3.103,357,1.506,360,1.813,364,2.098,394,2.625,435,3.214,441,2.625,445,2.914,446,2.753,465,2.098,466,2.753,515,2.625,520,3.13,521,2.518,522,3.13,523,3.13,524,2.974,525,2.579,526,2.519,527,2.753,528,4.854,541,2.21,613,1.92,647,2.098,765,2.426,772,2.152,783,1.813,832,2.753,974,2.21,975,1.722,978,2.152,985,3.13,986,3.633,990,3.458,991,5.355,992,2.753,993,3.458,994,3.458,995,3.458,996,3.458]],["t/153",[5,0.714,9,0.911,14,4.275,30,5.936,51,2.704,56,2.668,66,3.317,111,0.844,112,2.207,118,5.073,127,2.306,136,4.944,156,3.381,189,3.256,267,3.144,268,3.04,302,4.439,309,3.134,386,2.184,425,3.37,590,5.53,591,4.944,733,3.768,750,2.903,822,3.256,997,4.713,998,4.521,999,3.969,1000,6.491,1001,4.212]],["t/155",[1,2.363,5,0.749,95,3.614,111,1.143,118,5.234,189,4.411,254,2.752,268,2.645,309,3.581,425,2.692,459,3.243,557,4.12,565,4.743,582,4.284,590,5.706,619,4.984,668,5.187,789,5.897,970,3.416,1000,5.187,1002,4.944,1003,8.41]],["t/157",[5,1.012,14,4.087,29,2.429,30,6.407,95,2.493,111,1.196,117,2.937,118,4.85,127,2.155,189,4.087,213,2.561,254,2.55,268,2.959,309,3.383,346,5.916,425,2.398,557,3.817,582,3.816,590,3.936,619,3.438,668,4.62,866,4.07,968,4.62,970,3.042,998,4.224,999,3.708,1000,4.62,1004,5.801,1005,5.801,1006,5.801,1007,7.793,1008,3.159]],["t/159",[5,0.908,6,3.113,7,3.758,14,4.52,30,6.275,54,2.354,63,2.742,111,0.643,112,1.682,117,2.396,118,2.945,127,1.758,189,2.482,254,1.548,268,3.243,302,5.534,309,2.601,346,3.592,425,1.956,459,3.369,526,1.819,557,3.314,590,3.21,591,5.388,619,2.804,630,2.742,668,3.768,970,3.548,986,5.358,998,3.446,999,3.025,1000,3.768,1009,3.025,1010,4.732,1011,3.446,1012,3.446,1013,3.113,1014,4.732,1015,3.592,1016,4.732,1017,6.766,1018,3.21]],["t/161",[0,2.069,4,2.146,5,0.597,17,1.572,18,1.421,21,3.723,23,2.677,43,2.587,51,2.263,60,1.541,79,1.909,111,1.221,112,1.847,117,2.631,184,1.514,219,2.294,236,2.295,237,3.153,250,1.279,254,1.7,260,2.394,268,2.825,270,2.466,276,2.429,309,3.453,386,3.321,440,3.417,450,2.263,458,3.645,459,2.587,460,2.631,464,3.783,524,2.886,526,1.997,586,2.489,604,2.677,619,3.079,662,2.725,804,2.233,968,4.137,970,2.725,1011,3.783,1012,3.783,1019,4.703,1020,3.783,1021,3.645]],["t/163",[0,3.133,1,2.21,2,3.521,3,3.982,5,0.904,60,1.677,111,1.069,183,2.889,184,1.433,232,3.133,234,3.023,235,3.38,236,2.498,237,4.773]],["t/165",[5,0.788,9,1.006,22,2.409,54,2.569,62,1.248,65,2.573,111,1.297,115,3.252,168,2.633,183,3.191,213,3.024,232,3.46,310,2.603,312,4.506,313,3.592,435,3.783,456,5.193,971,6.201]],["t/167",[5,1.078,17,2.158,22,1.792,54,2.526,60,1.086,62,1.299,65,1.914,111,1.356,124,2.58,183,1.872,236,3.232,250,2.391,254,1.667,281,3.352,310,1.936,312,3.352,313,2.672,425,2.106,435,3.105,450,2.219,455,2.19,456,2.775,457,4.613,458,3.575,459,3.55,460,2.58,461,4.613,462,4.058,463,3.257,657,4.295,980,6.454,981,4.058,1022,5.096,1023,5.096,1024,4.295]],["t/169",[22,2.369,54,2.614,65,2.53,183,3.156,184,1.724,234,2.589,235,2.894,236,2.139,310,3.265,336,4.903,349,5.365,350,3.901,352,5.112,525,3.382,526,3.303,717,5.347,984,6.096]],["t/171",[1,2.067,22,2.587,72,3.041,111,1.235,168,2.828,184,1.34,192,3.44,235,3.161,236,2.885,237,4.464,450,3.204,750,3.44,1025,6.659,1026,6.659,1027,5.858,1028,3.858,1029,6.201,1030,4.702,1031,7.356]],["t/173",[1,1.405,54,2.463,111,0.68,127,1.857,168,3.579,169,1.62,183,1.837,184,1.696,192,3.289,234,1.922,235,3.023,236,2.234,239,3.196,250,1.23,290,2.835,309,3.129,310,1.9,349,3.989,364,3.034,425,2.908,435,2.178,441,3.795,443,2.963,450,3.847,459,2.489,478,3.795,525,1.968,526,1.922,528,6.351,598,2.576,613,2.777,765,3.508,841,3.64,999,3.196,1025,4.526,1030,3.196,1032,5,1033,5,1034,5,1035,3.392,1036,4.526,1037,5,1038,4.526]],["t/175",[1,1.299,54,2.629,111,0.628,127,1.717,168,2.557,169,1.497,183,1.698,184,1.767,192,3.111,234,1.777,235,2.859,236,2.113,239,2.955,270,2.194,290,2.621,309,2.996,310,3.24,349,3.772,363,3.509,364,2.805,425,1.911,435,3.395,441,3.509,443,2.739,450,3.395,459,2.301,471,1.911,478,3.509,525,1.819,526,1.777,598,2.381,613,2.567,631,3.896,683,5.298,783,2.424,830,3.509,1026,4.184,1030,2.955,1035,3.136,1036,4.184,1039,4.622,1040,3.366,1041,5.608,1042,3.896,1043,4.622,1044,4.184,1045,4.622,1046,4.622,1047,4.622,1048,4.622,1049,4.184]],["t/178",[22,1.928,54,2.685,65,2.059,184,1.367,235,3.673,236,1.741,250,1.349,290,5.211,309,3.533,310,3.248,386,1.928,396,4.161,435,2.387,450,2.387,459,2.729,528,3.606,543,4.365,841,3.991,1030,5.464,1038,6.789,1041,4.621,1042,4.621,1049,6.789,1050,9.19,1051,3.991,1052,6.789,1053,5.482,1054,5.482]],["t/180",[9,0.596,22,1.427,44,2.462,54,2.687,65,1.524,122,1.383,123,1.926,127,1.507,168,1.56,183,2.221,184,1.696,213,2.67,235,3.999,246,3.67,290,4.098,309,2.324,310,3.044,313,3.791,357,1.767,364,4.387,371,5.097,396,3.08,435,3.148,450,2.633,459,2.02,510,2.167,515,3.08,519,2.846,528,5.269,765,2.846,841,4.403,1030,5.949,1055,8.425,1056,2.954,1057,4.057,1058,2.593,1059,4.057,1060,4.057,1061,4.057,1062,4.057,1063,4.057,1064,2.846,1065,3.23,1066,3.08,1067,2.846]],["t/182",[5,0.731,54,2.545,60,0.926,111,0.591,122,2.168,123,3.019,127,1.614,129,2.128,184,1.734,213,1.918,219,1.918,232,1.731,234,1.67,235,3.957,236,2.63,237,2.637,250,1.069,276,2.974,278,3.164,309,3.388,310,3.147,394,3.298,435,1.892,450,2.77,459,2.163,465,2.637,466,3.46,528,2.858,541,2.777,800,3.298,841,3.164,1041,3.662,1042,3.662,1052,3.933,1055,3.933,1068,7.524,1069,2.534,1070,5.361,1071,3.298,1072,6.36,1073,6.36,1074,5.361,1075,6.36,1076,4.345,1077,3.46,1078,4.345,1079,3.46,1080,2.279,1081,3.933,1082,3.298,1083,4.345,1084,4.345]],["t/184",[4,1.919,5,0.743,9,0.948,18,2.288,60,1.377,62,1.177,97,2.671,111,1.334,112,2.297,115,3.067,184,1.177,225,2.543,226,2.455,236,2.052,254,2.114,264,3.388,268,2.032,557,3.165,577,4.469,586,2.225,637,4.904,660,4.904,661,5.849,759,4.704,898,5.446,1013,4.25,1085,6.461,1086,2.705,1087,6.461,1088,5.446,1089,5.446]],["t/186",[9,1.166,15,3.714,111,1.294,115,3.771,223,4.022,230,4.022,254,2.599,260,3.66,264,4.166,660,6.03,1090,7.191,1091,6.03]],["t/188",[4,1.919,18,1.767,59,4.383,76,4.704,111,1.137,127,2.4,182,3.165,207,4.704,254,2.737,557,4.098,577,3.451,584,4.904,585,6.092,586,2.225,587,5.145,588,4.904,672,4.533,821,4.904,912,5.145,962,5.446,1086,2.705,1092,5.503,1093,7.043,1094,4.704,1095,4.904,1096,6.461,1097,5.446,1098,3.217,1099,4.533]],["t/190",[18,2.286,507,4.385,577,5.24,671,7.047,672,5.866,675,6.658,676,7.047]],["t/192",[1,1.758,5,0.719,51,3.569,129,3.065,154,2.926,155,5.274,182,3.065,192,2.926,216,2.926,248,4.39,268,1.968,284,4.245,302,4.975,557,3.065,573,3.343,577,3.343,672,4.39,677,3.407,1100,4.983,1101,10.062,1102,6.257,1103,9.694,1104,5.665,1105,6.257,1106,5.274,1107,6.257,1108,6.257,1109,6.257,1110,5.665,1111,6.257]],["t/194",[3,2.959,9,0.858,18,1.598,43,2.91,62,1.427,69,2.754,79,2.147,104,3.964,108,2.692,111,0.795,118,3.637,141,3.011,179,3.011,184,1.609,225,3.082,250,1.438,254,1.912,260,2.692,281,3.844,302,3.182,557,2.863,586,2.697,845,3.122,1002,4.436,1086,3.279,1099,6.197,1112,5.29,1113,4.1,1114,3.065,1115,4.1,1116,3.717,1117,5.29,1118,5.494,1119,5.29,1120,5.844,1121,5.844,1122,3.964,1123,5.29]],["t/196",[7,4.746,18,2.577,36,4.392,111,1.162,112,2.374,118,4.156,184,1.217,192,3.122,236,2.121,254,2.185,291,3.271,557,4.186,577,4.565,589,5.317,667,3.957,753,4.685,1013,4.392,1086,2.796,1088,5.628,1099,4.685,1124,6.677,1125,5.069,1126,4.862,1127,6.045,1128,4.392,1129,6.677]],["t/198",[29,2.997,36,4.708,58,3.298,84,5.433,111,0.973,117,3.624,123,3.398,141,3.687,144,4.708,154,3.347,260,3.298,277,4.708,291,3.506,660,5.433,708,6.033,723,4.344,1013,4.708,1069,2.851,1088,7.527,1097,6.033,1130,7.158,1131,6.033,1132,4.708]],["t/200",[0,1.584,1,1.117,4,1.181,5,0.685,9,0.584,18,2.323,20,2.048,21,2.048,54,2.36,62,1.085,66,3.182,72,1.643,97,1.643,103,2.697,111,1.212,115,1.887,117,2.013,122,1.355,127,1.477,151,2.895,184,1.085,196,1.78,202,2.208,203,3.124,213,1.755,219,1.755,223,2.013,225,1.565,226,1.511,228,2.303,235,1.709,236,1.263,254,1.301,257,2.085,260,1.832,268,2.246,272,3.018,277,2.615,348,2.124,350,4.138,450,1.732,465,2.413,481,4.049,524,2.208,525,1.565,541,2.541,557,1.948,560,2.254,561,2.124,577,2.124,596,1.887,608,4.936,709,3.166,769,3.351,772,2.474,785,1.832,935,6.316,1035,2.697,1086,1.665,1089,3.351,1133,3.351,1134,3.976,1135,3.599,1136,5.956,1137,3.976,1138,5.02,1139,3.166,1140,5.392,1141,3.976,1142,3.166,1143,2.474,1144,3.976,1145,3.976,1146,3.166,1147,3.976,1148,3.976,1149,3.976]],["t/202",[44,5.021,51,3.603,52,3.928,111,1.125,268,2.602,309,3.181,386,2.91,388,6.974,460,4.189]],["t/204",[5,0.801,43,3.47,51,3.036,52,3.309,86,3.655,95,2.995,184,1.27,268,2.192,302,4.782,386,2.451,590,4.728,591,5.55,613,3.871,665,3.871,680,4.89,822,3.655,975,4.372,986,4.728,998,5.075,1098,3.47,1126,5.075,1150,6.97,1151,6.97,1152,6.97,1153,4.338]],["t/206",[6,4.392,7,5.519,29,2.796,51,2.908,52,3.17,56,3.672,95,2.87,99,4.156,127,2.48,189,4.482,192,3.122,211,5.628,386,2.349,409,5.628,459,3.325,1009,6.025,1154,6.677,1155,6.677,1156,4.53,1157,6.677,1158,6.677,1159,6.677,1160,6.045,1161,5.628,1162,6.677]],["t/208",[4,1.629,5,0.768,17,2.27,18,0.975,23,2.825,42,1.905,43,1.776,51,1.553,52,1.693,60,1.169,62,0.999,79,1.31,95,1.532,111,1.02,117,3.798,122,1.215,124,2.777,196,1.597,234,1.371,236,2.122,250,2.104,253,1.456,254,1.167,259,2.219,267,1.806,361,4.055,386,1.254,392,3.607,425,1.474,459,1.776,586,2.301,603,3.124,604,3.442,619,3.25,630,3.177,648,2.346,665,1.981,680,2.502,691,3.006,702,6.049,712,2.93,733,2.164,745,2.066,754,4.865,782,2.707,788,2.419,845,1.905,1019,3.228,1122,2.419,1153,2.219,1163,5.484,1164,3.228,1165,3.006,1166,3.006,1167,2.84,1168,3.566,1169,3.228,1170,5.484,1171,3.228,1172,3.006,1173,3.566,1174,3.566,1175,3.566,1176,4.965,1177,5.484,1178,4.965,1179,3.006,1180,3.006,1181,5.632,1182,2.84,1183,3.328,1184,3.789,1185,4.965,1186,5.484,1187,3.566,1188,2.707,1189,3.566,1190,3.228,1191,3.566,1192,3.228,1193,3.006,1194,2.597,1195,3.566,1196,4.367]],["t/210",[4,1.873,19,4.788,51,2.747,52,2.994,94,5.126,95,4.335,124,4.17,252,4.763,313,3.308,386,2.218,450,2.747,602,4.149,603,2.949,617,3.576,638,4.035,665,3.503,680,4.425,1153,3.925,1197,8.236,1198,6.942,1199,6.307,1200,6.942,1201,6.307,1202,5.316,1203,5.316,1204,5.71]],["t/212",[4,2.228,5,0.729,9,0.388,16,1.439,17,1.308,43,3.735,51,1.151,52,1.254,54,0.656,60,1.169,62,0.788,95,1.136,106,1.924,124,1.338,158,1.738,168,1.016,175,1.604,184,0.482,227,2.843,238,1.412,250,1.35,254,1.414,313,1.386,322,2.227,361,2.623,371,3.644,386,2.229,392,1.738,481,1.498,486,3.994,521,1.924,524,3.046,525,2.494,526,2.884,543,2.104,548,2.69,586,3.479,598,1.361,600,2.309,603,2.963,630,4.346,635,1.604,680,4.446,706,2.392,711,1.924,712,1.412,724,1.924,733,1.604,754,3.147,804,1.858,845,2.309,912,4.368,975,3.735,977,2.227,1015,3.281,1086,4.122,1092,2.843,1097,3.644,1098,1.316,1099,3.033,1110,2.392,1112,2.392,1113,3.033,1116,1.254,1153,3.944,1167,3.442,1196,2.104,1205,5.462,1206,1.468,1207,1.566,1208,4.323,1209,3.913,1210,2.392,1211,4.323,1212,2.643,1213,3.147,1214,4.323,1215,4.323,1216,2.932,1217,2.104,1218,2.104,1219,2.643,1220,1.338,1221,2.392,1222,1.738,1223,2.643,1224,2.104,1225,1.498,1226,2.392,1227,4.323,1228,2.643,1229,2.763,1230,2.392,1231,2.643,1232,2.643]],["t/214",[4,2.099,9,0.739,17,1.523,29,2.106,41,4.289,51,2.191,52,2.388,56,2.162,60,1.073,95,2.162,184,1.7,204,2.794,213,3.12,236,3.156,250,1.238,313,2.639,386,1.77,450,2.191,575,4.648,630,4.094,1069,2.004,1125,6.724,1172,4.241,1178,4.555,1194,3.663,1196,4.006,1233,4.555,1234,4.555,1235,8.447,1236,5.807,1237,4.555,1238,5.031,1239,5.031,1240,5.031,1241,3.309,1242,6.504,1243,4.555,1244,7.066,1245,3.819,1246,4.555,1247,5.145]],["t/216",[9,0.877,51,2.603,52,2.837,60,1.274,95,2.568,113,4.536,184,1.089,195,3.134,236,3.237,357,2.603,386,2.102,586,2.058,630,3.462,786,8.767,823,4.054,1008,3.254,1069,2.38,1233,5.41,1248,7.196,1249,4.758,1250,4.536,1251,5.037,1252,4.758,1253,6.034,1254,5.41,1255,4.351,1256,3.541,1257,7.196,1258,5.037,1259,5.41,1260,5.41,1261,3.719]],["t/218",[4,1.574,51,2.308,52,2.516,54,1.316,60,1.931,82,4.245,95,2.277,96,3.718,124,2.683,179,2.73,184,0.966,234,4.059,250,2.23,258,4.342,386,1.864,491,2.596,512,4.023,525,2.884,526,2.037,630,3.07,712,3.914,997,4.023,1008,2.885,1069,2.918,1181,6.176,1183,4.446,1205,3.859,1229,3.387,1249,4.22,1250,4.023,1251,4.467,1262,4.797,1263,6.176,1264,5.299,1265,6.374,1266,5.335,1267,2.779]],["t/220",[4,1.919,51,2.814,52,3.067,54,2.815,60,1.377,95,2.776,124,3.271,184,1.177,250,1.59,313,3.388,386,2.272,491,3.165,630,4.847,648,6.103,1268,5.849,1269,3.328]],["t/222",[4,1.976,5,0.531,9,0.679,13,2.469,51,2.013,52,2.194,54,1.652,76,6.578,79,2.863,83,4.184,84,3.509,86,2.424,95,1.986,111,0.628,117,3.947,141,2.381,184,0.842,309,1.777,386,1.626,459,3.313,491,2.264,558,2.469,560,6.004,561,4.164,570,2.13,575,3.04,586,2.291,603,3.111,604,3.427,616,3.366,622,2.805,630,3.855,638,4.176,858,7.186,1028,2.424,1133,3.896,1153,2.877,1194,4.844,1205,4.844,1270,5.608,1271,3.509,1272,6.023,1273,3.681,1274,4.622,1275,4.622,1276,2.381]],["t/224",[4,2.498,7,4.671,51,2.837,52,3.092,76,4.743,84,4.944,95,2.799,117,4.259,313,3.416,386,2.291,603,3.932,604,4.333,630,3.774,638,5.112,1013,7.078,1205,6.124,1277,6.513]],["t/226",[4,2.421,9,0.911,51,2.704,52,2.947,63,3.597,95,3.911,111,1.108,189,3.256,249,3.52,252,5.046,253,3.945,313,3.256,386,2.184,443,3.679,450,2.704,575,5.362,617,3.52,630,3.597,638,4.458,680,4.356,1153,3.864,1202,5.233,1203,5.233,1278,6.209,1279,8.152]],["t/228",[4,1.349,5,0.522,17,1.375,30,3.308,51,1.979,52,2.157,62,0.828,63,2.632,69,2.311,95,1.952,111,1.311,117,3.327,245,3.168,249,2.576,253,3.453,274,3.649,348,2.427,357,1.979,360,2.383,386,1.598,393,3.187,409,3.829,599,5.48,603,2.124,604,2.34,605,4.123,615,3.894,617,5.088,630,3.807,680,3.187,759,3.308,973,4.457,1153,2.827,1169,5.948,1183,3.988,1256,3.894,1267,3.446,1280,5.538,1281,3.829,1282,5.236,1283,2.576,1284,5.538,1285,3.829,1286,4.988,1287,4.543,1288,3.829,1289,3.082,1290,3.618,1291,4.113]],["t/230",[4,2.566,9,0.997,51,2.958,52,3.224,60,1.842,95,2.918,111,0.923,124,3.439,225,2.673,250,2.597,386,2.389,491,4.232,600,5.515,630,3.935,805,7.281,1205,4.945,1292,4.765]],["t/232",[4,2.409,16,5.913,43,4.038,51,2.683,52,2.924,56,3.485,58,4.736,85,4.322,95,2.647,117,4.107,386,2.167,604,3.174,630,4.699,1015,7.314,1205,5.905,1293,5.193,1294,6.161,1295,5.577,1296,6.161]],["t/234",[0,1.309,1,0.923,5,0.378,29,3.851,33,3.124,51,2.242,52,1.56,56,1.412,60,1.907,69,2.742,79,2.331,81,3.949,82,1.904,95,1.412,111,0.7,122,1.12,123,1.56,189,1.724,190,2.617,196,1.471,219,1.451,234,1.979,236,2.28,250,0.809,256,1.994,257,1.724,260,1.514,263,2.393,267,2.606,268,2.258,309,1.979,344,2.101,386,2.742,425,1.358,455,1.412,476,2.306,491,3.819,511,2.306,524,2.859,538,1.904,596,1.56,615,1.948,622,1.994,627,2.617,648,2.162,712,1.756,747,2.393,750,2.967,783,2.699,822,2.699,986,2.229,998,2.393,1069,1.309,1082,2.495,1116,4.366,1153,2.045,1188,2.495,1250,2.495,1255,2.393,1265,2.495,1267,2.699,1283,1.863,1285,2.77,1297,2.495,1298,3.286,1299,6.345,1300,2.617,1301,3.286,1302,3.286,1303,3.286,1304,3.286,1305,3.286,1306,4.66,1307,3.286,1308,3.286,1309,3.286,1310,3.286,1311,2.162,1312,1.636,1313,3.286,1314,3.286,1315,3.286,1316,2.617,1317,3.286,1318,3.286,1319,3.286,1320,3.286,1321,3.286,1322,2.495,1323,3.286,1324,3.286,1325,3.286,1326,2.393,1327,3.286,1328,3.286]],["t/236",[7,4.959,18,1.957,101,5.433,111,1.323,127,3.615,213,3.16,253,2.922,254,2.342,560,4.059,561,3.824,598,3.687,601,4.708,603,4.175,604,3.687,665,3.976,866,5.022,1009,4.575,1094,5.212]],["t/238",[7,4.772,16,3.667,18,1.841,54,2.133,61,4.724,111,0.916,122,2.295,130,4.304,219,2.973,519,4.724,603,4.017,604,5.135,619,3.991,749,5.112,1329,5.362,1330,5.676,1331,4.724,1332,5.676,1333,5.676,1334,5.362,1335,5.676,1336,6.734,1337,6.734,1338,6.734,1339,6.734]],["t/240",[18,2.263,111,1.326,348,4.42,603,3.869,605,4.42,701,4.053,1092,5.442,1340,6.024]],["t/242",[7,4.647,18,1.767,54,1.604,111,1.137,122,2.202,130,4.13,219,2.852,252,4.098,348,3.451,519,4.533,603,3.021,605,5.242,749,4.904,1329,5.145,1330,5.446,1331,4.533,1332,5.446,1333,5.446,1334,5.145,1335,5.446,1341,6.662,1342,6.461,1343,5.849,1344,8.366,1345,8.366,1346,8.366]],["t/244",[0,2.311,7,4.328,17,1.756,18,2.131,54,1.44,62,1.057,111,1.196,122,1.977,130,3.708,219,3.441,223,2.937,249,3.289,250,1.918,253,2.368,268,1.825,348,3.099,465,3.521,519,4.07,541,3.708,599,4.243,603,3.644,604,2.989,605,5.026,606,4.89,749,4.404,1329,4.62,1330,4.89,1331,4.07,1332,4.89,1333,4.89,1334,4.62,1335,4.89,1341,7.007,1343,5.252,1347,5.801,1348,7.055]],["t/246",[0,2.139,1,1.509,2,2.404,3,2.719,4,2.196,9,1.086,17,1.625,18,2.492,25,3.533,56,2.308,59,3.643,60,1.145,62,0.979,108,2.474,111,1.343,115,2.55,127,1.995,182,2.631,207,3.911,216,2.511,224,2.631,254,2.981,264,2.817,268,2.326,281,3.533,285,4.527,460,2.719,474,3.342,581,3.533,584,4.077,585,5.384,586,1.85,587,4.277,588,4.077,601,3.533,603,2.511,660,4.077,804,2.308,825,2.719,844,2.983,1222,3.533,1349,4.277,1350,3.911,1351,4.527,1352,5.371,1353,5.371]],["t/248",[1,1.705,5,0.469,18,2.829,47,3.691,52,3.442,64,2.682,100,2.969,111,1.267,147,2.969,179,2.101,182,2.973,224,3.934,254,3.26,260,1.879,267,2.065,268,1.283,274,2.265,275,2.969,309,1.567,331,2.475,545,4.297,557,4.795,558,3.873,565,2.969,577,4.29,578,3.247,579,3.691,580,2.538,581,5.283,582,6.301,583,4.634,670,3.88,914,3.247,1184,3.441,1312,2.03,1354,6.069,1355,6.069,1356,5.495,1357,4.078,1358,4.078,1359,4.078,1360,4.078]],["t/250",[0,2.594,5,0.749,18,2.3,54,2.088,111,1.266,122,2.22,219,2.876,223,3.298,254,3.048,260,3.001,268,3.096,291,3.191,386,2.291,425,2.692,557,4.12,577,4.493,582,5.532,888,5.897,970,3.416,1128,4.284,1311,4.284,1361,6.513,1362,6.513]],["t/252",[1,1.314,4,2.546,5,0.902,9,0.687,13,2.498,16,2.546,17,1.415,18,2.482,22,1.645,52,2.22,56,2.01,60,0.997,61,3.281,62,0.852,82,2.709,111,1.284,130,2.989,232,1.863,245,3.783,249,3.804,250,2.531,251,3.584,252,3.843,253,3.499,255,3.55,260,2.155,268,2.971,303,2.838,471,1.933,491,2.291,497,2.989,545,2.771,594,2.597,597,3.783,599,4.272,600,4.191,1312,2.329,1363,4.234,1364,3.076,1365,4.234]],["t/254",[5,0.672,18,1.598,54,2.442,111,1.201,115,2.774,127,2.909,236,2.487,250,1.438,253,2.386,254,1.912,450,2.545,491,2.863,560,3.314,561,3.122,570,2.692,598,3.011,602,3.844,603,2.732,604,3.011,605,4.183,608,3.637,701,2.863,935,4.654,988,5.313,1028,3.065,1035,3.964,1094,4.255,1135,5.29,1138,4.926,1140,5.29,1341,4.654,1366,7.831,1367,5.844,1368,7.831,1369,5.844,1370,5.844,1371,5.844]],["t/256",[0,2.214,5,0.639,9,0.816,15,2.599,17,1.682,18,2.07,20,2.863,21,2.863,54,1.38,62,1.013,72,2.298,103,3.771,111,1.388,122,1.894,151,4.047,196,2.488,213,2.454,219,2.454,223,2.814,228,3.22,254,1.819,260,2.561,268,2.708,272,4.219,277,3.656,465,3.373,481,3.152,491,2.723,541,3.553,560,3.152,561,2.969,596,2.639,608,3.459,709,4.426,728,6.853,739,6.028,866,3.9,935,4.426,1028,2.915,1035,3.771,1094,4.047,1138,4.685,1372,5.558,1373,5.558,1374,5.032]],["t/258",[5,0.749,18,1.781,111,0.886,112,2.99,122,2.22,156,5.072,200,5.897,202,5.173,254,3.048,267,3.298,281,4.284,481,3.693,553,6.124,670,4.164,750,3.046,999,4.164,1001,4.419,1247,4.743,1375,6.513,1376,6.513,1377,5.187,1378,6.513,1379,4.743,1380,7.614,1381,6.513,1382,5.897]],["t/260",[1,1.112,5,0.682,9,0.581,15,1.85,33,2.401,51,1.723,56,1.7,72,1.635,95,1.7,108,3.28,111,1.076,112,1.406,115,1.878,122,1.348,136,3.15,156,2.154,158,2.602,169,1.922,184,0.721,189,4.445,199,3.581,202,3.296,225,1.557,251,4.226,254,1.942,268,2.666,274,2.197,276,2.774,278,2.88,295,3.335,387,2.88,511,2.776,524,2.197,526,3.548,538,2.292,543,3.15,548,3.693,560,2.243,561,2.113,596,1.878,622,2.401,635,2.401,677,2.154,757,2.602,804,2.55,975,4.431,986,2.684,999,2.529,1098,3.939,1229,5.689,1230,5.372,1247,4.321,1380,3.581,1382,3.581,1383,5.934,1384,4.725,1385,3.956,1386,3.956,1387,3.956,1388,3.956,1389,6.002,1390,3.956,1391,3.956,1392,3.956,1393,3.003,1394,3.15]],["t/262",[29,2.796,60,1.424,96,4.685,165,3.325,184,1.717,192,3.122,194,4.268,219,2.948,223,3.381,234,3.285,235,2.87,236,2.121,237,4.052,282,3.381,361,4.052,440,4.392,455,3.672,471,2.76,474,4.156,525,2.628,526,3.285,586,2.3,1009,4.268,1193,5.628,1395,5.069,1396,5.628,1397,6.045]],["t/264",[5,0.887,10,5.406,21,2.34,44,2.757,60,1.401,79,1.669,95,3.635,97,1.878,112,1.615,122,1.548,123,2.157,154,2.124,169,2.501,170,2.632,182,3.781,184,1.407,186,5.232,189,4.436,202,2.523,213,2.006,225,1.788,226,1.726,234,1.746,260,2.093,285,3.829,327,2.827,344,2.904,348,4.123,357,1.979,432,3.618,455,1.952,525,3.532,526,3.596,546,3.308,681,4.113,717,4.089,774,3.308,797,3.308,810,3.829,845,2.427,866,3.187,936,5.538,988,3.082,1080,2.383,1114,2.383,1349,3.618,1398,4.543,1399,4.543,1400,3.618,1401,4.113,1402,4.113,1403,4.543,1404,4.113,1405,4.543,1406,4.543,1407,4.543]],["t/266",[44,4.869,123,3.809,525,3.158,526,3.084,548,4.993,717,4.993,791,7.264,932,5.842,1408,3.448,1409,7.264,1410,6.091,1411,7.264]],["t/268",[1,1.423,5,0.816,9,0.743,43,3.534,60,1.894,79,1.86,97,2.093,122,1.726,127,1.881,165,2.521,183,1.86,208,3.552,232,2.017,233,2.705,234,3.151,236,2.254,250,1.246,258,3.001,282,2.564,290,2.871,434,4.584,450,2.205,525,3.681,526,3.595,573,2.705,586,1.744,617,2.871,635,3.073,665,3.942,701,3.477,707,4.584,733,4.308,745,2.934,825,2.564,955,3.151,1143,5.101,1206,2.812,1284,4.268,1379,3.687,1408,2.176,1412,4.268,1413,3.237,1414,4.268,1415,3.687,1416,3.552,1417,3.001,1418,4.584,1419,3.237,1420,4.032]],["t/270",[5,0.93,54,2.612,60,1.053,62,0.9,79,1.814,97,2.883,122,1.683,135,3.932,168,2.681,169,2.259,182,2.419,184,1.688,186,3.932,189,2.59,203,2.59,257,2.59,282,2.5,306,4.162,309,1.898,337,3.248,348,2.638,357,2.15,360,2.59,386,1.737,455,2.122,525,2.745,526,2.681,573,2.638,834,3.248,845,2.638,936,4.162,988,4.731,1069,1.967,1143,3.073,1289,3.35,1312,2.459,1377,3.932,1404,6.313,1408,2.122,1417,2.926,1421,4.47,1422,4.938,1423,3.595,1424,4.47,1425,3.35,1426,4.47,1427,6.973,1428,6.973,1429,4.938]],["t/272",[5,0.955,42,2.334,43,2.175,51,1.903,54,1.874,60,0.931,94,2.719,97,3.432,108,2.013,122,1.489,127,1.623,135,6.612,165,3.18,169,2.069,170,2.531,183,1.605,184,1.375,201,2.426,208,4.48,226,1.66,234,1.679,236,1.388,256,2.651,286,2.964,290,4.708,471,1.806,510,2.334,525,3.268,526,3.547,581,2.874,665,2.426,712,2.334,733,2.651,745,2.531,754,4.65,762,3.181,783,2.291,806,3.682,825,2.212,834,4.201,1069,1.74,1079,5.085,1122,4.332,1143,2.719,1284,3.682,1312,2.175,1400,3.479,1408,1.877,1416,5.296,1430,4.369,1431,4.369,1432,4.369,1433,4.369,1434,4.369,1435,6.386,1436,7.548,1437,4.369,1438,4.369,1439,4.369]],["t/274",[0,2.903,1,2.048,2,3.263,3,3.691,5,0.838,9,1.07,17,2.206,18,2.47,62,1.328,111,1.228,127,2.708,249,4.133,250,2.223,253,2.975,268,2.84,597,3.514,654,6.144,1312,3.629]],["t/276",[1,1.63,5,0.896,17,2.359,18,2.131,40,3.289,54,2.335,111,1.06,117,2.937,122,1.977,123,2.754,124,3.946,250,2.166,251,4.163,268,1.825,309,2.996,323,4.62,357,2.527,360,3.042,614,3.708,615,3.438,616,4.224,617,3.289,618,4.89,619,3.438,620,5.252,621,5.252,970,4.087,1153,3.61,1226,7.055,1312,2.889,1365,7.055,1440,7.793,1441,5.801,1442,5.801]],["t/278",[1,1.059,4,2.053,5,0.658,17,1.141,18,1.891,43,2.848,54,2.254,94,2.345,95,4.197,111,1.128,112,1.34,113,2.861,122,1.284,123,1.789,127,1.4,189,1.976,208,2.644,240,2.644,252,5.193,253,4.108,268,1.185,309,2.968,348,2.013,386,1.326,443,4.097,450,2.491,575,3.763,608,2.345,617,3.92,638,4.28,642,3.412,645,3.412,665,2.093,687,4.822,688,3.412,970,3,1064,2.644,1153,2.345,1202,3.177,1203,3.177,1241,2.479,1312,1.876,1443,3.769,1444,3.001,1445,3.769,1446,3.769,1447,3.769,1448,3.412,1449,3.769,1450,3.769,1451,3.769,1452,3.769,1453,3.769,1454,3.769,1455,3.769]],["t/280",[1,1.262,4,2.499,5,0.882,18,2.097,54,2.218,111,1.267,112,1.597,113,3.41,122,1.531,123,2.132,127,1.669,130,4.902,245,4.914,249,2.547,250,1.105,251,2.4,252,3.192,253,2.66,268,1.413,309,2.505,357,1.956,360,2.356,386,1.58,598,2.314,599,5.737,605,4.772,687,5.493,876,3.271,970,3.418,973,5.203,1153,2.795,1241,2.955,1282,5.203,1312,2.237,1348,4.066,1456,6.517,1457,4.492]],["t/282",[1,1.112,4,2.517,5,0.819,14,2.075,18,2.318,23,2.038,40,2.243,54,2.104,58,1.823,60,0.843,62,1.081,63,2.292,79,1.453,111,1.345,112,1.406,117,2.003,122,1.348,123,1.878,124,3.005,127,1.47,182,1.938,245,2.861,250,2.577,268,1.866,282,2.003,309,2.737,386,1.391,586,1.362,598,2.038,600,5.547,614,2.529,615,2.344,616,2.88,617,2.243,618,3.335,619,2.344,638,2.907,804,2.55,970,3.734,1241,2.602,1292,4.163,1350,2.88,1412,3.335,1425,2.684,1458,5.934,1459,3.956,1460,3.956,1461,3.956,1462,3.956,1463,3.956,1464,3.956,1465,3.003]],["t/284",[4,1.249,9,0.912,17,1.88,56,1.808,62,1.132,63,2.437,79,1.545,111,1.004,115,1.997,150,4.946,154,1.967,156,2.291,168,1.617,170,2.437,184,1.132,192,1.967,225,1.656,226,1.599,230,3.145,232,1.676,233,2.247,234,1.617,235,1.808,236,1.336,245,2.028,250,2.604,251,2.247,252,2.061,253,3.329,259,2.618,268,1.323,448,3.546,455,2.669,460,2.13,513,2.767,562,3.808,570,2.862,586,2.139,588,3.193,597,2.995,599,2.291,600,2.247,608,2.618,628,2.952,798,2.553,825,2.13,932,3.063,992,3.35,1192,6.685,1311,2.767,1312,2.095,1350,3.063,1364,2.767,1377,3.35,1466,3.063,1467,2.854,1468,3.35,1469,4.946,1470,3.193,1471,3.063,1472,6.212,1473,4.207,1474,3.808,1475,4.207,1476,3.808,1477,6.224,1478,4.207]],["t/286",[1,1.986,4,1.494,5,0.812,9,0.739,13,2.688,17,1.523,29,2.106,36,4.648,56,2.162,60,1.073,62,1.288,72,2.08,97,2.08,100,3.663,111,1.11,130,3.216,170,2.915,219,2.221,223,2.548,236,1.598,245,2.426,250,1.238,253,2.054,286,3.413,303,3.053,455,2.162,463,4.517,471,2.08,476,4.958,504,3.663,597,2.426,599,4.447,605,2.688,1056,3.663,1114,3.706,1126,3.663,1280,4.241,1282,3.413,1340,3.663,1393,3.819,1416,3.53,1469,4.006,1479,4.958,1480,4.555,1481,3.309,1482,2.915,1483,3.53,1484,5.956,1485,5.031,1486,5.031,1487,4.006,1488,3.663,1489,4.006,1490,4.555,1491,3.413,1492,5.031,1493,5.031,1494,5.031]],["t/288",[2,4.026,5,0.89,17,2.722,23,2.354,60,1.651,111,0.621,235,1.964,252,3.232,253,1.865,349,3.741,364,4.004,474,2.844,599,3.593,605,5.284,619,4.589,626,5.561,638,2.238,768,7.338,783,2.396,876,4.804,882,5.254,1092,3.005,1218,6.166,1280,7.148,1340,3.327,1495,4.136,1496,4.136,1497,4.136,1498,6.598,1499,6.527,1500,7.01,1501,6.598,1502,6.598,1503,6.598,1504,6.598,1505,6.598]],["t/290",[1,1.241,2,1.977,4,1.312,17,1.337,39,2.749,41,2.681,62,0.805,63,2.559,69,1.554,72,1.826,79,2.365,80,3.353,94,5.765,95,3.813,108,2.035,111,1.135,117,2.237,124,2.237,190,3.517,216,3.01,226,1.678,235,1.898,245,3.104,252,3.154,253,2.628,256,2.681,264,2.316,274,2.453,327,2.749,331,3.907,332,3.099,344,2.823,425,1.826,443,4.947,450,1.924,497,2.823,605,4.058,609,3.099,611,4.687,617,2.504,694,3.517,784,2.823,844,2.453,932,3.216,988,2.996,1114,2.316,1118,3.099,1269,2.276,1289,2.996,1482,2.559,1487,3.517,1489,3.517,1506,3.999,1507,4.417,1508,4.417,1509,4.417,1510,3.723,1511,3.999,1512,4.235,1513,2.905,1514,4.417,1515,4.417,1516,2.681,1517,4.417,1518,3.723,1519,3.517,1520,4.417,1521,3.999]],["t/292",[2,2.341,17,1.583,51,3.162,94,5.19,111,0.987,117,2.648,223,2.648,235,3.583,236,2.649,250,1.287,252,4.085,290,2.965,346,3.97,349,2.965,364,5.467,390,7.029,450,3.632,558,2.794,570,2.409,603,2.445,605,4.455,611,3.808,617,2.965,643,7.029,694,6.64,785,3.842,963,5.781,1291,7.549,1340,3.808,1416,5.093,1522,5.23,1523,7.26,1524,5.23,1525,5.23,1526,5.23]],["t/294",[0,3.262,1,2.301,2,3.666,3,4.146,5,0.941,18,2.239,111,1.113,196,3.666,268,2.576,596,3.887]],["t/296",[1,1.941,9,1.014,18,1.889,62,1.259,111,0.939,130,4.416,245,3.331,249,3.918,250,2.476,251,3.691,252,3.384,253,3.565,268,3.165,303,4.193,471,2.856,594,3.838,597,3.331,599,3.762,600,3.691,1312,3.44,1363,6.255]],["t/298",[1,1.816,5,0.876,13,2.373,16,2.419,17,1.956,18,1.215,19,5.785,29,1.86,58,2.978,59,4.385,79,1.632,85,3.116,94,6.411,95,4.301,111,1.262,122,2.203,123,2.109,124,3.273,127,1.65,132,2.839,145,4.021,252,3.166,253,1.813,260,2.046,268,2.632,270,2.109,291,2.176,309,1.707,602,4.252,603,3.022,605,2.373,617,2.518,665,2.467,932,3.234,970,3.39,1180,3.744,1200,7.496,1204,5.852,1297,3.372,1341,3.537,1356,4.021,1364,2.922,1527,4.442,1528,4.442,1529,4.442,1530,4.442,1531,4.442]],["t/300",[4,1.767,5,0.684,17,1.441,18,1.627,29,1.994,54,1.967,56,1.28,60,1.015,62,0.543,79,1.094,82,2.759,111,1.01,112,1.059,122,1.623,123,2.261,124,1.508,184,1.822,189,1.562,196,1.334,204,1.655,226,1.132,236,3.206,237,2.89,250,1.829,268,1.871,309,3.047,361,1.808,386,2.093,450,2.074,553,2.169,575,4.471,733,3.611,804,1.28,970,3.564,1008,2.593,1021,2.09,1064,3.341,1069,1.187,1082,2.261,1125,3.615,1172,2.511,1194,2.169,1234,2.697,1235,8.274,1236,5.379,1237,2.697,1241,3.132,1242,4.738,1243,2.697,1255,3.468,1270,2.511,1424,2.697,1471,2.169,1532,2.09,1533,2.372,1534,2.979,1535,2.979,1536,2.979,1537,2.979,1538,2.979,1539,2.979,1540,2.979,1541,2.979,1542,2.979,1543,2.979,1544,2.979,1545,2.979,1546,2.979,1547,2.169,1548,4.311,1549,2.979,1550,2.979,1551,2.697,1552,2.979,1553,2.979,1554,2.979,1555,2.979,1556,2.511,1557,2.511,1558,2.511,1559,2.511]],["t/302",[4,2.417,54,2.193,60,1.5,63,2.897,113,3.795,122,1.704,184,0.911,195,3.69,236,3.351,268,2.213,309,1.922,386,3.107,586,2.423,786,8.794,823,3.392,970,2.622,1001,3.392,1008,4.432,1069,1.991,1241,3.289,1248,6.369,1249,3.981,1252,5.602,1253,5.34,1254,4.526,1256,2.963,1257,6.369,1258,4.214,1259,4.526,1260,4.526,1261,3.112,1560,5,1561,5,1562,5,1563,5]],["t/304",[5,0.962,18,1.05,43,4.965,54,2.336,88,2.695,95,1.651,111,0.789,118,3.612,124,1.945,183,1.411,189,2.015,196,1.72,208,4.908,230,1.945,270,3.321,276,1.796,302,3.16,309,2.231,361,3.522,463,3.71,506,3.238,659,3.059,683,3.059,750,1.796,822,2.015,845,4.471,876,2.797,894,3.478,916,4.892,919,3.478,920,5.896,970,3.044,1100,3.059,1164,3.478,1165,3.238,1166,3.238,1167,6.207,1222,2.527,1326,2.797,1329,3.059,1448,7.968,1564,3.841,1565,3.238,1566,3.841,1567,5.254,1568,8.369,1569,5.804,1570,3.841,1571,6.995,1572,3.841,1573,5.804,1574,3.059,1575,3.841,1576,5.804,1577,6.995,1578,3.841,1579,3.841,1580,3.841,1581,3.841,1582,3.478,1583,3.841]],["t/306",[4,2.311,5,0.824,13,2.741,16,5.889,18,1.959,22,1.151,40,1.856,43,4.11,54,2.378,56,2.719,57,2.606,58,4.548,59,2.22,61,2.296,82,1.896,85,5.026,86,1.716,111,1.122,112,1.164,116,1.94,117,3.94,122,1.115,123,2.436,238,2.741,250,0.805,260,1.508,268,1.029,270,1.554,309,2.433,328,2.606,386,2.226,425,1.353,604,2.643,853,2.963,930,2.963,970,3.319,1015,6.266,1064,2.296,1128,2.153,1241,3.375,1293,2.759,1295,5.729,1584,7.164,1585,3.273,1586,5.131,1587,3.273,1588,3.273,1589,3.273,1590,3.273,1591,3.273,1592,3.273,1593,3.273,1594,3.273,1595,5.131,1596,3.273,1597,3.273]],["t/308",[1,0.923,4,2.456,5,0.378,9,0.482,18,1.735,54,2.453,62,0.599,84,2.495,111,0.976,112,1.168,115,1.56,117,3.635,122,1.12,123,2.443,141,2.652,184,0.938,268,1.034,309,3.536,386,2.908,560,6.114,561,5.027,586,2.473,603,2.967,604,3.699,638,4.05,845,3.389,970,3.327,1064,4.451,1133,2.77,1194,5.228,1241,4.173,1270,6.969,1271,2.495,1272,5.744,1281,2.77,1598,6.345,1599,3.286,1600,3.286,1601,3.286,1602,3.286,1603,3.286,1604,3.286,1605,3.286,1606,2.101,1607,3.286,1608,3.286,1609,3.286]],["t/310",[4,2.08,5,0.805,18,2.218,54,2.187,60,1.059,79,1.825,82,2.879,111,0.952,122,1.693,123,2.359,124,2.516,127,1.846,184,1.276,232,1.979,234,3.952,250,2.168,268,1.563,309,3.118,386,1.748,491,3.431,525,2.757,804,3.01,970,4.254,1008,3.814,1064,3.486,1255,5.1,1262,4.498,1263,7.425,1415,3.618,1471,3.618,1551,4.498,1556,4.188,1557,4.188,1558,4.188,1559,4.188,1610,4.968,1611,4.968,1612,4.968,1613,4.968,1614,4.968,1615,4.968]],["t/312",[4,2.326,5,0.9,18,2.415,60,1.246,79,2.147,82,3.386,111,1.065,122,1.992,123,2.774,124,2.959,184,1.427,232,3.518,233,4.718,250,2.174,268,1.838,309,3.01,491,3.836,648,5.81,804,3.365,970,4.632,1268,5.29,1269,4.034,1556,4.926,1557,4.926,1558,4.926,1559,4.926,1616,5.844,1617,5.844,1618,5.844]],["t/314",[1,2.19,5,0.896,18,1.586,51,2.527,54,1.935,94,4.85,95,2.493,124,5.117,127,2.155,238,3.099,281,3.816,309,3.616,459,2.889,617,3.289,635,3.521,638,2.842,691,4.89,783,3.042,822,3.042,970,3.042,998,4.224,1176,9.148,1180,4.89,1200,4.89,1269,4.015,1619,5.801,1620,7.793,1621,5.801,1622,4.62,1623,5.801,1624,5.801]],["t/316",[4,2.238,5,0.635,17,2.28,36,3.631,60,1.606,62,1.373,67,4.19,69,1.941,72,2.282,111,1.312,127,2.05,179,3.882,194,3.528,232,2.199,250,2.374,257,2.895,427,3.873,463,4.816,476,3.873,491,3.691,599,4.103,600,4.025,628,3.873,701,2.704,844,4.185,1114,2.895,1126,4.019,1143,3.435,1292,3.873,1393,4.19,1484,4.653,1487,4.395,1489,4.395,1512,3.631,1625,5.52,1626,3.631,1627,5.52,1628,5.52,1629,4.997]],["t/318",[5,0.653,9,0.833,16,4.182,17,2.324,23,2.925,60,1.637,62,1.035,111,0.772,124,3.889,235,2.44,245,2.737,250,1.397,252,3.762,253,2.318,349,3.219,360,2.977,364,3.445,450,2.473,600,3.033,605,4.103,626,6.473,638,2.781,757,3.734,768,7.604,876,4.134,882,7.425,1218,6.116,1495,5.14,1496,6.953,1497,6.953,1499,4.785,1500,5.14,1630,4.785]],["t/320",[5,0.672,9,0.858,39,3.637,69,2.056,72,3.237,80,4.436,106,4.255,111,1.338,165,2.91,169,1.893,245,2.818,250,1.438,251,3.122,254,1.912,264,3.065,274,3.246,331,3.547,332,4.1,443,3.463,603,2.732,617,3.314,670,3.736,712,3.122,739,4.654,784,3.736,830,4.436,844,3.246,1091,4.436,1482,3.386,1487,4.654,1489,4.654,1491,3.964,1512,5.151,1513,3.844,1518,4.926,1631,5.844,1632,5.844,1633,4.926,1634,4.926,1635,5.844,1636,4.926,1637,5.844,1638,4.436]],["t/322",[2,3.556,5,0.913,17,2.404,111,1.294,331,4.821,768,5.784,882,6.325,887,7.191,1364,5.225,1499,6.696,1639,7.943,1640,7.943]],["t/324",[1,1.801,9,1.222,58,4.671,60,1.774,69,2.254,97,2.649,112,2.278,144,4.215,196,2.869,216,2.996,282,3.245,545,3.798,583,4.096,592,4.666,750,2.996,790,5.402,809,4.215,829,6.318,1184,3.634,1483,4.496,1516,3.889,1641,5.103,1642,6.409,1643,5.402,1644,5.402,1645,5.402,1646,6.409,1647,5.802,1648,6.409,1649,4.215]],["t/326",[1,1.876,5,0.768,9,0.98,23,3.44,60,1.424,65,2.509,66,3.567,154,3.122,313,3.502,458,5.996,615,3.957,635,4.052,667,3.957,732,5.069,745,3.869,886,5.317,955,4.156,1080,3.502,1143,4.156,1213,4.862,1419,4.268,1565,5.628,1641,5.317,1650,9.425,1651,6.045,1652,5.069,1653,6.677,1654,6.677,1655,6.045]],["t/328",[1,1.692,9,0.884,17,1.822,60,1.703,112,2.14,154,3.735,184,1.634,282,3.049,513,3.96,524,4.979,526,3.446,538,3.488,586,2.751,701,2.949,732,4.57,745,3.488,785,2.774,794,4.794,955,5.579,1143,5.579,1269,4.618,1413,3.849,1414,5.075,1420,4.794,1466,4.384,1655,7.232,1656,6.021,1657,6.733]],["t/330",[5,0.692,17,1.822,69,2.118,86,3.158,154,2.815,165,2.998,180,3.568,184,1.097,216,2.815,250,1.966,282,3.049,327,3.747,464,4.384,586,2.073,597,2.903,598,3.102,801,4.224,825,3.049,1086,2.521,1098,3.977,1116,2.858,1132,3.96,1206,3.344,1207,3.568,1420,4.794,1466,4.384,1488,4.384,1512,3.96,1658,6.021,1659,6.021,1660,5.451,1661,6.021,1662,7.139,1663,6.021,1664,4.794,1665,5.075,1666,5.451,1667,5.075,1668,4.084,1669,4.384,1670,5.451]],["t/332",[9,1.367,58,3.875,60,1.793,62,1.187,154,3.046,167,3.547,184,1.187,194,4.164,202,3.618,203,3.416,228,3.774,238,4.976,257,3.416,357,2.837,460,3.298,551,6.384,598,4.333,785,3.001,855,5.187,857,7.089,1466,4.743,1483,4.57,1671,5.187,1672,6.513,1673,4.164,1674,5.187]],["t/334",[5,0.667,17,2.359,60,1.661,72,2.398,111,1.279,123,2.754,164,2.989,232,2.311,234,3.383,236,2.475,323,4.62,327,3.61,396,5.916,450,3.833,458,6.6,525,2.283,526,2.23,602,3.816,677,3.159,701,2.842,745,4.515,750,2.713,955,4.85,1143,3.61,1184,4.419,1413,3.708,1414,4.89,1649,3.816,1657,4.89,1675,4.224,1676,5.801,1677,5.801,1678,5.801]],["t/336",[4,1.342,5,0.752,9,1.238,13,3.496,14,2.369,16,3.563,17,2.329,21,2.327,29,1.891,56,1.941,58,3.545,60,1.64,61,5.918,62,1.192,72,1.867,79,1.659,82,2.617,85,3.169,87,3.289,111,1.217,112,2.326,127,1.678,154,3.06,158,2.971,165,2.249,167,2.46,170,2.617,171,3.106,182,3.205,195,2.369,250,1.112,286,3.065,291,2.213,294,3.808,386,1.589,440,2.971,500,2.971,604,2.327,619,4.56,622,2.742,717,2.811,785,3.015,973,3.065,1184,3.71,1312,2.249,1364,2.971,1419,2.888,1467,3.065,1477,3.808,1488,3.289,1679,4.517,1680,4.089,1681,3.429,1682,3.597,1683,4.517,1684,4.089,1685,4.517,1686,4.517,1687,4.517,1688,4.517,1689,3.429]],["t/338",[112,2.972,156,4.552,163,5.203,282,4.233,667,4.955,711,6.088,1488,6.088,1690,6.347]],["t/340",[2,2.737,4,1.816,5,0.703,68,3.623,69,2.838,163,3.805,184,1.114,250,1.505,262,3.805,278,5.876,425,3.336,471,2.527,586,2.779,601,4.021,798,3.71,809,4.021,1086,3.378,1089,5.153,1098,3.044,1116,4.288,1207,3.623,1267,3.206,1394,4.868,1402,5.534,1668,4.147,1691,4.868,1692,5.534,1693,4.868,1694,5.153,1695,3.805,1696,4.451,1697,5.153,1698,4.289,1699,6.113,1700,4.451,1701,6.113]],["t/342",[1,1.885,5,0.771,9,0.687,44,4.761,62,0.852,111,0.636,129,2.291,143,3.281,180,2.771,234,1.798,236,1.485,250,1.931,262,2.91,264,2.453,388,3.942,471,2.773,491,2.291,492,2.771,507,2.453,560,2.652,596,2.22,602,3.076,628,3.281,677,4.272,712,2.498,731,3.281,733,2.838,750,2.187,774,3.405,823,4.551,1080,2.453,1086,1.958,1098,3.341,1100,5.342,1184,5.356,1194,3.405,1408,2.01,1420,3.724,1423,5.713,1636,3.942,1644,3.942,1666,4.234,1670,4.234,1675,3.405,1702,4.677,1703,4.234,1704,4.677,1705,3.942,1706,4.677,1707,4.677,1708,6.247,1709,4.677,1710,4.677,1711,3.724,1712,4.677,1713,4.677,1714,3.405,1715,3.55,1716,4.234,1717,4.677,1718,3.55,1719,4.677]],["t/344",[9,1.326,62,1.328,82,4.223,94,5.62,115,3.46,168,2.802,279,4.794,752,4.794,1350,5.307,1421,6.598,1483,5.114,1506,6.598,1533,5.804,1720,7.289,1721,5.804,1722,7.289,1723,6.598,1724,6.598,1725,7.289,1726,5.114]],["t/346",[5,0.737,9,1.222,13,3.423,14,3.361,45,3.889,60,1.366,62,1.168,79,2.354,97,2.649,111,0.871,165,3.191,194,4.096,216,2.996,250,2.048,253,3.397,257,3.361,455,2.754,471,2.649,570,2.952,596,3.042,597,4.012,599,3.49,600,3.423,608,3.988,638,3.139,717,3.988,821,4.865,1727,4.865,1728,5.802,1729,5.103,1730,6.409,1731,5.402,1732,5.802]],["t/348",[9,1.222,62,1.684,95,2.754,103,4.348,184,1.684,250,1.577,257,3.361,586,2.866,597,3.09,598,3.302,711,4.666,997,4.865,1020,4.666,1086,2.683,1098,3.191,1206,3.559,1207,3.798,1364,4.215,1408,2.754,1417,3.798,1467,4.348,1479,4.496,1682,5.103,1715,4.865,1733,5.802,1734,4.865,1735,7.015,1736,6.409,1737,5.402,1738,5.103]],["t/350",[1,1.772,4,1.873,9,0.926,14,3.308,17,1.909,29,2.641,60,1.345,69,2.897,111,0.858,170,3.654,184,1.671,194,4.032,232,2.512,233,3.369,234,2.425,235,3.539,236,2.003,237,3.828,665,3.503,695,4.788,734,4.788,752,4.149,800,4.788,844,3.503,918,5.316,1080,3.308,1220,4.644,1312,3.14,1512,4.149,1739,5.022,1740,5.022,1741,6.307,1742,6.307]],["t/352",[9,0.569,44,2.354,60,0.827,62,1.065,82,3.387,93,5.603,111,1.429,115,1.841,161,3.639,183,1.425,184,1.793,195,2.034,196,1.737,226,1.474,233,2.072,234,2.705,235,1.667,236,2.235,257,2.034,276,1.814,325,2.551,346,2.944,386,1.364,450,1.689,491,2.864,497,2.479,524,3.247,525,2.301,526,3.396,538,2.247,586,1.336,589,5.603,701,1.9,765,2.721,772,2.414,920,3.27,973,2.631,1020,5.123,1028,2.034,1051,5.123,1069,1.545,1128,6.031,1269,1.998,1288,3.27,1292,2.721,1419,2.479,1467,2.631,1743,3.27,1744,3.879,1745,7.833,1746,8.405,1747,7.036,1748,3.512,1749,3.27,1750,2.944,1751,2.944]],["t/354",[0,1.152,4,0.859,5,0.899,9,1.443,15,1.352,17,0.875,18,0.791,23,1.49,29,1.211,41,2.823,56,1.243,60,1.244,62,1.063,67,2.196,68,1.714,69,1.636,72,1.196,79,1.709,81,1.8,87,2.106,97,1.196,111,0.996,112,1.028,132,1.849,154,1.352,156,1.575,157,1.902,164,2.396,165,1.44,169,0.937,182,1.417,184,1.687,187,1.8,195,1.517,196,1.295,203,1.517,213,2.575,223,1.464,224,1.417,225,1.83,226,1.099,230,1.464,236,1.853,238,3.912,254,0.946,257,1.517,386,1.017,425,1.923,455,1.243,460,1.464,464,2.106,471,1.196,500,1.902,501,2.303,547,2.029,551,2.196,553,2.106,572,3.92,577,1.545,586,0.996,614,1.849,695,2.196,701,1.417,712,1.545,723,1.755,745,1.676,747,2.106,750,1.352,772,1.8,783,1.517,785,2.687,797,2.106,798,1.755,803,3.263,829,3.531,830,3.531,831,2.618,832,2.303,845,1.545,854,2.303,1069,1.853,1070,2.438,1086,1.211,1095,3.531,1098,1.44,1116,2.208,1207,1.714,1225,2.637,1267,1.517,1269,3.005,1408,1.999,1417,1.714,1491,1.962,1532,3.263,1649,1.902,1668,3.155,1705,3.92,1752,2.106,1753,2.892,1754,3.704,1755,3.531,1756,2.892,1757,2.892,1758,2.618,1759,2.823,1760,2.618,1761,2.892,1762,2.892,1763,2.303,1764,2.438,1765,2.303,1766,5.833,1767,2.196,1768,2.892,1769,2.892,1770,2.892]],["t/356",[1,1.441,5,0.59,9,1.211,41,3.112,62,1.628,69,1.804,80,5.436,111,0.697,141,3.69,144,3.373,184,1.504,216,3.349,219,2.264,223,2.597,234,1.971,235,2.204,237,3.112,260,2.363,270,2.435,281,3.373,282,2.597,471,2.12,474,3.192,525,2.018,526,2.753,573,2.74,667,3.039,759,3.734,782,3.893,784,4.578,788,3.479,792,4.323,825,2.597,844,3.978,975,3.566,1098,2.554,1116,2.435,1122,3.479,1127,4.643,1184,2.908,1229,3.278,1326,3.734,1408,3.078,1417,4.244,1626,3.373,1668,3.479,1771,3.893,1772,5.128,1773,5.128,1774,3.893,1775,5.128,1776,5.128]],["t/358",[1,1.744,9,0.911,35,4.944,56,3.503,60,1.324,62,1.761,111,1.108,129,3.041,169,2.011,171,2.947,224,3.041,230,3.144,231,4.713,247,3.041,254,2.032,262,3.864,264,3.256,471,2.566,500,4.084,573,3.317,665,3.448,788,4.212,1184,3.52,1408,2.668,1417,3.679,1481,4.084,1482,3.597,1718,6.188,1767,6.188,1777,6.209,1778,6.209,1779,6.209,1780,4.713,1781,6.209]],["t/360",[0,3.044,5,0.879,62,1.027,72,2.33,76,4.104,111,1.039,115,2.676,141,2.904,183,2.071,219,3.375,309,2.167,912,4.489,932,4.104,1018,3.824,1086,3.2,1092,6.392,1093,7.914,1094,4.104,1095,7.058,1099,5.362,1113,3.955,1118,3.955,1216,3.824,1269,2.904,1290,4.489,1675,4.104,1782,5.637,1783,3.708,1784,7.643,1785,4.489,1786,5.637,1787,5.637,1788,5.103]],["t/362",[0,2.278,5,0.887,9,1.282,18,2.11,62,1.592,70,3.313,111,1.049,127,2.124,156,3.113,187,3.559,219,2.525,247,2.801,254,2.525,386,2.011,387,4.163,500,3.761,526,2.967,553,4.163,557,2.801,573,4.123,577,3.055,609,4.012,665,4.286,711,4.163,784,3.655,825,2.895,973,3.879,1011,4.163,1012,4.163,1071,4.341,1093,4.341,1095,4.341,1098,2.847,1220,2.895,1229,4.933,1247,4.163,1384,4.553,1423,4.163,1641,4.553,1675,4.163]],["t/364",[5,0.982,9,1.254,70,4.948,1723,7.731,1789,7.198,1790,7.198]],["t/366",[9,1.132,17,2.334,62,1.704,111,1.049,130,4.93,245,3.718,250,2.301,253,3.148,303,4.681,425,3.188,608,4.8,1311,5.073,1467,5.232,1690,5.855]],["t/368",[4,2.291,60,1.644,96,5.411,184,1.704,192,3.606,235,3.314,282,3.905,361,4.681,455,3.314,474,4.8,525,3.035,526,2.965,825,3.905,856,6.501,1009,4.93]],["t/370",[9,1.166,111,1.08,144,5.225,169,2.573,175,4.821,216,3.714,583,5.078,616,5.784,1114,4.166,1791,7.943,1792,6.696,1793,6.325,1794,4.944]],["t/372",[1,2.086,5,0.854,62,1.353,236,2.358,250,1.827,253,3.031,597,3.58,599,4.043,605,3.966,798,4.506,1126,5.406,1282,5.037,1340,5.406,1416,5.209,1479,6.409,1480,6.722,1481,4.884,1482,4.302,1795,7.425]],["t/374",[2,3.324,4,2.205,17,2.247,41,4.506,79,2.728,94,4.621,95,3.191,111,1.01,235,3.191,250,1.827,252,3.637,253,3.729,597,3.58,605,3.966,611,5.406,694,5.912,988,5.037,1114,3.894,1511,6.722]],["t/376",[2,3.176,4,2.107,5,0.816,17,2.147,60,1.512,62,1.293,111,1.318,171,3.368,194,4.535,216,3.317,253,2.896,257,3.72,268,2.231,455,3.049,605,4.743,701,3.475,745,4.11,975,3.532,1092,4.666,1188,5.385,1340,5.165,1796,6.422]],["t/378",[4,2.205,5,0.854,60,1.583,62,1.353,111,1.01,141,3.825,164,3.825,184,1.353,232,2.958,234,2.854,250,1.827,455,3.191,474,4.621,524,4.124,525,2.922,526,2.854,568,5.912,586,2.557,625,5.912,1349,5.912]],["t/380",[5,0.922,60,1.711,62,1.462,170,4.649,180,4.755,701,3.93,784,5.129,1114,4.208,1206,4.456,1794,4.993,1797,8.024,1798,8.024]],["t/382",[23,3.973,45,4.681,60,1.993,62,1.704,79,2.833,165,3.84,169,2.499,224,3.778,250,2.301,1114,4.045,1727,5.855,1799,7.713,1800,6.142]],["t/384",[62,1.462,69,2.822,111,1.302,141,4.134,232,3.196,586,2.763,804,3.448,844,4.456,1184,4.549,1626,5.278,1801,6.763]],["t/386",[4,2.313,60,1.66,62,1.419,111,1.059,184,1.419,225,3.065,226,3.574,232,3.746,233,4.16,250,1.917,586,2.682,753,5.464,773,6.565]],["t/388",[9,1.111,13,4.042,62,1.379,122,2.579,216,3.538,259,4.709,509,6.849,734,7.014,804,3.251,1069,3.014,1626,4.977,1731,6.377,1732,6.849,1739,6.025,1802,6.849,1803,7.789]],["t/390",[4,2.291,9,1.372,58,3.553,60,1.644,62,1.405,111,1.049,163,4.8,171,3.661,250,2.301,804,3.314,845,4.12,1626,5.073,1801,6.501,1804,6.142]],["t/392",[9,1.121,43,4.628,111,1.264,253,3.118,270,3.626,361,4.636,458,5.359,603,4.346,604,3.935,845,4.081,1165,6.439,1166,6.439,1167,6.083,1567,6.915]],["t/394",[58,4.333,171,3.697,228,4.512,230,3.943,425,3.219,598,4.012,600,4.16,701,3.815,798,4.727,842,6.202,1322,5.912,1516,4.727,1724,7.05,1805,5.671]],["t/396",[9,1.411,82,4.038,169,2.845,184,1.752,195,3.655,203,5.042,238,5.136,425,2.881,459,3.47,558,3.723,568,5.55,783,3.655,785,3.211,804,2.995,988,4.728,1467,4.728,1806,6.31,1807,6.97]],["t/398",[9,1.215,62,1.508,111,1.125,115,3.928,171,3.928,250,2.036,504,6.024,567,5.149,1516,5.021]],["t/400",[9,1.215,62,1.508,111,1.125,250,2.4,253,3.378,608,5.149,701,4.053,1752,6.024]],["t/402",[4,2.205,17,2.247,62,1.353,79,2.728,111,1.242,179,3.825,226,2.821,232,2.958,245,3.58,250,2.435,253,3.031,491,3.637,597,3.58,599,4.043,600,3.966,1067,5.209,1634,6.258]],["t/404",[9,1.178,43,3.995,62,1.462,111,1.091,270,3.809,458,5.629,602,5.278,665,4.456,745,4.649,1400,6.389,1416,5.629,1808,7.264]],["t/406",[4,2.226,9,1.1,29,3.138,45,4.548,60,1.598,62,1.366,87,5.457,111,1.019,168,2.881,184,1.366,225,2.95,234,2.881,235,3.221,236,2.38,257,3.931,471,3.098,570,3.453,586,2.581,1080,3.931]],["t/408",[79,2.753,170,4.342,171,3.558,184,1.81,225,2.95,226,2.848,267,3.795,524,4.163,526,3.532,801,5.258,1020,5.457,1269,3.861,1379,5.457,1809,7.495,1810,6.785,1811,7.495]],["t/410",[17,2.268,82,4.342,184,1.366,226,2.848,250,2.261,361,4.548,526,3.981,615,4.442,745,4.342,1020,5.457,1051,5.457,1206,4.163,1222,4.93,1379,6.689]],["t/412",[4,2.291,69,3.288,168,2.965,825,3.905,1086,3.229,1116,4.438,1143,4.8,1225,4.373,1417,4.571,1668,5.232,1764,6.501,1765,6.142,1812,6.982,1813,7.713]],["t/414",[4,2.165,9,1.07,58,3.358,60,1.925,62,1.328,111,0.991,170,4.223,184,1.328,225,2.869,226,2.77,250,1.794,586,2.51,801,5.114,1206,4.048,1408,3.132,1417,4.32,1481,4.794,1482,4.223,1814,5.804,1815,5.114,1816,6.598]],["t/416",[14,4.084,69,2.739,80,5.912,216,3.642,460,3.943,844,5.223,1220,3.943,1516,4.727,1547,5.671,1626,5.123,1817,5.464,1818,7.788,1819,7.788,1820,6.565]],["t/418",[5,0.816,60,1.512,62,1.293,67,5.385,69,3.123,184,1.293,194,4.535,546,5.165,586,3.058,783,3.72,1069,2.826,1086,3.718,1116,4.215,1132,4.666,1207,4.204,1668,4.813,1694,5.98,1695,4.415,1696,5.165,1738,5.649,1821,7.094]],["t/420",[25,5.173,45,4.773,58,3.623,157,5.173,167,4.283,169,2.548,171,3.734,282,3.982,722,5.97,829,5.97,844,4.368,845,4.202,1482,4.557,1785,6.263]],["t/422",[4,2.291,41,4.681,60,1.644,62,1.704,79,2.833,184,1.704,235,3.314,236,2.45,250,1.898,497,4.93,586,2.656,734,5.855,1027,6.142,1822,6.982]],["t/424",[4,2.336,17,2.38,61,5.518,62,1.433,170,4.557,195,4.125,250,1.936,597,3.792,785,3.623,973,5.336,1364,5.173,1680,7.12,1681,5.97,1682,6.263]],["t/426",[5,0.808,9,1.296,14,3.688,58,3.239,60,1.883,62,1.281,69,2.473,111,0.956,164,3.622,169,2.278,171,3.338,250,2.173,264,3.688,821,5.337,844,3.905,845,3.756,1114,3.688,1715,5.337,1726,4.933,1729,5.599,1804,5.599,1823,5.599,1824,4.933]],["t/428",[9,1.381,62,1.419,169,2.523,184,1.714,185,5.123,192,3.642,203,4.084,216,3.642,455,3.347,525,3.065,526,2.994,622,4.727,1193,6.565]],["t/430",[1,2.011,9,1.311,58,3.298,62,1.304,163,4.455,167,3.897,171,3.398,184,1.627,203,4.683,238,4.77,239,4.575,240,5.022,425,2.959,803,5.022,845,3.824,855,5.7,1657,6.033,1671,5.7,1825,7.158,1826,6.033]],["t/432",[9,1.132,62,1.704,69,2.713,141,4.816,144,5.073,184,1.405,250,2.301,784,4.93,844,4.284,1098,3.84,1408,3.314,1626,5.073,1827,7.713]],["t/434",[4,2.088,5,0.808,9,1.032,43,3.501,58,3.239,60,1.883,167,3.829,171,3.338,224,3.444,238,3.756,294,5.927,459,3.501,551,6.703,580,4.376,597,3.39,600,3.756,855,5.599,1051,5.12,1213,5.12,1418,6.365,1671,5.599,1828,6.365,1829,7.031,1830,6.365]],["t/436",[0,3.33,9,1.227,169,2.709,331,5.074,1247,6.088,1831,8.361,1832,8.361,1833,7.569]],["t/438",[9,1.041,62,1.618,168,2.727,251,3.79,268,3.049,344,5.676,386,2.495,393,4.977,525,2.792,526,2.727,561,3.79,975,4.421,1132,4.666,1139,5.649,1229,4.535,1247,5.165,1282,4.813,1574,5.649,1833,6.422,1834,7.094]],["t/440",[9,1.143,29,3.261,62,1.419,79,2.861,111,1.059,251,4.16,268,2.45,276,3.642,393,5.464,580,4.847,975,4.682,978,4.847,1139,6.202,1793,6.202]],["t/442",[1,1.595,5,1.001,9,1.369,22,2.701,54,2.68,62,1.586,65,2.885,111,0.772,183,2.086,232,2.261,268,2.737,310,2.918,357,2.473,386,3.061,435,3.345,456,5.077,526,2.182,594,3.153,757,3.734,974,3.629,975,2.827,976,4.785,1011,4.134,1012,4.134,1229,3.629]],["t/444",[9,1.185,22,2.838,54,2.731,65,3.032,310,3.066,357,4.184,360,4.232,392,5.308,435,3.514,456,5.231,594,3.395,647,4.897,974,5.158,975,4.018,978,3.805,1835,4.641]],["t/446",[9,1.222,22,2.927,54,2.75,65,3.127,310,3.163,350,4.822,357,3.625,435,3.625,456,5.327,594,3.559,974,5.32,978,3.988,979,7.534,1835,4.865]],["t/448",[5,0.92,9,1.175,22,2.815,54,2.701,56,2.083,65,3.007,95,2.083,251,3.677,268,1.525,310,3.041,350,2.808,357,3.486,360,2.542,392,3.189,393,4.829,435,3.486,456,5.205,526,2.646,594,2.692,647,2.942,974,4.4,975,4.582,978,4.284,1011,3.53,1012,3.53,1077,3.86,1229,4.4,1250,3.68,1415,3.53,1471,3.53,1836,4.388,1837,3.86,1838,4.388]],["t/450",[5,1.051,9,0.998,22,2.39,54,2.62,65,2.553,112,1.692,169,2.567,201,2.644,202,4.401,251,2.543,309,2.612,310,2.582,350,2.758,357,3.451,361,4.124,393,4.767,435,2.959,456,5.174,459,2.37,525,1.874,526,1.83,561,2.543,594,3.774,635,4.809,757,3.131,974,4.343,975,3.945,978,5.378,1132,3.131,1139,3.791,1835,5.158,1837,3.791,1838,4.31,1839,6.795,1840,4.31]],["t/452",[5,0.862,54,1.861,622,4.548,635,4.548,757,4.93,977,7.744,978,5.717,1071,6.974,1132,4.93,1835,5.689,1840,6.785,1841,7.495,1842,9.187,1843,9.187]],["t/454",[5,0.802,9,0.725,54,2.506,62,1.271,65,2.62,66,2.638,106,3.595,107,4.47,108,2.275,168,3.377,268,1.553,274,3.873,276,3.261,310,2.65,331,2.997,357,2.15,386,1.737,427,3.464,510,2.638,526,2.681,594,2.742,635,4.232,757,4.587,762,5.887,833,5.878,974,3.156,975,2.459,976,4.162,978,3.073,1035,3.35,1132,3.248,1229,4.458,1410,3.748,1574,5.553,1733,4.47,1835,3.748,1837,3.932,1844,6.973,1845,8.085,1846,4.938,1847,4.938,1848,4.938,1849,4.938,1850,4.938,1851,4.938,1852,4.938,1853,4.938]],["t/457",[25,2.988,40,2.576,111,1.272,122,1.548,129,2.225,188,3.829,230,2.3,256,2.757,262,2.827,476,4.61,503,6.158,567,2.827,578,3.618,602,4.322,614,4.2,750,2.124,818,3.308,825,2.3,1018,3.082,1027,3.618,1114,2.383,1289,3.082,1300,3.618,1419,2.904,1425,3.082,1465,3.449,1491,3.082,1512,2.988,1629,4.113,1662,6.147,1664,3.618,1726,3.187,1752,4.784,1760,4.113,1783,2.988,1788,4.113,1854,3.829,1855,4.543,1856,5.538,1857,5.859,1858,6.147,1859,7.536,1860,3.449,1861,4.543,1862,4.543,1863,4.543,1864,3.618,1865,3.449,1866,4.543,1867,5.948,1868,3.618,1869,4.543,1870,3.618,1871,4.543,1872,4.543,1873,6.571,1874,4.543]],["t/459",[41,4.97,62,1.492,302,4.459,573,4.374,1114,5.082,1794,5.096,1875,6.902,1876,8.189,1877,6.902]],["t/461",[60,1.313,62,1.123,129,3.018,226,2.341,250,2.232,256,3.739,302,4.416,386,2.167,460,3.119,503,4.486,571,6.157,573,4.333,581,5.335,594,3.422,788,4.179,825,3.119,854,4.906,1067,4.322,1220,3.119,1236,3.834,1467,4.179,1734,4.677,1858,4.906,1859,4.486,1877,5.193,1878,6.161,1879,5.193,1880,6.161,1881,6.161,1882,4.677,1883,5.577,1884,5.577,1885,5.577,1886,5.193,1887,4.486,1888,5.193]],["t/463",[5,0.644,55,5.774,62,1.02,86,3.989,129,2.742,137,4.718,270,3.611,291,2.742,332,6.504,449,5.067,503,5.539,705,5.067,759,4.076,788,3.797,801,3.927,844,3.109,1092,3.682,1225,4.313,1664,4.457,1737,6.412,1857,5.774,1858,6.88,1865,4.249,1889,5.067,1890,7.607,1891,6.886,1892,5.597,1893,5.597,1894,5.597,1895,5.597,1896,5.067,1897,5.597,1898,5.597,1899,7.607,1900,7.607,1901,5.597,1902,5.597,1903,4.457,1904,5.597]],["t/465",[41,4.383,62,1.316,216,3.377,302,3.933,425,2.986,503,5.259,572,6.088,573,3.858,597,3.482,788,4.9,997,5.483,1114,3.788,1691,5.752,1698,5.067,1758,6.539,1794,4.495,1877,6.088,1888,6.088,1889,6.539,1905,7.223,1906,7.223,1907,7.223,1908,6.539]],["t/467",[9,1.081,29,1.752,60,2.101,62,1.128,93,3.332,96,2.936,111,1.235,134,3.332,171,1.987,184,1.341,202,2.324,225,1.647,232,3.745,234,2.83,236,1.965,254,2.025,267,2.119,271,3.047,364,2.54,491,3.031,586,3.129,638,4.828,648,4.07,662,2.195,732,3.177,804,3.905,805,5.215,1028,3.245,1030,2.675,1080,2.195,1086,1.752,1098,2.084,1114,2.195,1207,2.48,1269,2.156,1292,2.936,1408,1.798,1417,2.48,1481,2.753,1482,2.425,1516,3.755,1715,3.177,1727,3.177,1789,3.527,1823,3.332,1856,3.527,1909,4.185,1910,3.788,1911,4.198,1912,3.788,1913,4.185]],["t/469",[9,1.163,42,2.543,55,3.614,62,1.444,64,3.131,86,2.497,132,3.043,171,2.26,262,2.963,264,2.497,302,2.592,471,1.968,503,4.948,513,3.131,573,2.543,586,2.34,602,3.131,667,2.821,747,3.466,759,3.466,785,2.193,818,3.466,825,3.441,854,3.791,895,4.31,955,2.963,992,3.791,997,3.614,1086,1.993,1106,4.013,1115,3.34,1222,3.131,1331,3.34,1350,3.466,1470,3.614,1636,4.013,1665,5.727,1690,3.614,1695,2.963,1696,3.466,1716,6.151,1794,4.229,1815,3.34,1854,4.013,1857,6.015,1858,6.881,1859,5.769,1865,3.614,1870,3.791,1884,4.31,1887,3.466,1891,4.31,1903,3.791,1914,4.31,1915,4.76,1916,4.76,1917,4.76,1918,6.151,1919,4.31,1920,4.013,1921,4.76,1922,4.76]],["t/471",[9,0.852,60,1.237,93,4.62,96,4.07,112,2.062,129,2.842,184,1.714,197,3.816,225,3.463,226,2.205,232,2.311,236,1.843,237,3.521,257,3.042,450,2.527,459,2.889,462,4.62,491,2.842,497,3.708,558,3.099,586,1.998,613,3.222,622,4.729,638,4.311,733,3.521,747,4.224,804,3.782,1028,4.087,1029,4.89,1069,2.311,1070,4.89,1312,2.889,1875,4.89,1923,5.252,1924,5.252,1925,5.801,1926,5.287,1927,5.801]],["t/473",[3,1.983,15,3.31,60,1.509,72,1.619,112,2.094,129,1.919,161,2.438,180,2.321,202,2.176,225,2.318,236,1.871,262,2.438,265,2.852,266,3.119,396,2.973,443,2.321,450,1.706,510,3.146,545,2.321,574,3.119,578,3.119,580,2.438,595,2.852,597,1.889,603,1.832,638,3.467,662,2.054,663,3.302,744,2.657,750,1.832,753,2.748,804,3.383,825,2.982,879,2.504,1001,2.657,1021,2.748,1030,2.504,1066,2.973,1116,1.859,1179,4.965,1217,4.69,1225,4.464,1255,2.852,1256,3.49,1267,2.054,1273,4.69,1322,2.973,1419,2.504,1444,4.69,1468,3.119,1622,3.119,1669,2.852,1674,4.69,1700,5.154,1711,3.119,1765,3.119,1793,4.69,1859,4.289,1888,4.965,1923,3.546,1924,3.546,1928,7.754,1929,4.69,1930,5.636,1931,6.407,1932,3.917,1933,3.302,1934,5.89,1935,3.546,1936,6.408,1937,3.546,1938,3.546]],["t/475",[3,3.271,60,1.377,115,3.067,161,4.021,184,1.177,202,3.588,204,3.588,570,2.976,595,4.704,603,3.021,613,3.588,638,4.098,794,5.145,804,2.776,1028,3.388,1066,4.904,1067,4.533,1255,4.704,1267,3.388,1312,3.217,1674,6.662,1700,4.704,1765,5.145,1793,5.145,1794,4.021,1926,4.383,1928,8.272,1939,6.351,1940,5.145,1941,4.904]],["t/477",[507,5.414,662,5.414,1098,3.697,1179,6.258,1423,5.406,1674,5.912,1928,7.699,1929,5.912,1930,5.912,1942,7.425,1943,7.425,1944,7.425,1945,7.425]],["t/479",[60,0.852,65,1.501,96,2.803,132,2.554,154,3.349,164,2.058,226,1.518,232,1.592,255,3.033,265,2.909,290,2.266,309,1.536,471,3.287,491,1.957,500,2.628,546,2.909,574,3.182,594,2.219,597,1.926,638,3.509,659,3.182,731,2.803,744,2.711,750,1.868,753,2.803,790,3.368,795,3.617,804,3.658,823,2.711,898,3.368,1018,2.711,1028,3.135,1098,1.99,1213,2.909,1216,2.711,1217,6.331,1225,3.39,1256,2.368,1322,3.033,1408,3.078,1416,2.803,1417,2.368,1465,4.538,1491,2.711,1532,2.803,1622,4.761,1695,2.487,1698,2.803,1700,4.353,1711,6.331,1721,3.182,1783,2.628,1808,3.617,1875,3.368,1883,3.617,1918,7.198,1931,6.781,1935,3.617,1936,5.412,1946,3.996,1947,3.617,1948,5.978,1949,5.978,1950,3.996,1951,3.368,1952,3.996,1953,3.617,1954,2.803,1955,3.996,1956,3.996,1957,3.996,1958,3.996,1959,3.182,1960,3.996,1961,3.996,1962,3.996,1963,3.996]],["t/481",[42,4.64,62,1.248,123,3.252,164,3.529,258,4.059,425,2.831,471,2.831,507,5.26,662,5.26,1184,4.925,1209,7.863,1408,2.944,1644,5.774,1931,5.2,1964,6.85,1965,6.85,1966,6.85,1967,5.2,1968,6.85,1969,6.85]],["t/483",[5,0.446,20,1.998,116,2.299,135,4.656,140,3.27,213,1.713,225,1.527,254,1.269,268,1.22,270,1.841,276,2.734,290,2.199,303,4.754,309,1.491,435,1.689,450,3.065,471,1.603,474,2.414,491,2.864,546,2.824,548,2.414,594,2.154,596,2.775,597,1.87,638,4.896,747,2.824,774,2.824,804,4.055,822,2.034,1001,2.631,1028,2.034,1056,2.824,1142,4.656,1213,2.824,1256,2.299,1263,3.27,1292,4.102,1364,2.551,1419,2.479,1423,2.824,1465,4.438,1565,3.27,1622,5.603,1630,3.27,1664,3.089,1708,5.603,1714,2.824,1752,4.257,1764,3.27,1859,6.432,1864,3.089,1879,3.27,1931,4.438,1940,3.089,1951,3.27,1970,3.879,1971,3.879,1972,4.928,1973,3.879,1974,3.879,1975,2.824,1976,3.512,1977,3.879,1978,3.879,1979,5.847,1980,3.27,1981,3.512,1982,3.879,1983,3.27,1984,3.879,1985,5.847,1986,3.512,1987,3.879,1988,3.879,1989,3.879]],["t/485",[40,4.416,164,4.012,180,4.615,221,6.202,471,3.219,476,5.464,507,4.932,662,4.932,1859,7.356,1990,7.788,1991,7.788]],["t/487",[15,4.039,21,3.499,123,3.224,154,3.175,184,1.731,281,4.467,330,5.155,450,2.958,495,6.148,638,4.232,723,4.122,783,3.562,804,2.918,1028,3.562,1066,5.155,1273,6.879,1288,5.724,1312,3.381,1700,4.945,1749,5.724,1914,6.148,1992,6.791,1993,4.765,1994,6.148,1995,6.791]],["t/489",[5,0.878,15,3.572,69,2.687,184,1.392,507,4.874,510,4.081,662,4.874,1086,3.198,1273,6.083,1482,4.426,1714,5.562,1994,6.915,1996,7.639,1997,6.439,1998,7.639]],["t/491",[29,3.326,33,4.821,60,1.694,62,1.447,262,4.944,981,6.325,1013,5.225,1030,5.078,1673,5.078,1854,6.696,1868,6.325,1959,6.325,1999,4.412]],["t/493",[9,0.877,11,3.931,20,3.078,41,4.824,60,1.904,184,1.448,225,2.352,232,2.38,234,2.297,236,1.898,262,3.719,462,4.758,507,4.993,547,4.192,627,4.758,638,2.927,648,3.931,662,4.993,733,3.627,766,3.719,1030,3.82,1065,4.758,1114,3.134,1408,2.568,1711,4.758,1887,4.351,1926,4.054,2000,8.085,2001,5.976,2002,5.976,2003,5.976,2004,5.976,2005,5.976,2006,5.976]],["t/495",[9,1.155,23,4.052,43,3.916,66,4.202,195,4.961,196,3.521,307,6.629,573,4.202,609,5.518,1490,7.12,1790,6.629,1933,6.629,2007,7.865]],["t/497",[5,0.816,9,1.304,56,3.049,62,1.618,97,2.932,111,1.207,165,3.532,197,4.666,254,2.905,262,4.415,500,4.666,597,3.42,1114,3.72,1184,4.022,1638,5.385,1715,5.385,1718,5.385,2008,5.98,2009,7.094,2010,7.094,2011,7.094]],["t/499",[1,1.861,4,1.967,5,0.761,9,1.248,14,3.473,45,4.019,60,1.812,69,2.329,79,2.433,94,4.121,112,2.354,216,3.096,230,3.353,231,5.027,254,2.167,596,3.143,819,5.995,1408,2.846,1417,3.924,1481,4.356,1482,3.837,1626,4.356,1739,5.273,1792,7.165,1826,5.582,2012,6.622,2013,6.622,2014,6.622,2015,6.622,2016,5.995]],["t/501",[9,1.155,23,4.052,60,1.677,165,3.916,327,4.895,492,4.661,586,2.709,1086,3.293,1098,3.916,1207,4.661,1470,5.97,1649,5.173,1828,7.12,1938,7.12]],["t/503",[1,2.388,4,1.967,9,1.248,44,4.019,60,1.812,169,2.754,195,3.473,256,4.019,677,3.606,701,3.244,784,4.233,797,4.822,812,5.995,822,3.473,830,5.027,992,5.273,1040,4.822,1143,5.29,1253,5.027,1491,4.492,1513,4.356,1647,5.995,1727,5.027,1805,4.822,2017,5.995,2018,6.622,2019,6.622,2020,4.492]],["t/505",[4,1.919,9,0.948,23,3.328,58,2.976,60,1.978,62,1.177,111,0.878,170,3.743,171,3.067,183,2.373,184,1.525,194,4.13,225,2.543,226,2.455,228,3.743,238,3.451,250,2.284,586,2.225,801,4.533,803,4.533,1020,4.704,1098,3.217,1206,3.588,1408,2.776,1467,4.383,1482,3.743,1714,4.704,1814,5.145,1815,4.533,1816,5.849,2021,5.446]],["t/507",[1,1.758,2,2.801,5,0.719,60,1.747,62,1.493,67,4.75,69,2.882,170,3.625,184,1.14,250,1.54,471,2.587,546,5.966,586,3.146,601,4.116,783,3.282,1069,2.492,1086,3.825,1116,3.89,1132,4.116,1207,4.856,1668,4.245,1693,4.983,1694,5.274,1695,3.894,1696,4.556,1697,5.274,1698,4.39,1738,6.525,1814,4.983]],["t/509",[5,0.714,21,3.199,60,1.738,62,1.131,69,2.184,70,3.597,79,2.281,111,0.844,127,2.306,141,3.199,164,3.199,184,1.485,232,2.473,234,3.134,235,2.668,250,2.006,455,2.668,474,3.864,524,3.448,525,3.208,526,3.134,586,2.807,625,4.944,800,4.713,815,5.621,1024,5.233,1220,4.128,1349,4.944,1408,2.668,1626,4.084,1649,4.084,1651,5.621,2022,5.621]],["t/511",[4,1.816,5,0.703,10,3.908,17,1.85,60,1.926,62,1.47,111,0.831,127,2.271,168,2.35,182,2.995,184,1.646,213,2.699,234,2.35,235,3.882,236,3.051,250,1.505,450,2.663,460,3.095,497,3.908,567,3.805,586,2.779,677,3.329,734,4.641,785,2.816,818,4.451,1027,4.868,1028,3.206,1649,4.021,1729,4.868,1749,5.153,1751,4.641,1822,5.534]],["t/513",[17,1.909,60,1.756,62,1.501,69,2.218,79,2.317,110,6.559,111,0.858,127,2.343,184,1.501,225,2.482,226,3.13,232,3.281,233,4.4,250,2.257,267,3.194,325,4.149,586,2.172,695,4.788,773,6.942,804,2.71,806,5.316,918,5.316,1051,4.592,1220,3.194,1261,3.925,1649,4.149,2023,5.71,2024,6.307,2025,6.307]],["t/515",[2,2.655,9,1.161,11,3.901,45,3.599,60,1.264,62,1.441,112,2.109,169,1.921,184,1.802,185,3.901,189,3.111,192,2.773,203,4.148,216,2.773,234,2.28,236,1.884,270,2.816,428,4.502,455,2.549,459,3.938,525,2.334,547,4.161,558,3.168,628,4.161,766,3.691,772,3.691,785,2.732,825,3.003,1069,2.362,1703,5.369,2026,9.207,2027,5.931,2028,5.931,2029,5.931]],["t/517",[9,1.143,62,1.419,69,2.739,72,3.219,975,3.878,1086,3.261,1116,3.697,1220,3.943,1265,5.912,1267,4.084,1466,5.671,1698,5.464,2030,5.912,2031,7.05,2032,5.671]],["t/519",[5,0.354,9,0.893,17,0.933,29,2.901,51,1.343,62,0.892,65,1.158,69,1.721,72,3.326,95,1.325,97,1.274,104,2.091,108,1.42,111,1.094,129,1.51,138,4.846,140,2.598,169,0.999,179,1.588,184,1.263,187,1.919,197,2.028,201,1.712,204,1.712,213,1.361,236,0.979,250,0.759,254,2.268,259,1.919,267,3.082,273,4.62,279,2.028,290,1.748,291,2.981,327,3.046,328,2.455,330,2.34,332,2.163,460,1.561,519,2.163,524,1.712,526,2.906,559,2.028,570,1.42,586,2.096,717,1.919,772,1.919,802,2.34,809,2.028,829,2.34,834,2.028,975,1.535,1013,2.028,1069,1.228,1074,5.13,1122,4.129,1182,3.897,1183,1.871,1184,1.748,1220,4.676,1229,1.971,1267,1.617,1316,2.455,1419,1.971,1474,2.791,1532,2.163,1547,2.245,1649,2.028,1754,2.455,1790,2.598,1794,1.919,1803,2.598,1805,2.245,1817,2.163,1911,2.091,1941,2.34,1954,2.163,2031,6.273,2032,2.245,2033,3.083,2034,4.894,2035,3.083,2036,2.791,2037,3.083,2038,3.083,2039,2.791,2040,2.791,2041,4.894,2042,3.083,2043,2.455,2044,4.894,2045,3.083,2046,2.791,2047,4.43,2048,2.791,2049,4.431,2050,3.083,2051,3.083,2052,3.083,2053,2.598,2054,2.791,2055,3.083,2056,2.455,2057,3.083,2058,3.083,2059,3.083,2060,3.083,2061,3.083,2062,3.083,2063,2.791]],["t/521",[9,1.042,60,1.079,62,1.293,69,3.124,79,3.011,97,2.093,108,2.333,138,4.032,156,2.757,184,1.619,213,2.235,220,4.584,225,1.993,268,1.593,357,2.205,406,7.487,580,3.151,597,2.441,614,3.237,677,2.757,750,2.367,801,3.552,824,3.844,1008,3.865,1086,2.972,1116,4.217,1143,3.151,1265,3.844,1408,2.176,1417,3.001,1423,3.687,1425,3.435,1426,6.426,1483,4.98,1512,3.33,1638,3.844,1708,4.032,1737,5.983,1882,3.844,1975,3.687,2064,4.584,2065,5.063,2066,5.063,2067,5.063,2068,5.063,2069,5.063,2070,5.063,2071,4.268,2072,3.844]],["t/523",[51,1.567,54,1.371,62,1.224,66,1.922,69,2.86,70,2.085,79,2.029,97,2.283,112,1.279,138,2.865,156,3.007,182,1.763,184,1.564,188,3.033,204,3.732,230,1.822,307,3.033,342,3.033,406,3.033,538,3.199,559,2.367,717,2.239,742,3.258,772,3.437,824,2.732,880,2.525,975,3.346,1008,3.007,1067,2.525,1086,2.312,1099,3.874,1116,3.578,1118,3.874,1122,4.559,1128,2.367,1183,3.351,1206,1.999,1216,3.746,1220,1.822,1256,3.982,1258,3.033,1265,2.732,1267,3.524,1293,3.033,1326,2.62,1397,3.258,1466,2.62,1471,4.893,1479,3.874,1692,4.999,1695,2.239,1860,2.732,1886,3.033,1939,4.192,1941,2.732,2049,4.021,2053,3.033,2072,2.732,2073,3.598,2074,5.522,2075,3.598,2076,3.598,2077,6.083,2078,5.522,2079,3.598,2080,6.72,2081,3.033,2082,3.598,2083,3.598,2084,3.598,2085,3.258,2086,4.427,2087,6.72,2088,3.598,2089,3.598,2090,5.522,2091,3.598,2092,3.258,2093,3.598]],["t/525",[81,4.578,97,3.041,256,4.464,274,4.086,277,4.839,701,3.603,1082,5.584,1115,5.161,1236,5.652,1276,5.076,1408,4.234,2008,6.201,2020,4.99,2094,6.659,2095,6.659,2096,6.659]],["t/527",[192,2.926,603,2.926,752,4.116,785,2.883,1040,4.556,1118,4.39,1236,3.894,1283,3.548,1408,2.689,1413,4,1516,5.545,1721,4.983,1824,6.801,1926,4.245,1954,4.39,2097,8.776,2098,8.271,2099,5.665,2100,6.907,2101,4.75,2102,5.665,2103,5.665,2104,5.665,2105,5.665,2106,5.665,2107,5.665,2108,5.665,2109,4.983,2110,5.665]],["t/529",[5,0.802,58,2.275,68,2.926,69,1.737,97,2.041,108,3.213,112,1.755,154,2.309,168,1.898,169,1.6,192,4.497,197,3.248,236,2.568,325,3.248,455,2.122,570,3.213,580,3.073,603,4.107,617,4.981,667,2.926,745,2.861,752,4.587,783,2.59,785,4.269,798,2.997,809,3.248,1069,2.778,1256,2.926,1276,4.526,1379,3.595,1408,2.122,1413,5.923,1673,3.156,1774,3.748,1824,6.163,1983,4.162,2020,3.35,2101,3.748,2111,4.162,2112,4.938,2113,4.938,2114,4.938]],["t/531",[1,1.892,5,0.774,68,5.092,69,2.369,81,4.191,115,3.197,192,3.149,282,4.35,510,3.597,525,3.382,570,3.102,628,4.724,677,3.667,785,3.958,1018,5.829,1115,4.724,1236,4.191,1276,3.469,1408,2.894,1413,5.492,1783,5.652,1824,6.028,2115,5.112]],["t/533",[58,4.257,163,4.709,256,4.592,270,3.592,489,6.025,570,3.486,701,3.706,785,4.257,822,3.968,1222,4.977,1276,3.898,1413,4.836,1673,4.836,2116,6.849,2117,6.377,2118,7.566]],["t/535",[1,2.059,5,0.609,31,4.467,72,2.191,154,2.478,169,1.717,192,2.478,210,4.797,263,3.859,322,4.467,455,2.277,478,4.023,489,4.22,538,3.07,570,3.375,615,3.14,708,6.176,729,5.14,785,4.381,1009,3.387,1098,4.511,1316,4.22,1408,3.148,1413,6.078,1681,4.023,1726,5.14,1783,3.486,2040,4.797,2109,7.214,2111,4.467,2119,4.797,2120,8.397,2121,7.326,2122,5.299,2123,4.797,2124,5.299,2125,5.299,2126,4.797,2127,4.467,2128,5.299]],["t/537",[68,2.708,69,1.607,86,2.396,143,3.206,180,2.708,187,2.844,192,4.625,230,2.314,274,2.538,302,2.488,326,3.327,420,4.804,427,3.206,491,2.238,513,5.094,567,4.106,570,2.105,594,2.538,701,2.238,785,4.714,797,3.327,825,2.314,1040,3.327,1098,2.275,1115,3.206,1132,3.005,1236,2.844,1408,2.835,1413,6.323,1824,4.629,1926,3.1,2030,3.468,2111,3.851,2129,4.569,2130,4.569,2131,4.569,2132,8.48,2133,4.569,2134,4.136,2135,4.569,2136,4.569,2137,8.48,2138,5.008,2139,4.136,2140,4.569,2141,4.569,2142,3.851,2143,4.569,2144,4.569,2145,3.851,2146,4.569]],["t/539",[513,4.839,525,2.895,704,5.584,955,4.578,1018,6.684,1028,3.858,1236,4.578,1276,5.076,1322,5.584,1408,3.161,1750,5.584,1783,6.481,2147,6.659,2148,7.356,2149,6.659]],["t/541",[15,3.44,28,5.356,39,4.578,179,3.79,197,4.839,276,3.44,344,4.702,481,4.171,497,4.702,511,5.161,1069,2.93,1156,4.99,1236,5.652,1276,4.679,1384,5.858,1394,5.858,1408,3.903,1698,5.161]],["t/543",[481,4.549,545,4.755,667,4.755,1236,4.993,1408,3.448,2115,6.091,2150,7.264,2151,6.763,2152,7.264,2153,6.763,2154,6.763,2155,7.264]],["t/545",[5,0.846,9,0.783,14,2.798,18,1.459,62,1.341,64,3.509,69,1.876,111,0.725,184,1.84,196,2.388,204,4.681,254,1.746,325,3.509,510,2.85,613,2.963,662,2.798,723,4.467,1058,3.41,1065,5.861,1086,3.082,1220,2.701,1261,5.245,1266,3.884,1289,3.619,1410,4.05,1470,4.05,1479,3.743,1689,4.05,1780,4.05,1999,2.963,2032,3.884,2056,4.248,2086,2.905,2138,5.587,2156,4.829,2157,6.615,2158,7.36,2159,4.05,2160,4.829,2161,4.829,2162,4.497,2163,4.829]],["t/547",[5,0.502,9,0.641,18,1.195,20,2.251,60,1.361,111,1.328,112,1.553,129,2.14,143,3.065,154,2.043,184,1.846,196,1.956,226,1.66,261,4.848,279,2.874,288,3.682,465,2.651,510,2.334,524,4.612,526,2.902,538,2.531,586,2.599,592,3.181,637,3.316,682,5.781,723,2.651,809,2.874,973,4.332,1058,2.792,1065,5.085,1069,3.307,1086,1.829,1171,3.955,1206,2.426,1256,2.589,1261,4.697,1269,3.889,1286,4.848,1312,2.175,1379,3.181,1673,2.792,1734,3.316,1735,3.682,1752,3.181,1767,3.316,1972,5.383,1999,2.426,2021,3.682,2032,3.181,2164,4.369,2165,4.369,2166,3.955,2167,5.383,2168,3.955,2169,3.479,2170,5.383]],["t/549",[5,0.298,9,0.624,17,1.637,29,1.085,42,1.384,54,1.056,62,0.472,65,1.598,66,1.384,81,1.613,86,2.231,106,3.097,108,1.96,111,1.333,122,0.883,184,1.786,195,2.231,196,2.422,204,2.362,213,1.144,226,1.616,267,2.154,268,0.815,279,1.704,327,1.613,328,2.063,357,1.852,455,1.828,471,2.236,512,1.967,524,1.439,526,0.996,568,2.063,571,1.967,581,1.704,596,2.019,613,1.439,662,2.231,667,1.535,750,2.928,766,1.613,822,2.231,1009,1.656,1015,1.967,1067,3.796,1069,3.706,1086,1.085,1113,1.818,1128,4.119,1156,1.758,1183,1.572,1206,1.439,1220,3.171,1256,1.535,1261,5.283,1266,1.887,1269,3.226,1286,6.633,1290,3.387,1292,1.818,1312,1.29,1415,3.939,1425,1.758,1491,1.758,1513,1.704,1532,1.818,1643,2.184,1645,2.184,1669,3.097,1673,1.656,1726,1.818,1735,2.184,1864,2.063,1930,3.387,1939,1.967,1972,2.184,1999,1.439,2043,3.387,2086,1.411,2157,1.887,2167,5.278,2168,6.26,2170,2.184,2171,2.063,2172,1.967,2173,2.346,2174,5.41,2175,2.591,2176,2.346,2177,2.184,2178,2.184,2179,2.346,2180,2.591,2181,2.591,2182,2.591,2183,2.063,2184,1.967,2185,2.346,2186,2.591,2187,2.346,2188,2.346,2189,2.184,2190,2.346,2191,2.591,2192,2.591,2193,2.591,2194,2.591,2195,2.591,2196,2.063]],["t/551",[5,0.928,9,0.605,17,1.247,18,1.995,21,2.122,25,4.023,39,2.564,54,1.023,62,0.751,66,2.201,72,1.703,79,1.513,111,0.56,156,3.33,165,2.051,184,1.329,212,3.73,213,1.819,226,1.566,254,1.348,268,1.924,270,1.956,360,2.161,507,2.161,585,3,601,2.71,662,3.208,757,2.71,785,1.898,822,2.161,823,2.795,844,2.288,963,3.281,986,2.795,1002,3.127,1008,3.33,1069,2.436,1224,3.281,1225,3.468,1256,3.625,1261,2.564,1267,2.161,1269,2.122,1282,2.795,1283,2.336,1469,3.281,1513,2.71,1673,3.91,1817,2.89,1941,3.127,1959,3.281,1999,5.018,2086,2.243,2157,3,2183,3.281,2197,5.537,2198,4.12,2199,3.73,2200,4.12,2201,3.281,2202,6.116,2203,4.12,2204,4.12,2205,4.12,2206,4.12,2207,4.12,2208,4.12,2209,4.12,2210,3.473,2211,4.12,2212,4.12,2213,3.73,2214,3.73,2215,4.12,2216,3.73,2217,3.73,2218,4.12,2219,4.12,2220,3.473,2221,4.12,2222,3.73,2223,3.473,2224,3.281]],["t/553",[5,0.695,9,0.763,17,0.741,24,1.128,27,3.526,44,2.463,51,2.264,62,0.446,64,2.669,65,0.92,66,2.777,104,1.66,111,1.089,112,0.87,129,1.988,156,2.21,161,1.523,169,0.793,184,1.602,187,1.523,196,1.096,197,1.61,204,2.887,213,1.081,225,0.963,226,0.93,231,1.858,261,1.858,268,0.77,270,1.162,282,1.239,290,1.388,325,1.61,357,2.264,387,1.782,420,1.782,471,2.149,514,1.782,519,1.717,558,1.308,559,1.61,560,1.388,570,1.128,574,3.232,596,2.468,619,1.45,662,2.128,701,1.199,723,1.485,766,1.523,772,2.526,785,1.128,816,2.216,822,1.284,823,1.66,825,1.239,955,1.523,999,1.565,1008,2.21,1021,1.717,1035,1.66,1040,1.782,1064,1.717,1069,3.191,1079,1.949,1086,1.025,1116,1.926,1128,2.669,1185,2.216,1220,2.632,1225,1.388,1253,1.858,1261,4.986,1266,1.782,1269,2.091,1286,3.081,1289,3.526,1311,1.61,1415,1.782,1425,1.66,1471,1.782,1479,1.717,1513,1.61,1533,1.949,1681,3.081,1748,2.216,1780,1.858,1815,1.717,1817,1.717,1860,1.858,1864,1.949,1920,2.063,1954,1.717,1967,1.858,1980,2.063,1999,3.359,2030,1.858,2048,2.216,2086,2.831,2138,1.858,2157,4.404,2159,3.946,2160,2.216,2161,4.706,2162,3.421,2163,3.674,2173,4.706,2188,4.706,2197,3.674,2210,2.063,2220,3.421,2224,1.949,2225,2.448,2226,4.058,2227,4.058,2228,2.448,2229,2.448,2230,2.448,2231,2.448,2232,2.448,2233,2.216,2234,2.448,2235,2.448,2236,2.448,2237,2.063,2238,2.448,2239,2.448,2240,2.448,2241,2.448,2242,2.448,2243,2.448,2244,1.858,2245,4.058,2246,2.448,2247,2.448,2248,2.448,2249,4.058,2250,2.448,2251,2.448,2252,2.448,2253,2.448,2254,2.448,2255,2.063,2256,2.448,2257,2.448,2258,2.216,2259,2.063]],["t/555",[9,1.518,10,3.48,54,1.352,56,2.34,58,2.508,60,1.954,62,0.992,69,1.915,102,3.48,112,1.936,163,3.388,164,2.805,171,2.584,184,0.992,250,1.837,510,2.908,586,2.57,788,3.693,804,2.34,1086,2.279,1098,2.711,1116,2.584,1207,3.226,1246,4.929,1269,2.805,1276,2.805,1408,2.34,1417,3.226,1481,3.581,1482,3.154,1488,5.435,1513,3.581,1645,4.589,1668,3.693,1689,4.133,1718,4.133,1727,4.133,1738,4.335,1789,4.589,1823,4.335,1986,4.929,1999,3.024,2190,4.929,2260,4.589,2261,5.666]],["t/557",[5,1.23,141,4.095,168,2.297,216,2.794,274,3.319,493,5.41,525,2.352,538,3.462,558,3.192,594,3.319,1028,3.134,1082,4.536,1100,4.758,1276,5.565,1389,5.037,1759,6.015,2095,5.41,2096,5.41,2262,5.976,2263,5.976,2264,5.037,2265,7.948,2266,5.41]],["t/559",[5,0.743,603,3.021,752,4.25,1118,4.533,1276,3.328,1283,3.663,1516,5.631,1721,5.145,1759,3.921,1824,6.51,1926,4.383,1954,4.533,2097,8.884,2098,8.4,2099,5.849,2100,7.052,2101,4.904,2102,5.849,2103,5.849,2104,5.849,2105,5.849,2106,5.849,2107,5.849,2108,5.849,2109,5.145,2110,5.849]],["t/561",[1,0.98,5,0.758,11,3.546,40,1.978,58,1.607,69,1.227,78,2.94,81,2.171,102,3.446,123,2.559,141,3.395,161,2.171,169,1.747,179,1.797,183,1.281,216,1.631,227,2.294,247,1.709,330,2.648,420,2.54,424,3.158,460,2.73,486,2.54,497,2.23,525,2.918,558,2.88,570,2.484,598,1.797,627,2.777,631,2.94,663,2.94,677,2.936,701,3.228,752,3.546,880,2.447,955,2.171,1028,1.829,1058,2.23,1146,2.777,1160,3.158,1183,2.117,1216,2.366,1276,4.825,1297,2.648,1316,2.777,1389,2.94,1393,2.648,1483,3.782,1519,2.777,1574,2.777,1649,2.294,1652,2.648,1693,2.777,1726,2.447,1729,2.777,1830,3.158,1887,2.54,1903,2.777,1976,3.158,1983,4.544,2008,2.94,2101,5.002,2115,2.648,2119,3.158,2147,3.158,2171,4.293,2184,2.648,2267,5.555,2268,4.881,2269,5.391,2270,5.966,2271,5.391,2272,3.488,2273,3.488,2274,3.488,2275,3.488,2276,2.94,2277,3.488,2278,4.881,2279,3.488,2280,3.158,2281,3.488,2282,4.293,2283,2.777,2284,3.488,2285,3.158,2286,6.249,2287,2.94,2288,3.488,2289,3.488,2290,3.488,2291,2.94,2292,3.488,2293,5.391,2294,5.391,2295,3.488]],["t/563",[2,1.754,5,0.45,14,2.054,52,1.859,102,2.504,141,3.034,156,2.133,165,3.524,168,1.506,179,2.018,216,3.31,219,3.125,227,3.874,247,3.467,263,2.852,270,1.859,274,2.176,282,1.983,344,3.765,387,2.852,455,1.683,510,2.093,558,3.781,563,3.302,570,1.805,598,3.034,701,3.467,750,1.832,809,2.577,825,2.982,880,2.748,886,3.119,999,2.504,1028,2.054,1051,5.154,1058,2.504,1069,1.56,1156,2.657,1276,4.348,1297,4.471,1425,3.996,1519,4.69,1652,4.471,1763,3.119,1774,4.471,1903,3.119,1975,5.154,2053,4.965,2054,3.546,2064,3.546,2184,4.471,2196,3.119,2259,3.302,2267,3.302,2268,3.546,2280,3.546,2286,4.965,2296,8.44,2297,3.917,2298,3.917,2299,3.546,2300,3.917,2301,5.332,2302,3.917,2303,5.89,2304,3.917,2305,5.332,2306,3.546,2307,3.917,2308,3.917,2309,3.917,2310,3.917,2311,3.917,2312,3.917,2313,3.917,2314,3.917]],["t/565",[5,0.725,39,3.925,68,3.738,72,2.607,79,2.317,97,2.607,112,2.242,189,3.308,216,2.949,460,3.194,481,3.576,525,3.242,570,2.906,595,4.592,667,3.738,752,4.149,1146,5.022,1276,4.243,1479,4.425,1516,3.828,1759,3.828,1911,4.279,1975,4.592,2026,7.456,2134,5.71,2153,5.316,2154,5.316,2315,6.307,2316,8.236,2317,5.71,2318,6.307,2319,8.236,2320,6.307,2321,6.307]],["t/567",[1,1.379,5,0.926,56,2.109,141,3.577,216,2.294,513,4.567,525,2.733,570,4.422,598,3.577,739,3.908,783,2.574,955,4.321,1018,6.954,1028,2.574,1040,3.573,1188,3.725,1236,3.054,1276,5.467,1408,2.109,1519,3.908,1759,2.978,1783,6.743,1887,3.573,2016,4.442,2115,3.725,2145,4.136,2171,3.908,2196,3.908,2259,4.136,2264,4.136,2267,4.136,2322,4.907,2323,6.943,2324,4.907,2325,4.442]],["t/569",[5,0.87,17,1.682,69,2.663,78,4.685,81,3.459,102,3.553,169,1.801,267,2.814,525,2.188,552,4.685,567,3.459,570,3.488,580,3.459,667,3.294,729,3.9,1183,3.373,1184,3.152,1216,3.771,1276,4.762,1606,3.553,1759,3.373,1771,4.219,1912,5.032,1929,4.426,2101,4.219,2115,4.219,2149,7.794,2170,4.685,2282,4.426,2283,4.426,2325,5.032,2326,4.685,2327,5.032,2328,5.558,2329,5.032,2330,5.558,2331,5.558,2332,5.558,2333,5.558,2334,5.558,2335,6.853,2336,4.685,2337,5.558,2338,5.032,2339,5.558,2340,5.558,2341,5.558]],["t/571",[5,1.027,69,2.518,102,4.575,179,3.687,216,4.175,525,2.817,1276,5.014,1714,5.212,1755,5.433,1759,4.344,1896,6.48,2276,6.033,2283,5.7,2287,6.033,2335,6.48,2336,6.033,2342,7.158,2343,7.158,2344,7.158,2345,7.158]],["t/573",[5,1.032,15,3.377,28,5.259,39,4.495,179,3.721,197,4.751,276,3.377,344,4.617,497,4.617,511,5.067,1028,3.788,1069,2.877,1156,4.9,1276,5.267,1384,5.752,1394,5.752,1698,5.067,1759,5.45]],["t/575",[5,0.887,11,5.073,179,3.973,195,4.045,1276,3.973,1401,6.982,1759,4.681,2020,5.232,2264,6.501,2282,7.445,2346,6.982,2347,6.982,2348,6.982,2349,6.982,2350,6.982]],["t/577",[5,0.672,19,5.083,28,3.396,29,1.215,63,1.682,66,1.551,69,1.641,87,4.258,88,2.037,102,1.856,112,1.032,150,2.312,169,0.94,171,1.378,174,2.114,187,2.903,195,1.522,216,2.181,225,1.142,226,1.103,230,1.47,257,2.446,267,2.362,290,1.646,302,1.581,327,1.807,420,4.258,425,1.2,481,1.646,488,2.312,494,2.447,504,2.114,510,1.551,525,1.142,538,1.682,566,2.204,567,1.807,570,2.149,598,1.495,677,2.54,732,2.204,783,1.522,820,2.628,1069,1.858,1115,2.037,1156,3.164,1161,2.447,1190,2.628,1198,2.447,1276,3.45,1396,2.447,1419,1.856,1468,2.312,1516,2.831,1660,2.628,1667,2.447,1669,2.114,1671,2.312,1684,4.223,1695,2.903,1714,3.396,1728,2.628,1755,3.541,1759,2.831,1783,1.909,1868,2.312,1870,2.312,1926,1.969,1929,2.312,1931,2.204,2032,2.114,2100,2.447,2109,2.312,2123,2.628,2126,2.628,2145,2.447,2166,2.628,2266,2.628,2282,2.312,2283,5.842,2285,2.628,2286,2.447,2287,2.447,2317,4.223,2326,2.447,2336,2.447,2346,5.294,2347,7.998,2348,4.223,2349,8.801,2351,2.903,2352,2.903,2353,4.665,2354,2.903,2355,5.294,2356,2.903,2357,2.903,2358,2.903,2359,2.903,2360,2.903,2361,4.223,2362,2.903,2363,2.903,2364,2.903,2365,2.903,2366,2.903,2367,2.628,2368,2.903,2369,2.903,2370,2.628,2371,2.447,2372,2.628,2373,2.903,2374,2.903,2375,2.903,2376,2.903,2377,2.903,2378,2.628,2379,2.903,2380,2.903,2381,2.903,2382,2.628,2383,2.903,2384,2.903,2385,2.903,2386,2.903]],["t/579",[5,1.124,28,3.466,33,2.889,39,2.963,69,1.674,137,4.013,153,3.614,195,2.497,197,4.47,306,4.013,420,3.466,455,2.046,481,2.699,506,4.013,538,2.758,545,2.821,592,3.466,607,4.013,622,2.889,667,2.821,745,2.758,1115,3.34,1161,4.013,1276,5.243,1410,3.614,1516,2.889,1634,4.013,1695,4.229,1759,5.936,1826,4.013,1911,3.229,1937,4.31,1947,4.31,2020,3.229,2138,3.614,2150,4.31,2151,4.013,2152,4.31,2153,4.013,2154,4.013,2155,4.31,2270,4.31,2278,4.31,2326,4.013,2350,4.31,2355,4.31,2371,4.013,2387,6.795,2388,4.76,2389,4.76,2390,4.76,2391,4.76,2392,4.76,2393,4.76,2394,5.411,2395,4.76]],["t/582",[1,1.255,2,2,4,1.327,9,0.953,18,1.221,43,2.224,60,1.384,62,0.814,70,3.76,79,1.641,111,1.212,115,2.12,116,2.647,156,2.432,161,2.78,165,2.224,169,1.447,184,1.624,204,2.481,253,1.823,286,3.03,291,3.179,440,2.938,471,1.846,510,2.386,561,3.467,586,2.235,599,3.534,753,3.134,826,3.765,879,2.855,955,2.78,1009,2.855,1013,2.938,1030,2.855,1056,3.252,1069,1.779,1080,3.404,1091,3.391,1116,2.12,1122,4.403,1220,3.286,1261,2.78,1267,2.342,1283,2.533,1311,2.938,1326,3.252,1395,3.391,1606,4.149,1652,3.391,1751,3.391,1800,3.557,1993,3.134,2086,4.163,2261,3.391,2396,4.467,2397,3.252,2398,4.467,2399,6.087,2400,4.044,2401,3.252,2402,3.557,2403,5.471,2404,5.875,2405,4.044,2406,4.044]],["t/584",[4,1.422,9,1.002,60,1.455,62,0.873,70,3.954,79,1.759,111,1.245,115,2.273,156,2.608,161,2.98,165,2.385,169,1.551,184,1.669,204,2.66,253,1.955,286,3.249,291,3.343,440,3.15,471,1.98,510,2.558,561,3.645,586,2.35,599,3.716,753,3.36,826,4.037,879,3.061,1009,3.061,1056,3.487,1069,1.908,1080,2.512,1091,3.635,1116,2.273,1122,4.629,1220,3.455,1261,2.98,1267,2.512,1283,2.715,1311,3.15,1326,3.487,1395,3.635,1606,4.362,1652,3.635,1751,3.635,1800,3.814,1993,3.36,2086,4.329,2261,3.635,2399,6.331,2400,4.336,2401,3.487,2402,3.814,2403,5.752,2404,6.178,2405,4.336,2406,4.336]],["t/587",[23,4.78,62,1.177,70,3.743,111,1.137,184,1.525,357,3.644,440,4.25,586,2.225,1116,3.971,1220,4.698,1266,4.704,1267,3.388,1395,4.904,1993,5.87,2086,5.052,2306,5.849,2399,6.662,2401,4.704,2407,6.461,2408,6.461,2409,6.461,2410,6.461,2411,6.461,2412,6.461]],["t/589",[2,1.864,4,1.236,62,1.123,88,2.921,111,1.381,112,1.48,116,3.653,184,1.71,196,2.759,204,2.312,234,1.6,236,1.958,245,2.007,268,1.939,455,1.789,586,3.232,613,2.312,638,3.019,648,2.738,662,2.183,804,2.649,879,2.661,948,5.58,986,5.875,1069,1.658,1116,1.976,1181,3.509,1196,6.46,1261,4.568,1266,4.488,1269,2.145,1283,2.36,1513,5.336,1606,2.661,1673,2.661,1887,5.344,1941,4.679,1993,2.921,1999,2.312,2077,3.769,2086,2.267,2167,3.509,2397,3.031,2401,3.031,2402,3.315,2413,6.163,2414,6.163,2415,4.163,2416,4.163,2417,4.163,2418,4.163,2419,6.163,2420,4.163,2421,4.163,2422,4.163]],["t/591",[17,1.822,62,1.456,70,3.488,111,1.086,184,1.634,204,3.344,250,1.482,392,3.96,440,3.96,599,4.881,825,3.049,1116,2.858,1220,4.539,1374,5.451,1395,4.57,1469,4.794,1606,3.849,1673,3.849,1726,4.224,1993,5.605,2086,4.881,2159,4.57,2201,4.794,2399,6.361,2401,4.384,2402,4.794,2423,6.021,2424,6.021,2425,6.021,2426,6.021,2427,6.021,2428,6.021,2429,6.021]],["t/594",[9,1.006,18,1.873,60,1.46,62,1.583,70,3.969,116,5.147,202,3.804,268,2.154,276,3.203,492,4.059,670,4.378,723,4.157,770,5.455,879,4.378,1071,5.2,1080,4.555,1188,5.2,1705,5.774,1999,3.804,2117,5.774,2397,6.324,2430,6.201,2431,8.686,2432,6.85]],["t/596",[5,0.788,9,1.006,18,1.873,60,1.852,116,5.652,132,4.378,168,2.633,193,5.774,224,3.355,254,2.241,275,4.988,282,3.468,455,2.944,492,4.059,750,3.203,963,5.455,1080,3.592,1377,5.455,1805,4.988,2169,5.455,2397,6.324,2430,6.201,2433,8.686,2434,6.85]],["t/598",[15,3.408,18,2.47,86,3.823,112,2.591,185,4.794,192,3.408,492,4.32,670,6.556,965,6.598,1080,3.823,1491,4.945,1638,5.533,2435,9.031,2436,7.289,2437,7.289,2438,6.144,2439,7.289]],["t/600",[6,4.356,9,1.504,86,3.473,116,5.563,164,3.411,492,3.924,752,4.356,834,4.356,1080,3.473,1222,4.356,1225,3.755,1488,6.189,1667,5.582,1815,4.646,1933,5.582,1980,5.582,1999,5.214,2117,5.582,2261,5.027,2361,5.995,2397,6.189,2440,6.622,2441,6.622]],["t/602",[9,1.529,21,3.328,29,2.705,87,4.704,115,3.067,129,4.098,169,2.093,171,3.067,247,4.098,269,5.849,326,4.704,404,5.849,492,5.499,540,5.849,880,5.87,981,5.145,1001,4.383,1297,4.904,1763,6.662,1801,5.446,2237,5.446,2442,6.461,2443,5.849,2444,5.446,2445,5.849]],["t/604",[1,2.222,9,1.161,21,3.056,60,1.264,102,3.791,108,3.644,115,3.754,122,2.021,171,2.816,247,2.905,250,1.946,271,5.759,292,4.999,303,3.599,309,2.28,323,4.723,455,2.549,492,4.687,500,3.901,521,4.319,545,3.515,566,4.502,570,2.732,723,3.599,729,4.161,783,3.111,792,4.999,818,4.319,866,4.161,1044,5.369,1058,3.791,1069,2.362,1413,3.791,1669,4.319,1690,6.004,1751,4.502,2446,5.369,2447,5.369,2448,4.999]],["t/606",[1,1.432,5,0.586,9,1.518,20,3.673,97,2.947,164,4.589,213,3.631,224,2.496,247,4.028,267,2.58,271,3.71,291,2.496,303,3.093,455,2.19,492,4.874,494,6.01,545,3.02,614,3.257,722,3.868,733,3.093,783,2.672,814,6.01,824,3.868,1058,3.257,1069,2.03,1476,4.613,1665,4.295,1700,3.71,1750,3.868,1815,3.575,1975,3.71,2184,3.868,2237,4.295,2445,4.613,2449,7.13,2450,5.096,2451,5.096,2452,5.096,2453,7.13,2454,5.096,2455,5.096,2456,5.096,2457,5.096,2458,6.454,2459,5.096]],["t/608",[1,2.385,5,0.622,9,1.453,60,1.153,66,2.889,69,1.902,98,6.442,164,4.372,167,2.944,169,1.752,171,2.567,224,2.649,247,4.157,291,2.649,309,2.079,488,4.306,492,5.865,570,2.491,592,3.937,745,3.133,767,4.558,824,6.936,1028,2.836,1058,3.456,1419,5.425,1682,4.306,1771,4.105,1774,4.105,2189,4.558,2305,4.895,2447,6.725,2448,4.558,2460,5.407,2461,6.725,2462,5.407]],["t/610",[1,1.759,3,2.153,5,0.854,9,1.453,20,3.828,21,3.225,56,1.827,66,3.344,70,3.627,79,1.562,98,3.228,102,2.718,103,2.884,139,7.42,144,4.118,147,3.096,152,3.849,190,3.386,205,3.849,213,1.877,224,2.083,247,4.28,280,5.277,284,2.884,286,2.884,331,4.51,481,2.411,486,3.096,492,5.416,545,3.71,561,3.344,583,2.718,596,2.018,667,2.52,722,3.228,798,2.58,962,3.584,1056,3.096,1106,5.277,1532,2.983,1633,3.584,1669,4.558,1774,3.228,1910,3.849,2020,2.884,2291,3.584,2444,3.584,2458,3.849,2461,5.668,2463,6.26,2464,4.252,2465,6.26,2466,6.26,2467,4.252,2468,4.252,2469,6.26,2470,4.252,2471,4.252,2472,4.252]],["t/612",[3,2.937,5,0.667,9,1.381,60,1.237,97,2.398,165,2.889,168,2.23,169,1.879,216,2.713,247,4.311,271,4.224,276,4.115,280,4.89,292,4.89,357,2.527,416,5.252,492,5.215,563,4.89,606,4.89,767,4.89,782,4.404,822,3.042,1024,4.89,1058,3.708,1080,3.042,1081,5.252,1222,3.816,1311,3.816,1814,4.62,1926,3.936,1959,4.62,2151,4.89,2177,4.89,2179,5.252,2189,4.89,2444,6.569,2448,4.89,2473,5.801,2474,5.801,2475,5.801]],["t/614",[9,1.384,20,3.44,29,2.796,69,2.349,111,0.908,254,2.185,291,3.271,459,3.325,507,3.502,559,4.392,750,3.996,809,4.392,975,4.255,1183,5.72,1220,3.381,1256,3.957,1283,3.786,1695,4.156,1911,4.53,2049,6.222,2072,5.069,2156,6.045,2244,5.069,2476,6.045,2477,5.628]],["t/616",[4,1.009,9,0.952,17,1.029,20,3.34,66,1.816,69,2.28,72,2.184,97,2.184,104,2.306,108,1.566,111,1.077,154,1.589,164,1.751,184,0.619,196,1.522,250,1.3,254,2.591,255,2.58,256,3.207,264,1.782,267,1.721,271,2.475,279,2.236,286,2.306,291,1.665,313,1.782,417,2.865,455,1.461,460,1.721,507,3.4,548,2.115,580,2.115,608,2.115,614,2.172,638,1.665,712,1.816,731,2.384,784,2.172,785,2.987,803,3.707,804,1.461,821,2.58,822,1.782,834,2.236,844,3.6,975,3.641,999,2.172,1018,2.306,1058,2.172,1086,2.212,1146,2.706,1183,3.207,1220,4.245,1224,2.706,1225,1.927,1256,2.014,1267,1.782,1312,1.692,1393,2.58,1411,3.077,1444,2.706,1510,4.454,1512,2.236,1547,2.475,1695,2.115,1750,2.58,1767,2.58,1783,2.236,1803,2.865,1805,2.475,1817,2.384,1820,4.454,1911,2.306,1967,2.58,2021,4.454,2032,3.847,2036,3.077,2039,3.077,2049,4.72,2086,1.851,2142,4.454,2172,4.011,2199,3.077,2201,2.706,2222,3.077,2260,2.865,2477,2.865,2478,3.077,2479,3.399,2480,3.077,2481,3.399,2482,3.399,2483,3.399,2484,3.399,2485,2.706,2486,3.399,2487,3.399,2488,3.399,2489,3.399,2490,5.284,2491,3.399,2492,3.399,2493,3.399]],["t/618",[27,2.441,44,2.184,66,1.922,72,1.487,112,1.279,141,1.854,182,1.763,196,1.611,202,1.999,357,2.405,360,2.896,460,2.796,476,3.874,566,4.192,571,4.192,581,4.42,583,2.3,647,4.078,712,1.922,749,4.192,785,1.658,1001,2.441,1077,2.865,1182,4.397,1198,3.033,1220,3.816,1250,2.732,1271,2.732,1282,6.061,1300,2.865,1306,3.258,1331,2.525,1911,2.441,2049,7.026,2086,3.659,2092,4.999,2127,3.033,2213,6.083,2233,3.258,2255,4.655,2494,6.72,2495,6.72,2496,5.522,2497,3.258,2498,3.598,2499,3.598,2500,3.598,2501,3.598,2502,3.598,2503,3.598,2504,3.598,2505,3.258,2506,3.258,2507,3.258,2508,4.999,2509,3.598,2510,3.598,2511,3.598,2512,4.999,2513,3.598,2514,3.598,2515,3.258,2516,3.598,2517,3.598,2518,5.522,2519,3.598,2520,5.522,2521,3.598,2522,3.598,2523,3.598,2524,3.598,2525,3.258,2526,3.598,2527,3.598,2528,3.598,2529,3.598,2530,3.258,2531,3.598,2532,3.598,2533,3.258,2534,3.598,2535,3.258,2536,3.258,2537,3.258,2538,3.598,2539,3.598,2540,4.999,2541,3.598]],["t/620",[1,0.573,5,0.695,9,1.211,17,0.617,29,1.907,54,1.745,60,0.971,62,0.981,64,1.342,66,1.86,69,1.224,70,1.182,72,1.882,81,1.27,97,1.439,104,2.362,111,0.956,129,2.231,143,1.431,154,0.954,169,0.661,195,1.07,207,1.485,227,1.342,232,1.814,236,0.648,254,1.49,256,1.238,264,1.07,267,1.033,273,1.548,279,2.29,291,0.999,295,2.934,303,1.238,326,1.485,344,1.304,387,1.485,417,1.719,471,0.843,507,1.826,514,1.485,538,2.017,549,2.643,559,3.541,566,2.643,567,1.27,571,4.086,580,1.27,581,3.541,586,1.854,590,1.384,615,2.699,625,1.624,647,1.238,662,1.07,701,0.999,712,2.876,717,2.167,731,1.431,744,1.384,750,0.954,782,1.548,785,1.604,804,1.496,822,3.17,823,2.362,844,1.934,879,1.304,975,1.733,999,2.225,1117,1.847,1123,1.847,1128,1.342,1183,1.238,1184,1.974,1206,1.133,1220,4.74,1267,1.07,1282,1.384,1283,1.974,1290,3.626,1396,3.838,1444,1.624,1465,1.548,1468,1.624,1512,2.29,1643,1.719,1691,1.624,1695,2.834,1731,1.719,1739,1.624,1750,1.548,1767,1.548,1780,1.548,1815,1.431,1820,1.719,1860,1.548,1868,1.624,1911,3.089,1919,1.847,1975,1.485,2017,1.847,2022,1.847,2030,1.548,2046,4.123,2047,1.847,2049,4.401,2056,1.624,2072,2.643,2086,2.48,2094,1.847,2127,1.719,2142,1.719,2172,2.643,2210,1.719,2214,3.152,2217,1.847,2244,1.548,2255,1.719,2299,1.847,2371,1.719,2372,1.847,2443,1.847,2476,1.847,2477,1.719,2478,1.847,2480,1.847,2485,1.624,2497,3.152,2505,1.847,2506,1.847,2507,1.847,2508,3.152,2512,1.847,2515,1.847,2525,1.847,2530,1.847,2535,4.123,2536,1.847,2537,3.152,2540,1.847,2542,2.04,2543,2.04,2544,2.04,2545,2.934,2546,3.481,2547,2.04,2548,2.04,2549,2.04,2550,2.04,2551,2.04,2552,2.04,2553,2.04,2554,2.04,2555,2.04,2556,1.847,2557,2.04,2558,3.481,2559,2.04,2560,3.481,2561,2.04,2562,3.481,2563,4.554,2564,1.847,2565,2.04,2566,2.04,2567,3.481,2568,1.847,2569,2.04,2570,2.04,2571,2.04]],["t/623",[5,0.692,9,0.884,18,2.452,60,1.703,68,3.568,69,2.118,108,2.774,111,1.219,184,1.634,236,1.912,261,4.57,264,3.158,507,3.158,586,2.073,704,6.064,733,3.654,798,3.654,834,3.96,858,5.075,1066,4.57,1080,3.158,1245,6.064,1252,4.794,1271,4.57,1351,5.075,1477,5.075,1967,6.064,2367,5.451,2572,6.733,2573,6.021,2574,5.451,2575,4.57,2576,6.021,2577,6.021]],["t/625",[18,2.651,21,3.655,60,1.512,111,0.965,134,5.649,184,1.293,213,3.132,236,3.079,246,4.305,309,2.727,471,2.932,613,4.932,677,3.863,763,6.422,1156,4.813,1242,5.649,1548,6.422,2578,7.094,2579,7.094,2580,6.422]],["t/627",[9,1.24,450,3.68,507,5.177,577,4.514,675,6.728,2581,7.122]],["t/629",[9,1.155,25,5.173,112,2.796,183,2.889,195,4.125,284,5.336,450,3.425,507,4.125,879,5.027,1080,4.125,2581,6.629,2582,7.12,2583,7.865,2584,7.865]],["t/631",[5,0.384,9,0.491,11,2.198,15,1.562,17,1.011,23,1.721,29,1.399,33,3.892,40,1.895,56,2.756,60,1.545,68,1.98,69,1.175,111,1.257,116,1.98,122,1.777,129,1.637,184,1.685,187,2.08,217,2.817,226,1.27,230,1.692,236,2.301,246,2.028,254,1.093,257,2.735,264,1.752,357,1.455,471,1.381,514,2.433,524,1.856,539,3.025,586,2.208,601,2.198,654,4.395,704,3.958,712,1.785,750,1.562,802,2.537,876,2.433,880,2.344,1021,2.344,1116,3.439,1125,3.958,1142,2.661,1183,3.892,1206,1.856,1221,3.025,1245,5.5,1249,2.661,1269,3.733,1271,2.537,1281,2.817,1283,1.895,1312,1.664,1470,2.537,1633,2.817,1740,2.661,1837,4.152,1860,2.537,1867,3.025,1882,2.537,1997,5.405,1999,1.856,2043,2.661,2071,2.817,2072,3.958,2196,2.661,2244,3.958,2258,3.025,2329,4.721,2438,2.817,2485,4.152,2545,2.817,2575,5.5,2580,3.025,2585,3.342,2586,3.342,2587,3.342,2588,3.342,2589,3.342,2590,3.342,2591,3.342,2592,3.342,2593,2.661,2594,3.342,2595,3.342,2596,3.342,2597,3.342,2598,3.342,2599,5.215,2600,5.215,2601,3.342,2602,3.342,2603,3.025]],["t/633",[4,1.935,5,0.882,17,1.359,18,2.443,27,3.047,33,2.726,97,1.857,111,1.307,112,1.597,236,2.959,247,2.2,254,1.47,267,4.26,325,2.955,357,1.956,491,3.192,510,2.4,538,2.602,558,2.4,560,5.283,596,2.132,677,2.446,744,4.421,750,2.1,802,3.41,804,2.8,879,2.871,1080,3.418,1184,2.547,1245,5.822,1283,2.547,1300,3.577,1673,2.871,1740,3.577,1870,3.577,2020,3.047,2043,3.577,2071,3.786,2545,3.786,2575,4.947,2593,3.577,2604,7.669,2605,7.669,2606,4.492,2607,6.517,2608,6.517,2609,7.669,2610,4.492,2611,4.492]],["t/635",[5,0.747,9,0.954,15,0.729,17,0.472,18,1.544,27,1.871,33,0.947,40,0.885,54,0.685,60,0.333,81,1.716,97,3.164,111,0.504,112,0.98,116,2.196,122,0.532,123,0.741,143,1.095,156,2.018,168,0.6,179,2.306,180,0.925,184,0.503,187,0.971,192,0.729,196,0.698,201,2.486,202,0.866,236,2.928,246,2.249,254,1.213,256,0.947,264,0.818,270,3.987,302,0.849,303,0.947,325,1.026,326,1.136,327,1.716,332,1.935,357,3.722,360,1.943,363,1.184,450,3.333,463,0.997,471,2.113,478,1.184,480,1.412,486,1.136,491,0.764,510,1.473,511,1.935,521,1.136,548,0.971,557,1.815,559,1.814,560,0.885,576,2.496,577,1.98,586,2.357,596,2.124,614,0.997,615,1.634,622,0.947,636,1.412,647,1.674,662,0.818,704,2.813,712,0.833,731,1.095,744,1.058,750,2.641,798,0.947,802,3.397,804,1.593,810,1.315,817,1.412,818,1.136,825,0.79,834,1.026,837,1.242,879,2.369,880,2.6,914,1.242,1001,1.871,1009,0.997,1029,4.761,1069,1.783,1077,1.242,1080,3.409,1116,3.911,1131,2.324,1156,3.831,1245,4.934,1269,2.306,1283,2.101,1331,1.095,1675,2.008,1734,1.184,1740,4.861,1743,1.315,1771,1.184,1780,1.184,1800,1.242,1806,1.412,1810,1.412,1817,1.095,1882,1.184,1886,1.315,1954,1.095,1981,1.412,2000,1.412,2020,1.871,2023,3.355,2081,1.315,2086,0.849,2139,2.496,2159,4.287,2169,3.564,2178,1.315,2187,1.412,2244,1.184,2403,2.324,2438,1.315,2485,2.196,2572,2.324,2574,1.412,2575,4.934,2593,2.196,2603,1.412,2612,1.56,2613,1.56,2614,1.315,2615,1.56,2616,2.758,2617,2.758,2618,2.496,2619,2.496,2620,2.496,2621,2.496,2622,2.758,2623,6.843,2624,5.648,2625,1.56,2626,1.56,2627,3.706,2628,1.56,2629,3.706,2630,1.56,2631,1.56,2632,1.56,2633,1.56,2634,1.56,2635,1.56,2636,1.56,2637,1.56,2638,1.56,2639,1.56,2640,1.56,2641,1.56,2642,1.56]],["t/637",[5,0.661,9,1.063,17,0.857,18,1.572,20,1.458,27,3.101,36,1.862,43,2.276,51,1.233,68,1.677,99,4.107,111,0.897,112,2.044,116,1.677,147,2.061,153,2.149,184,1.32,219,1.25,235,1.216,236,0.899,247,1.387,254,0.926,264,1.484,267,1.433,303,1.718,360,1.484,450,2.874,471,2.376,474,4.507,507,2.397,510,3.071,567,1.762,570,1.304,573,1.512,595,2.061,596,2.17,614,1.809,615,3.407,628,4.033,662,1.484,677,3.13,754,2.061,785,1.304,809,3.007,834,1.862,866,1.986,924,2.562,1008,3.13,1011,2.061,1012,2.061,1069,1.821,1080,1.484,1104,2.562,1116,1.344,1125,5.01,1131,2.386,1142,2.254,1182,3.64,1242,5.255,1267,3.015,1283,3.26,1331,1.986,1334,2.254,1351,3.853,1400,2.254,1410,2.149,1533,2.254,1582,2.562,1606,1.809,1675,2.061,1689,2.149,1743,2.386,1752,2.061,1879,2.386,1885,2.562,1954,1.986,1997,6.869,2063,2.562,2086,1.541,2201,2.254,2260,2.386,2276,2.386,2394,2.254,2533,2.562,2568,2.562,2572,2.386,2575,6.186,2581,2.386,2582,4.138,2593,2.254,2614,2.386,2618,2.562,2619,2.562,2620,2.562,2621,2.562,2643,2.831,2644,2.831,2645,2.831,2646,2.831,2647,2.831,2648,2.831,2649,2.831,2650,2.831,2651,2.831,2652,2.831,2653,2.831,2654,2.831,2655,2.831,2656,2.831,2657,6.599,2658,2.831,2659,2.831,2660,2.831,2661,5.749,2662,5.749,2663,2.831,2664,2.831]],["t/640",[5,0.86,9,0.926,18,1.175,20,2.214,60,0.916,62,0.783,79,1.579,86,3.309,111,0.584,112,1.528,132,2.747,184,1.362,195,2.254,196,1.924,208,3.015,232,1.712,236,1.365,254,1.406,265,3.129,267,2.176,270,2.04,276,3.496,501,3.422,526,1.652,548,2.675,558,2.296,586,2.837,592,3.129,595,3.129,597,2.072,731,3.015,750,2.95,765,3.015,774,3.129,856,3.623,988,4.281,1008,2.34,1035,2.916,1067,3.015,1086,3.841,1092,4.151,1093,3.262,1098,2.14,1099,4.427,1113,3.015,1118,3.015,1207,2.547,1216,4.281,1225,4.24,1241,2.827,1269,3.251,1283,2.437,1409,5.712,1606,2.747,1638,3.262,1734,4.79,1794,2.675,1805,4.595,1856,3.623,1999,3.505,2030,3.262,2176,3.891,2261,3.262,2665,4.298,2666,4.298,2667,4.298,2668,4.298,2669,4.298,2670,4.298,2671,4.298]],["t/642",[17,1.894,42,3.343,62,1.14,86,3.282,111,0.851,206,5.274,250,1.54,270,2.97,635,3.798,744,4.245,750,2.926,1008,4.975,1086,2.62,1206,3.475,1224,4.983,1225,5.18,1547,4.556,1630,5.274,1662,4.983,1696,4.556,1857,4.75,1865,4.75,1940,6.525,1967,4.75,1999,3.475,2157,4.556,2172,4.75,2183,4.983,2220,5.274,2223,5.274,2224,4.983,2672,8.194,2673,5.274,2674,5.665]],["t/644",[104,3.936,108,2.673,111,0.789,112,2.062,129,2.842,184,1.714,187,3.61,204,3.222,225,2.283,270,3.699,273,4.404,538,3.361,559,3.816,712,3.099,744,3.936,822,3.042,886,4.62,1008,4.243,1069,3.104,1225,5.334,1267,3.042,1269,2.989,1289,3.936,1425,3.936,1802,5.252,1930,4.62,1940,4.62,1999,3.222,2085,5.252,2086,3.159,2159,4.404,2184,4.404,2224,4.62,2401,4.224,2614,4.89,2675,7.055,2676,5.801,2677,5.801,2678,5.801,2679,5.801]],["t/646",[42,3.969,54,1.342,62,0.985,86,3.896,111,0.735,132,3.456,184,1.547,187,4.624,192,2.528,204,3.003,206,4.558,291,2.649,596,2.567,712,2.889,822,3.896,1008,4.045,1021,3.794,1069,2.154,1086,3.553,1128,3.557,1206,3.003,1225,3.066,1285,4.558,1286,4.105,1289,5.04,1513,3.557,1796,4.895,1836,4.895,1882,4.105,1939,4.105,2056,4.306,2081,4.558,2086,4.045,2138,4.105,2157,3.937,2177,4.558,2178,4.558,2183,4.306,2185,4.895,2223,4.558,2556,4.895,2673,4.558,2674,4.895,2675,7.683,2680,5.407,2681,5.407,2682,5.407]],["t/648",[5,0.578,18,1.376,62,1.288,69,1.77,72,2.08,86,2.639,104,3.413,111,1.11,112,1.789,161,3.131,163,5.083,179,2.592,184,0.917,213,2.221,250,1.739,259,3.131,267,2.548,326,3.663,392,3.309,570,2.318,635,3.053,662,4.283,670,3.216,766,3.131,1002,3.819,1008,2.74,1069,2.004,1086,3.419,1113,3.53,1116,2.388,1206,2.794,1207,4.188,1210,4.555,1312,2.505,1606,3.216,1662,4.006,1690,3.819,1693,4.006,1696,3.663,1708,4.006,1771,3.819,1857,3.819,1865,6.724,1999,2.794,2394,4.006,2564,4.555,2683,5.031,2684,5.031,2685,5.031,2686,5.031,2687,5.031,2688,5.031,2689,5.031,2690,5.031,2691,5.031,2692,5.031,2693,5.031]],["t/650",[5,0.93,9,0.725,40,2.8,64,3.248,79,2.562,86,2.59,108,2.275,183,1.814,184,0.9,225,1.943,230,2.5,237,2.997,273,3.748,275,3.595,291,2.419,332,4.893,357,2.15,491,3.416,501,6.438,558,2.638,596,2.344,611,6.396,712,2.638,727,4.162,729,4.893,750,2.309,757,3.248,785,2.275,822,3.657,1002,3.748,1074,4.162,1086,2.92,1092,3.248,1093,3.748,1094,3.595,1216,3.35,1225,2.8,1251,4.162,1252,5.553,1253,3.748,1311,3.248,1415,3.595,1689,3.748,1785,3.932,1794,3.073,1812,4.47,1939,5.294,1953,4.47,2171,3.932,2327,4.47,2382,4.47,2673,5.878,2694,4.938,2695,4.938,2696,4.938,2697,4.938,2698,4.938,2699,4.938]],["t/652",[102,4.341,111,0.923,179,4.45,184,1.238,196,3.04,321,6.148,514,4.945,615,4.025,1008,3.698,1013,4.467,1021,4.765,1086,4.322,1213,4.945,1218,5.408,1267,3.562,1547,4.945,1606,4.341,1691,5.408,1817,4.765,1993,4.765,1999,3.772,2172,5.155,2216,6.148,2291,5.724,2700,6.791]],["t/654",[9,1.023,21,3.591,58,4.43,60,1.486,63,4.038,154,3.259,249,3.952,481,4.979,499,6.31,822,3.655,1518,5.875,1763,5.55,1785,5.55,2116,6.31,2370,6.31,2394,5.55,2397,6.394,2446,6.31,2701,6.97,2702,6.97,2703,6.97,2704,6.97,2705,6.97]],["t/656",[4,1.888,9,1.215,10,4.064,15,2.973,58,2.929,60,1.355,79,2.335,129,3.114,167,3.462,169,2.06,171,3.93,179,3.275,184,1.158,223,3.219,228,3.683,230,3.219,250,2.038,260,2.929,282,3.219,607,5.359,690,5.755,803,4.46,1114,3.334,1350,4.629,1408,3.558,1412,5.359,1481,4.182,1482,3.683,1697,5.359,1804,5.062,1823,5.062,2706,6.357,2707,6.357,2708,6.357]],["t/658",[9,1.357,41,3.889,56,2.754,58,2.952,60,1.366,62,1.517,72,2.649,108,2.952,164,3.302,165,3.191,169,2.696,171,3.042,179,3.302,184,1.517,264,3.361,547,4.496,577,3.423,695,4.865,723,3.889,785,3.834,803,4.496,814,5.402,845,3.423,1069,2.553,1532,4.496,1681,4.865,1754,5.103,1755,4.865,1759,3.889,1794,3.988,1804,5.103]],["t/660",[5,0.85,9,1.403,26,2.356,58,1.6,62,0.633,63,3.113,79,1.276,115,2.551,144,2.284,163,2.161,167,1.891,171,3.12,179,1.789,184,0.633,194,2.22,201,1.929,219,1.533,224,2.632,228,3.113,249,1.969,250,1.322,260,1.6,274,1.929,276,1.624,342,4.529,360,2.818,394,4.989,470,4.864,489,2.765,510,1.855,569,4.864,573,1.855,596,1.649,597,1.674,598,1.789,600,3.951,639,4.864,724,2.529,784,2.22,794,2.765,798,2.108,845,2.87,857,6.235,1079,2.765,1095,4.079,1098,1.729,1113,3.77,1114,3.446,1119,4.864,1126,2.529,1207,2.058,1217,2.765,1222,2.284,1364,2.284,1408,1.492,1481,3.534,1482,3.113,1483,2.436,1484,2.927,1521,3.144,1641,5.233,1718,2.636,1754,4.279,1755,2.636,1792,4.529,1794,3.344,1824,2.436,1908,3.144,1920,2.927,1951,2.927,2162,2.927,2301,3.144,2338,4.864,2709,5.373,2710,5.373,2711,5.373,2712,5.373,2713,3.473,2714,3.473,2715,6.572,2716,3.473,2717,3.473,2718,3.144,2719,3.473,2720,3.473,2721,3.473,2722,3.473,2723,3.473,2724,3.473,2725,3.144]],["t/664",[0,2.512,5,0.725,9,1.209,18,1.725,20,3.249,21,3.249,56,2.71,62,1.149,72,2.607,103,4.279,111,1.372,112,2.242,151,4.592,180,3.738,182,3.089,228,3.654,254,3.182,260,2.906,264,3.308,272,4.788,277,4.149,279,4.149,481,3.576,557,3.089,577,3.369,709,5.022,1090,5.71,1091,4.788,1114,3.308,1510,5.316,2726,6.307]],["t/666",[5,0.952,9,1.215,10,4.064,13,3.396,14,3.334,22,2.912,35,5.062,45,3.858,50,4.629,52,3.018,79,2.335,157,6.056,159,5.446,163,3.957,164,4.265,167,4.508,170,3.683,196,2.846,224,3.114,242,5.292,287,5.755,288,5.359,545,3.768,596,3.018,603,2.973,1312,3.165,2378,5.755,2718,5.755,2727,6.357]],["t/668",[1,1.618,5,0.892,9,1.437,10,3.681,18,1.575,22,2.026,36,3.788,45,3.495,52,2.734,62,1.049,111,0.783,115,2.734,122,2.643,201,4.87,243,5.214,244,5.887,245,2.777,246,3.495,247,3.799,248,4.041,260,2.653,329,4.586,443,3.413,464,4.194,545,3.413,560,4.971,561,4.684,609,4.041,1071,4.372,1516,3.495,2169,4.586,2725,5.214,2728,5.759,2729,5.759,2730,5.759,2731,5.759,2732,5.759]]],"invertedIndex":[["",{"_index":54,"t":{"8":{"position":[[301,1]]},"12":{"position":[[266,1],[305,1],[307,3]]},"16":{"position":[[188,1],[270,1],[272,3]]},"20":{"position":[[212,1]]},"22":{"position":[[710,2],[806,2],[846,1]]},"32":{"position":[[244,1],[264,1],[286,2],[335,1],[337,1],[362,2],[426,2],[532,2],[577,1],[688,1],[698,1],[735,1],[737,2],[776,1],[801,1],[803,1],[816,2],[852,2],[915,2],[980,1]]},"34":{"position":[[151,1],[173,1],[196,1],[206,1],[235,1],[266,1],[355,1],[395,1],[441,1],[457,2],[540,1],[546,2],[549,1],[584,2],[587,2],[626,1],[651,1],[653,1],[666,2],[725,1],[775,1],[806,3],[824,1],[855,2],[917,1],[1052,2],[1107,1],[1115,2],[1118,2],[1121,2],[1131,1],[1133,2],[1253,2],[1256,1],[1419,3],[1583,2],[1668,3],[1672,1],[1674,1],[1961,1],[1979,1],[1997,1],[2077,1],[2090,1],[2139,1],[2155,1],[2233,1],[2248,1],[2328,1],[2345,1],[2416,1],[2431,1],[2480,1]]},"36":{"position":[[215,1],[230,1],[267,1],[269,2],[317,1],[324,1],[326,1],[357,3],[361,2],[416,1],[424,2],[427,2],[430,1],[442,2],[465,3],[480,2],[527,1],[560,1],[626,3],[630,2],[693,1],[743,1],[764,1],[766,1],[800,3],[804,2],[842,3],[849,1],[903,1],[910,1],[933,1],[935,2],[938,1]]},"38":{"position":[[201,1],[221,1],[258,1],[260,2],[311,1],[338,1],[340,1],[376,3],[380,2],[424,2],[427,1],[474,2],[477,1],[560,4],[565,2],[587,1]]},"40":{"position":[[230,1],[268,1],[305,1],[307,2],[352,1],[378,1],[380,1],[415,3],[419,2],[470,1],[497,1],[499,1],[535,3],[539,2],[589,2],[592,1],[612,1],[694,2],[697,1],[780,4],[785,2],[822,1],[994,1],[1051,1],[1100,2],[1142,1],[1144,3]]},"52":{"position":[[154,2],[192,1],[214,1],[216,1],[287,3],[302,1],[304,2],[352,1],[354,2],[562,1],[570,2],[573,2],[576,1],[582,1],[584,2],[636,1],[652,1],[657,1],[659,2],[749,2],[804,1],[806,1],[808,2],[908,1],[915,1],[930,1],[932,1],[934,2],[937,2]]},"60":{"position":[[142,1],[160,1],[180,2],[244,1],[293,3]]},"62":{"position":[[154,1],[172,1],[192,2],[240,1],[304,3],[464,2],[524,1],[526,1],[702,2],[705,2],[757,1],[806,3],[867,2],[927,1],[929,1],[1105,2],[1119,1],[1146,2],[1188,1],[1245,2],[1259,1],[1293,1],[1320,2],[1323,3],[1327,2],[1345,1],[1369,2]]},"64":{"position":[[289,1],[307,1],[334,1],[353,1],[383,2],[421,1],[463,2],[515,1],[517,1],[554,2],[557,2],[606,1],[640,1],[707,2],[710,3],[823,1],[833,1],[863,2],[912,1],[946,1],[963,1],[1038,2],[1041,2],[1044,3]]},"66":{"position":[[93,1],[111,1],[138,1],[150,1],[185,1],[213,1],[243,2],[303,1],[305,1],[481,2],[484,2],[536,1],[538,1],[575,2],[578,2],[644,1],[678,1],[776,2],[779,3]]},"68":{"position":[[130,1],[148,1],[179,1],[228,3],[259,2]]},"76":{"position":[[45,1],[142,1]]},"78":{"position":[[376,1],[399,1],[514,1],[540,1],[571,1],[696,1],[708,2],[891,1],[1069,1]]},"82":{"position":[[131,1],[166,1],[227,2]]},"84":{"position":[[101,1],[119,1],[139,2],[173,1],[222,3]]},"86":{"position":[[93,1],[124,1],[144,2],[179,1],[209,2],[263,1],[303,3],[321,1],[361,3]]},"88":{"position":[[215,1],[230,1],[302,2],[305,1],[320,1],[347,3],[385,1],[387,2],[426,1],[444,3],[479,1],[481,2],[545,2],[598,1],[605,1],[607,2],[666,1],[668,3]]},"90":{"position":[[187,1],[444,1],[518,1],[536,1],[578,1]]},"92":{"position":[[97,2],[159,1]]},"94":{"position":[[151,2],[154,1],[174,1],[190,2],[264,1],[293,1],[295,1],[337,2],[340,3],[376,2]]},"96":{"position":[[75,2],[125,1],[213,3],[217,2],[281,1],[500,2],[568,1],[681,2],[684,1],[700,3],[728,1],[792,2],[821,1],[823,2],[883,2],[886,1],[902,3],[920,1],[922,2],[944,3],[965,1],[967,2],[1035,2],[1038,1],[1054,3],[1072,1],[1074,2],[1126,4],[1148,1],[1150,2]]},"117":{"position":[[169,1],[192,1],[227,2],[281,1],[422,1],[438,1],[483,2],[535,1],[581,2],[628,2],[669,3],[673,2],[745,1],[755,3],[889,1],[905,1],[950,2],[1002,1],[1047,2],[1145,2]]},"119":{"position":[[169,1],[204,1],[239,2],[308,1],[332,2],[417,1],[577,1],[593,1],[634,2],[683,1],[729,2],[776,2],[820,3],[824,2],[896,1],[906,3],[1058,1],[1074,1],[1115,2],[1164,1],[1207,2],[1305,2]]},"121":{"position":[[570,1],[605,1],[647,1],[689,1],[741,1],[779,1],[820,2],[880,2],[940,2],[1026,1],[1071,1],[1104,2],[1177,1],[1232,2],[1279,2],[1349,2],[1403,3],[1407,2],[1473,1],[1524,2],[1571,2],[1644,2],[1698,3],[1702,2],[1876,1],[1886,3],[1986,1],[1996,3],[2235,1],[2256,1],[2298,1],[2314,1],[2359,2],[2413,2],[2497,1],[2521,2],[2576,1],[2671,3],[2675,2],[2750,1],[2766,2],[2769,1],[2771,2],[2836,2],[2916,1],[2966,1],[3000,2],[3060,2],[3186,1],[3237,1],[3244,1],[3299,1],[3301,2]]},"123":{"position":[[460,1],[485,1],[513,2],[578,1],[621,1],[645,2],[707,1],[755,1],[781,2],[852,1],[908,1]]},"127":{"position":[[301,1],[448,1],[453,1],[596,1],[650,1]]},"133":{"position":[[66,1],[117,1]]},"139":{"position":[[101,1],[119,1],[139,2],[183,1],[232,3],[256,2],[306,2],[653,2],[696,3],[761,2],[820,1],[885,1],[951,2],[954,3]]},"141":{"position":[[88,2],[135,1],[200,1],[238,2],[241,3]]},"143":{"position":[[101,2],[279,1],[291,1],[311,2]]},"145":{"position":[[93,1],[124,1],[144,2],[189,1],[223,2],[277,1],[308,3],[326,1],[471,1],[517,2],[559,2],[607,3],[734,2],[783,1],[785,1],[816,2],[819,2],[890,1],[973,3],[991,1]]},"147":{"position":[[118,2],[180,1]]},"149":{"position":[[137,2],[187,1],[275,3],[279,2],[343,1],[387,2],[459,1],[489,3]]},"151":{"position":[[172,2],[219,1],[235,2],[238,1],[240,2],[320,2],[393,1],[460,2],[463,2],[501,1],[523,1],[525,1],[596,3],[611,1],[613,2],[661,1],[663,2],[893,2],[942,1],[944,1],[975,2],[978,2],[1054,1]]},"159":{"position":[[105,1],[124,1],[138,1],[187,1],[407,1],[503,1]]},"165":{"position":[[101,1],[119,1],[139,2],[183,1],[232,3]]},"167":{"position":[[92,1],[104,1],[124,2],[430,1],[487,1],[536,2],[578,1],[580,3]]},"169":{"position":[[99,1],[115,1],[135,2],[180,1],[214,2],[256,1]]},"173":{"position":[[458,2],[505,1],[521,2],[524,1],[526,2],[602,2],[605,2]]},"175":{"position":[[358,2],[401,1],[441,2],[514,1],[516,2],[563,1],[615,2],[618,1],[630,1],[641,2],[709,2],[712,2],[715,1]]},"178":{"position":[[158,1],[174,1],[194,2],[247,1],[249,1],[290,2],[293,2],[346,1],[348,1],[388,2],[391,2],[518,1]]},"180":{"position":[[187,1],[194,1],[214,2],[261,1],[263,3],[282,1],[298,2],[301,1],[331,2],[373,2],[428,2],[431,2],[470,2],[601,2],[640,1],[686,1],[726,2],[764,2],[890,1],[908,3]]},"182":{"position":[[150,2],[186,1],[216,1],[272,2],[322,1],[324,1],[338,1],[360,2],[363,2],[366,2],[493,1]]},"200":{"position":[[74,1],[151,1],[406,1],[450,1],[459,2],[528,1],[586,2],[843,1]]},"212":{"position":[[1067,1]]},"218":{"position":[[178,1]]},"220":{"position":[[0,1],[7,1],[23,1],[37,1],[39,1],[57,1],[73,1],[133,1],[141,1],[143,1],[155,1],[163,1],[197,1],[205,1],[207,1],[223,1],[225,1],[285,1]]},"222":{"position":[[587,5],[684,1]]},"238":{"position":[[357,1],[472,1]]},"242":{"position":[[400,1]]},"244":{"position":[[396,1]]},"250":{"position":[[79,1],[125,1]]},"254":{"position":[[208,1],[246,1],[267,1],[352,2],[560,1]]},"256":{"position":[[172,1]]},"270":{"position":[[482,1],[484,3],[488,1],[516,1],[518,3],[522,1],[524,2],[630,1],[665,1],[700,1],[705,1]]},"272":{"position":[[773,1],[849,1],[854,1]]},"276":{"position":[[192,1],[226,1],[417,1],[513,1]]},"278":{"position":[[540,1],[563,1],[622,1],[949,1],[972,1],[1087,1],[1125,1]]},"280":{"position":[[295,1],[321,1],[378,1],[561,1],[587,1]]},"282":{"position":[[288,1],[311,1],[696,1],[715,1],[733,1]]},"300":{"position":[[1005,1],[1020,1],[1082,1],[1294,1],[1309,1],[1355,1]]},"302":{"position":[[488,1],[508,1],[536,1],[562,1]]},"304":{"position":[[392,1],[618,1],[702,1],[779,1],[792,1],[819,1],[833,1],[850,1]]},"306":{"position":[[579,1],[606,1],[652,1],[686,1],[744,1],[933,1],[960,1],[1142,1],[1176,1],[1218,1],[1263,1]]},"308":{"position":[[749,1],[763,1],[812,1],[855,1],[910,1],[938,1],[1068,1],[1082,1],[1101,1],[1250,1],[1264,1],[1284,1],[1306,1]]},"310":{"position":[[304,1],[343,1],[535,1],[672,1]]},"314":{"position":[[235,1],[263,1]]},"442":{"position":[[138,1],[156,1],[187,1],[214,2],[310,1],[328,1],[359,1],[386,2],[450,2],[453,1],[495,1]]},"444":{"position":[[14,1],[32,1],[63,1],[100,1],[137,1],[139,3],[156,1],[174,1],[205,1],[246,1],[283,1],[285,3]]},"446":{"position":[[14,1],[32,1],[63,1],[100,1],[165,1],[167,3],[184,1],[202,1],[233,1],[274,1],[339,1],[341,3]]},"448":{"position":[[140,1],[158,1],[189,1],[260,3],[298,1],[316,1],[347,1],[388,1],[437,1],[439,3],[472,1],[490,1],[521,1],[562,1],[623,1],[625,3]]},"450":{"position":[[472,1],[490,1],[521,1],[558,1],[610,1],[612,3],[629,1],[647,1],[678,1],[719,1],[778,1],[780,3]]},"452":{"position":[[107,1]]},"454":{"position":[[579,1],[606,1],[641,1],[693,1],[731,1],[772,1],[886,1],[928,2]]},"523":{"position":[[1080,1],[1086,1]]},"549":{"position":[[1046,1],[1053,1]]},"551":{"position":[[200,1]]},"555":{"position":[[495,1]]},"620":{"position":[[2633,1],[2694,1],[2713,1],[2725,1],[2735,1],[2748,1],[2760,1]]},"635":{"position":[[769,1],[1772,1]]},"646":{"position":[[588,1]]}}}],["0",{"_index":392,"t":{"34":{"position":[[1971,1]]},"36":{"position":[[469,2],[846,2]]},"141":{"position":[[224,3]]},"208":{"position":[[42,1],[410,1]]},"212":{"position":[[1065,1]]},"444":{"position":[[124,3],[270,3]]},"448":{"position":[[412,3]]},"591":{"position":[[95,1]]},"648":{"position":[[674,1]]}}}],["0,1,2,3,4,5,6,7",{"_index":976,"t":{"139":{"position":[[678,17]]},"442":{"position":[[477,17]]},"454":{"position":[[910,17]]}}}],["0.0.0.0",{"_index":618,"t":{"62":{"position":[[399,8]]},"276":{"position":[[357,8]]},"282":{"position":[[531,9]]}}}],["0.007",{"_index":2420,"t":{"589":{"position":[[798,5]]}}}],["0.012",{"_index":2223,"t":{"551":{"position":[[1019,5]]},"642":{"position":[[97,5]]},"646":{"position":[[102,5]]}}}],["0.012*5",{"_index":2682,"t":{"646":{"position":[[580,7]]}}}],["0.0125",{"_index":2419,"t":{"589":{"position":[[791,6],[837,6]]}}}],["0.05",{"_index":2417,"t":{"589":{"position":[[764,4]]}}}],["0.06",{"_index":2674,"t":{"642":{"position":[[184,4]]},"646":{"position":[[590,4]]}}}],["0.1",{"_index":1786,"t":{"360":{"position":[[274,3]]}}}],["0.15",{"_index":2224,"t":{"551":{"position":[[1060,4]]},"553":{"position":[[1418,4]]},"642":{"position":[[34,4]]},"644":{"position":[[178,4]]}}}],["0.25",{"_index":2422,"t":{"589":{"position":[[844,4]]}}}],["0.4",{"_index":2405,"t":{"582":{"position":[[340,4]]},"584":{"position":[[233,4]]}}}],["0.5gb",{"_index":587,"t":{"56":{"position":[[440,5]]},"72":{"position":[[240,5]]},"188":{"position":[[295,5]]},"246":{"position":[[591,5]]}}}],["0.6",{"_index":1096,"t":{"188":{"position":[[109,5]]}}}],["0.75",{"_index":2093,"t":{"523":{"position":[[1263,4]]}}}],["000",{"_index":413,"t":{"34":{"position":[[2191,5]]}}}],["007bff",{"_index":421,"t":{"34":{"position":[[2451,8]]}}}],["01.ac",{"_index":1556,"t":{"300":{"position":[[1770,5]]},"310":{"position":[[561,5]]},"312":{"position":[[489,5]]}}}],["01.he",{"_index":2620,"t":{"635":{"position":[[951,5],[2023,5]]},"637":{"position":[[1081,5]]}}}],["06",{"_index":1332,"t":{"238":{"position":[[93,2]]},"242":{"position":[[102,2]]},"244":{"position":[[105,2]]}}}],["1",{"_index":357,"t":{"34":{"position":[[988,2],[2103,2],[2358,2]]},"92":{"position":[[230,2]]},"139":{"position":[[667,2],[898,2]]},"141":{"position":[[213,2],[228,2]]},"145":{"position":[[809,3]]},"147":{"position":[[251,2]]},"151":{"position":[[968,3]]},"180":{"position":[[669,3]]},"216":{"position":[[192,1]]},"228":{"position":[[585,1]]},"264":{"position":[[266,2]]},"270":{"position":[[667,2]]},"276":{"position":[[223,2]]},"280":{"position":[[375,2]]},"332":{"position":[[197,2]]},"442":{"position":[[466,2]]},"444":{"position":[[113,2],[128,2],[259,2],[274,2]]},"446":{"position":[[113,2],[287,2]]},"448":{"position":[[401,2],[416,2],[575,2]]},"450":{"position":[[571,2],[606,3],[732,2]]},"454":{"position":[[899,2]]},"521":{"position":[[270,1]]},"549":{"position":[[470,2],[1306,1]]},"553":{"position":[[859,1],[1366,1],[1951,1]]},"587":{"position":[[224,1],[244,1]]},"612":{"position":[[462,2]]},"618":{"position":[[33,3],[476,3]]},"631":{"position":[[36,1]]},"633":{"position":[[230,2]]},"635":{"position":[[999,1],[1013,1],[1031,1],[1060,1],[1352,1],[1381,1],[1527,1],[1556,1],[2071,1],[2084,1],[2102,1],[2229,1],[2294,1],[2439,1],[2632,1],[2715,1],[2908,1]]},"650":{"position":[[576,1]]}}}],["1%2fproto&pagesize=50&ascending=tru",{"_index":1149,"t":{"200":{"position":[[805,37]]}}}],["1.0.0.1",{"_index":1203,"t":{"210":{"position":[[134,10]]},"226":{"position":[[199,10]]},"278":{"position":[[789,8]]}}}],["1.1.1.1",{"_index":1202,"t":{"210":{"position":[[122,11]]},"226":{"position":[[187,11]]},"278":{"position":[[777,7]]}}}],["1.4",{"_index":2588,"t":{"631":{"position":[[289,3]]}}}],["1.6",{"_index":2418,"t":{"589":{"position":[[769,3]]}}}],["1.8",{"_index":2411,"t":{"587":{"position":[[254,4]]}}}],["1.9",{"_index":2412,"t":{"587":{"position":[[259,4]]}}}],["1/proto",{"_index":1145,"t":{"200":{"position":[[577,8]]}}}],["10",{"_index":1283,"t":{"228":{"position":[[398,2]]},"234":{"position":[[1349,2]]},"527":{"position":[[305,2]]},"551":{"position":[[801,2]]},"559":{"position":[[246,2]]},"582":{"position":[[137,3]]},"584":{"position":[[30,3]]},"589":{"position":[[552,2]]},"614":{"position":[[286,2]]},"620":{"position":[[2569,2],[2783,2]]},"631":{"position":[[1220,3]]},"633":{"position":[[424,2]]},"635":{"position":[[1332,2],[2419,2],[2566,2]]},"637":{"position":[[1469,2],[1576,2],[1847,2]]},"640":{"position":[[409,2]]}}}],["10,000",{"_index":1436,"t":{"272":{"position":[[747,6],[775,7],[842,6]]}}}],["10.000",{"_index":2666,"t":{"640":{"position":[[481,6]]}}}],["10.1",{"_index":2408,"t":{"587":{"position":[[232,5]]}}}],["10.3",{"_index":2409,"t":{"587":{"position":[[238,5]]}}}],["100",{"_index":1606,"t":{"308":{"position":[[1227,4]]},"569":{"position":[[528,3]]},"582":{"position":[[325,4],[525,3]]},"584":{"position":[[218,4],[418,3]]},"589":{"position":[[571,3]]},"591":{"position":[[55,3]]},"637":{"position":[[1817,3]]},"640":{"position":[[324,3]]},"648":{"position":[[362,3]]},"652":{"position":[[21,3]]}}}],["1000",{"_index":1266,"t":{"218":{"position":[[316,4],[413,4]]},"545":{"position":[[32,4]]},"549":{"position":[[1079,4]]},"553":{"position":[[1725,4]]},"587":{"position":[[49,4]]},"589":{"position":[[338,4],[751,5]]}}}],["10000",{"_index":2253,"t":{"553":{"position":[[1758,5]]}}}],["100k/day",{"_index":2699,"t":{"650":{"position":[[676,9]]}}}],["100kb",{"_index":2226,"t":{"553":{"position":[[188,6],[1609,5]]}}}],["100mbit",{"_index":2241,"t":{"553":{"position":[[833,8]]}}}],["100mpb",{"_index":2240,"t":{"553":{"position":[[819,7]]}}}],["100vh",{"_index":399,"t":{"34":{"position":[[2046,6]]}}}],["107",{"_index":2510,"t":{"618":{"position":[[559,3]]}}}],["108",{"_index":2532,"t":{"618":{"position":[[671,3]]}}}],["10k",{"_index":2673,"t":{"642":{"position":[[130,3]]},"646":{"position":[[455,3]]},"650":{"position":[[340,3],[400,3]]}}}],["10kb",{"_index":2159,"t":{"545":{"position":[[330,4]]},"553":{"position":[[182,5],[1071,4],[1258,4]]},"591":{"position":[[367,4]]},"635":{"position":[[1089,4],[1410,4],[1585,4],[2323,4],[2661,4],[2937,4]]},"644":{"position":[[139,5]]}}}],["10mbp",{"_index":2566,"t":{"620":{"position":[[2622,6]]}}}],["10msg/sec",{"_index":2624,"t":{"635":{"position":[[1078,10],[1399,10],[1574,10],[2312,10],[2650,10],[2926,10]]}}}],["10px",{"_index":408,"t":{"34":{"position":[[2133,5],[2206,5],[2227,5],[2274,5],[2390,5],[2410,5]]}}}],["11",{"_index":2568,"t":{"620":{"position":[[2722,2]]},"637":{"position":[[410,2]]}}}],["1100",{"_index":2640,"t":{"635":{"position":[[3774,4]]}}}],["119",{"_index":2523,"t":{"618":{"position":[[621,3]]}}}],["11m",{"_index":2630,"t":{"635":{"position":[[2390,5]]}}}],["12",{"_index":2255,"t":{"553":{"position":[[2049,3]]},"618":{"position":[[369,2],[691,2]]},"620":{"position":[[2745,2]]}}}],["123.123.123.123",{"_index":148,"t":{"16":{"position":[[223,18]]}}}],["1234",{"_index":146,"t":{"16":{"position":[[211,4]]}}}],["127.0.0.1",{"_index":84,"t":{"10":{"position":[[529,10]]},"198":{"position":[[153,9]]},"222":{"position":[[96,9]]},"224":{"position":[[113,9]]},"308":{"position":[[315,10]]}}}],["127.0.0.1:8080",{"_index":1275,"t":{"222":{"position":[[642,15]]}}}],["13",{"_index":2519,"t":{"618":{"position":[[599,2]]}}}],["130",{"_index":1320,"t":{"234":{"position":[[1256,3]]}}}],["137",{"_index":2511,"t":{"618":{"position":[[563,3]]}}}],["13:18:07.575+00:00",{"_index":2645,"t":{"637":{"position":[[416,18]]}}}],["14",{"_index":2262,"t":{"557":{"position":[[14,2]]}}}],["14400",{"_index":1615,"t":{"310":{"position":[[760,5]]}}}],["1459",{"_index":1508,"t":{"290":{"position":[[33,5]]}}}],["15",{"_index":749,"t":{"90":{"position":[[205,3]]},"238":{"position":[[96,2]]},"242":{"position":[[105,2]]},"244":{"position":[[108,2]]},"618":{"position":[[648,2],[856,2]]}}}],["1500m",{"_index":1321,"t":{"234":{"position":[[1277,6]]}}}],["150kb",{"_index":2085,"t":{"523":{"position":[[699,6]]},"644":{"position":[[151,6]]}}}],["15mbp",{"_index":2561,"t":{"620":{"position":[[2152,7]]}}}],["16",{"_index":1438,"t":{"272":{"position":[[851,2]]}}}],["160000",{"_index":2075,"t":{"523":{"position":[[364,6]]}}}],["160000/600",{"_index":2091,"t":{"523":{"position":[[1031,12]]}}}],["16:09:54.448+01:00",{"_index":1333,"t":{"238":{"position":[[99,18]]},"242":{"position":[[108,18]]},"244":{"position":[[111,18]]}}}],["17",{"_index":2537,"t":{"618":{"position":[[702,2]]},"620":{"position":[[2364,3],[2457,3]]}}}],["1727795042",{"_index":2570,"t":{"620":{"position":[[2890,10]]}}}],["18",{"_index":2567,"t":{"620":{"position":[[2710,2],[2732,2]]}}}],["1:1",{"_index":726,"t":{"86":{"position":[[639,3]]},"145":{"position":[[1215,3]]}}}],["1kb",{"_index":2401,"t":{"582":{"position":[[175,3]]},"584":{"position":[[68,3]]},"587":{"position":[[78,3]]},"589":{"position":[[240,3]]},"591":{"position":[[353,3]]},"644":{"position":[[134,4]]}}}],["1lqrcbccb4np93f9",{"_index":1345,"t":{"242":{"position":[[245,16],[478,16]]}}}],["1msg/",{"_index":2402,"t":{"582":{"position":[[222,7]]},"584":{"position":[[115,7]]},"589":{"position":[[268,6]]},"591":{"position":[[100,7]]}}}],["1msg/10",{"_index":2691,"t":{"648":{"position":[[530,7]]}}}],["1px",{"_index":401,"t":{"34":{"position":[[2061,3]]}}}],["2",{"_index":360,"t":{"34":{"position":[[1037,2]]},"78":{"position":[[717,4]]},"92":{"position":[[278,2]]},"141":{"position":[[231,2]]},"145":{"position":[[813,2]]},"147":{"position":[[299,2]]},"151":{"position":[[972,2]]},"228":{"position":[[490,1]]},"270":{"position":[[702,2]]},"276":{"position":[[257,2]]},"280":{"position":[[432,2]]},"318":{"position":[[400,1]]},"444":{"position":[[131,2],[277,2]]},"448":{"position":[[419,2]]},"551":{"position":[[614,1]]},"618":{"position":[[279,3],[714,3]]},"635":{"position":[[1318,1],[1744,2],[2405,1]]},"637":{"position":[[1894,2]]},"660":{"position":[[830,1],[914,1]]}}}],["20",{"_index":1258,"t":{"216":{"position":[[246,2]]},"302":{"position":[[432,4]]},"523":{"position":[[414,2]]}}}],["2000",{"_index":2404,"t":{"582":{"position":[[264,4],[369,4]]},"584":{"position":[[157,4],[262,4]]}}}],["2023",{"_index":1331,"t":{"238":{"position":[[88,4]]},"242":{"position":[[97,4]]},"244":{"position":[[100,4]]},"469":{"position":[[127,5]]},"618":{"position":[[376,6]]},"635":{"position":[[3832,6]]},"637":{"position":[[405,4]]}}}],["2024",{"_index":2096,"t":{"525":{"position":[[25,4]]},"557":{"position":[[26,4]]}}}],["21",{"_index":2516,"t":{"618":{"position":[[590,2]]}}}],["210",{"_index":2414,"t":{"589":{"position":[[382,3],[779,4]]}}}],["21600",{"_index":1551,"t":{"300":{"position":[[1251,5]]},"310":{"position":[[492,5]]}}}],["22",{"_index":2538,"t":{"618":{"position":[[705,2]]}}}],["23",{"_index":2526,"t":{"618":{"position":[[639,2]]}}}],["232",{"_index":2598,"t":{"631":{"position":[[1134,3]]}}}],["25",{"_index":2627,"t":{"635":{"position":[[1507,2],[2695,2],[2842,2]]}}}],["250m",{"_index":2636,"t":{"635":{"position":[[3542,5]]}}}],["256",{"_index":2204,"t":{"551":{"position":[[362,3]]}}}],["25mbp",{"_index":2057,"t":{"519":{"position":[[1502,7]]}}}],["26",{"_index":2536,"t":{"618":{"position":[[694,2]]},"620":{"position":[[2298,3]]}}}],["263",{"_index":2250,"t":{"553":{"position":[[1314,3]]}}}],["266",{"_index":2080,"t":{"523":{"position":[[518,3],[1005,3],[1075,4]]}}}],["27",{"_index":2533,"t":{"618":{"position":[[675,2]]},"637":{"position":[[413,2]]}}}],["286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8",{"_index":1571,"t":{"304":{"position":[[394,64],[852,64],[940,64]]}}}],["2gb",{"_index":584,"t":{"56":{"position":[[368,3]]},"72":{"position":[[168,3]]},"125":{"position":[[257,3]]},"188":{"position":[[223,3]]},"246":{"position":[[519,3]]}}}],["2mbyte",{"_index":2695,"t":{"650":{"position":[[358,7]]}}}],["3",{"_index":647,"t":{"64":{"position":[[526,2],[540,2],[551,2]]},"66":{"position":[[547,2],[561,2],[572,2]]},"92":{"position":[[327,2]]},"141":{"position":[[234,3]]},"145":{"position":[[798,2]]},"147":{"position":[[348,2]]},"151":{"position":[[957,2]]},"444":{"position":[[134,2],[280,2]]},"448":{"position":[[422,2]]},"618":{"position":[[389,3],[781,3],[827,1]]},"620":{"position":[[2114,4]]},"635":{"position":[[1493,1],[2681,1]]}}}],["3.85",{"_index":2182,"t":{"549":{"position":[[1048,4]]}}}],["30",{"_index":1271,"t":{"222":{"position":[[228,2]]},"308":{"position":[[565,3]]},"618":{"position":[[625,2]]},"623":{"position":[[95,2]]},"631":{"position":[[755,2]]}}}],["300",{"_index":1249,"t":{"216":{"position":[[108,3]]},"218":{"position":[[174,3]]},"302":{"position":[[241,5]]},"631":{"position":[[775,3]]}}}],["3000",{"_index":2689,"t":{"648":{"position":[[482,4]]}}}],["32",{"_index":1448,"t":{"278":{"position":[[331,2]]},"304":{"position":[[351,2],[389,2],[530,2],[712,2],[802,3],[816,2]]}}}],["33",{"_index":2092,"t":{"523":{"position":[[1238,2]]},"618":{"position":[[602,2],[697,2]]}}}],["3600",{"_index":1254,"t":{"216":{"position":[[187,4]]},"302":{"position":[[310,6]]}}}],["37",{"_index":2529,"t":{"618":{"position":[[651,2]]}}}],["38",{"_index":2512,"t":{"618":{"position":[[567,2],[772,2]]},"620":{"position":[[2757,2]]}}}],["38.8",{"_index":2597,"t":{"631":{"position":[[1088,7]]}}}],["384",{"_index":2669,"t":{"640":{"position":[[655,3]]}}}],["4",{"_index":1415,"t":{"268":{"position":[[434,1]]},"310":{"position":[[774,2]]},"448":{"position":[[425,2]]},"549":{"position":[[1055,2],[1146,1],[1874,1]]},"553":{"position":[[2044,1]]},"650":{"position":[[418,2]]}}}],["4.0",{"_index":2316,"t":{"565":{"position":[[83,3],[116,5]]}}}],["40",{"_index":1191,"t":{"208":{"position":[[971,3]]}}}],["44",{"_index":2520,"t":{"618":{"position":[[605,2],[665,2]]}}}],["479c95bbf74222417abf76c7f9c480a6790e454374dc4f59bbb15ca183ce1abd",{"_index":2655,"t":{"637":{"position":[[741,65]]}}}],["48",{"_index":1543,"t":{"300":{"position":[[694,3]]}}}],["49",{"_index":2521,"t":{"618":{"position":[[615,2]]}}}],["4k",{"_index":2560,"t":{"620":{"position":[[2127,2],[2613,3]]}}}],["4k/uhd",{"_index":2541,"t":{"618":{"position":[[849,6]]}}}],["4kb",{"_index":2087,"t":{"523":{"position":[[785,4],[1082,3],[1098,3]]}}}],["4px",{"_index":419,"t":{"34":{"position":[[2376,4],[2475,4]]}}}],["5",{"_index":1250,"t":{"216":{"position":[[112,1]]},"218":{"position":[[180,1]]},"234":{"position":[[1474,1]]},"448":{"position":[[428,2]]},"618":{"position":[[842,1]]}}}],["50",{"_index":1182,"t":{"208":{"position":[[724,2]]},"519":{"position":[[1217,2],[1420,2]]},"618":{"position":[[654,2],[678,2]]},"637":{"position":[[1440,2],[1547,2]]}}}],["500",{"_index":2415,"t":{"589":{"position":[[524,3]]}}}],["5000",{"_index":2697,"t":{"650":{"position":[[504,4]]}}}],["500kb",{"_index":2163,"t":{"545":{"position":[[574,6]]},"553":{"position":[[195,6],[1619,6]]}}}],["508",{"_index":2160,"t":{"545":{"position":[[379,3]]},"553":{"position":[[1109,3]]}}}],["50kb",{"_index":2676,"t":{"644":{"position":[[145,5]]}}}],["510",{"_index":2421,"t":{"589":{"position":[[825,4]]}}}],["520",{"_index":2698,"t":{"650":{"position":[[548,3]]}}}],["53",{"_index":2527,"t":{"618":{"position":[[642,2]]}}}],["54",{"_index":2517,"t":{"618":{"position":[[593,2]]}}}],["56",{"_index":2524,"t":{"618":{"position":[[628,2]]}}}],["58",{"_index":2509,"t":{"618":{"position":[[556,2]]}}}],["6",{"_index":1471,"t":{"284":{"position":[[403,1]]},"300":{"position":[[1265,2]]},"310":{"position":[[506,2]]},"448":{"position":[[431,2]]},"523":{"position":[[1057,1],[1088,3],[1134,1]]},"553":{"position":[[2029,1]]}}}],["6.70",{"_index":2425,"t":{"591":{"position":[[348,4]]}}}],["60",{"_index":1190,"t":{"208":{"position":[[898,3]]},"577":{"position":[[1068,4]]}}}],["600",{"_index":2077,"t":{"523":{"position":[[390,3],[639,4],[670,3]]},"589":{"position":[[222,3]]}}}],["60000",{"_index":1019,"t":{"161":{"position":[[215,8]]},"208":{"position":[[373,5]]}}}],["60000:60000",{"_index":684,"t":{"78":{"position":[[325,11]]}}}],["60002",{"_index":620,"t":{"62":{"position":[[424,5]]},"276":{"position":[[382,5]]}}}],["60003",{"_index":621,"t":{"62":{"position":[[434,5]]},"276":{"position":[[392,6]]}}}],["60:40",{"_index":1186,"t":{"208":{"position":[[792,7],[880,6]]}}}],["625",{"_index":1439,"t":{"272":{"position":[[856,4]]}}}],["627",{"_index":2248,"t":{"553":{"position":[[1228,4]]}}}],["63",{"_index":2534,"t":{"618":{"position":[[681,2]]}}}],["6300",{"_index":2108,"t":{"527":{"position":[[308,4]]},"559":{"position":[[249,4]]}}}],["64",{"_index":1165,"t":{"208":{"position":[[239,2]]},"304":{"position":[[262,3]]},"392":{"position":[[26,3]]}}}],["64/waku2",{"_index":2082,"t":{"523":{"position":[[592,8]]}}}],["65000",{"_index":1010,"t":{"159":{"position":[[126,5]]}}}],["68",{"_index":2513,"t":{"618":{"position":[[570,2]]}}}],["7",{"_index":1077,"t":{"182":{"position":[[268,3]]},"448":{"position":[[434,2]]},"618":{"position":[[700,1]]},"635":{"position":[[3829,2]]}}}],["7.4",{"_index":2406,"t":{"582":{"position":[[476,3]]},"584":{"position":[[369,3]]}}}],["7.40",{"_index":2427,"t":{"591":{"position":[[362,4]]}}}],["7.45",{"_index":2429,"t":{"591":{"position":[[377,4]]}}}],["7.88",{"_index":2424,"t":{"591":{"position":[[343,4]]}}}],["71",{"_index":2528,"t":{"618":{"position":[[645,2]]}}}],["72",{"_index":2518,"t":{"618":{"position":[[596,2],[631,2]]}}}],["7640",{"_index":2587,"t":{"631":{"position":[[250,5]]}}}],["8",{"_index":1326,"t":{"234":{"position":[[1413,1]]},"304":{"position":[[789,2]]},"356":{"position":[[339,1]]},"523":{"position":[[1228,1]]},"582":{"position":[[444,1]]},"584":{"position":[[337,1]]}}}],["8.03",{"_index":2428,"t":{"591":{"position":[[372,4]]}}}],["8.04",{"_index":2426,"t":{"591":{"position":[[357,4]]}}}],["8.8.4.4",{"_index":1453,"t":{"278":{"position":[[922,8]]}}}],["8.8.8.8",{"_index":1452,"t":{"278":{"position":[[910,7]]}}}],["80/2",{"_index":1303,"t":{"234":{"position":[[289,5]]}}}],["8000",{"_index":1293,"t":{"232":{"position":[[99,4]]},"306":{"position":[[346,5]]},"523":{"position":[[525,4]]}}}],["8001",{"_index":1587,"t":{"306":{"position":[[909,5]]}}}],["8002",{"_index":1591,"t":{"306":{"position":[[1118,5]]}}}],["8008",{"_index":1277,"t":{"224":{"position":[[183,4]]}}}],["83",{"_index":2539,"t":{"618":{"position":[[769,2]]}}}],["84",{"_index":2531,"t":{"618":{"position":[[668,2]]}}}],["85",{"_index":2514,"t":{"618":{"position":[[573,2]]}}}],["8645",{"_index":1133,"t":{"200":{"position":[[44,4]]},"222":{"position":[[158,4]]},"308":{"position":[[431,5]]}}}],["8997",{"_index":2595,"t":{"631":{"position":[[809,4]]}}}],["9",{"_index":2094,"t":{"525":{"position":[[14,1]]},"620":{"position":[[2692,1]]}}}],["9000",{"_index":1281,"t":{"228":{"position":[[117,4]]},"308":{"position":[[1044,5]]},"631":{"position":[[852,5]]}}}],["9000:9000/udp",{"_index":685,"t":{"78":{"position":[[340,13]]}}}],["93",{"_index":2522,"t":{"618":{"position":[[618,2]]}}}],["95",{"_index":2247,"t":{"553":{"position":[[1196,3]]}}}],["9990",{"_index":2219,"t":{"551":{"position":[[841,4]]}}}],["abil",{"_index":1515,"t":{"290":{"position":[[544,7]]}}}],["abnorm",{"_index":2234,"t":{"553":{"position":[[437,8]]}}}],["abov",{"_index":387,"t":{"34":{"position":[[1712,6]]},"260":{"position":[[876,6]]},"362":{"position":[[162,6]]},"553":{"position":[[126,5]]},"563":{"position":[[1073,6]]},"620":{"position":[[9,5]]}}}],["absent",{"_index":1995,"t":{"487":{"position":[[256,6]]}}}],["absolut",{"_index":859,"t":{"121":{"position":[[156,8]]}}}],["abus",{"_index":1987,"t":{"483":{"position":[[1006,7]]}}}],["accept",{"_index":1035,"t":{"173":{"position":[[184,7]]},"175":{"position":[[155,7]]},"200":{"position":[[854,8]]},"254":{"position":[[219,8]]},"256":{"position":[[183,8]]},"454":{"position":[[294,7]]},"553":{"position":[[1179,11]]},"640":{"position":[[765,6]]}}}],["access",{"_index":141,"t":{"14":{"position":[[304,11]]},"16":{"position":[[82,11]]},"78":{"position":[[1094,10]]},"117":{"position":[[1408,6]]},"125":{"position":[[81,6]]},"194":{"position":[[27,6]]},"198":{"position":[[104,6]]},"222":{"position":[[300,6]]},"308":{"position":[[600,6],[681,6]]},"356":{"position":[[64,7],[139,10]]},"360":{"position":[[94,6]]},"378":{"position":[[186,9]]},"384":{"position":[[84,6]]},"432":{"position":[[28,7],[111,13]]},"509":{"position":[[177,9]]},"557":{"position":[[136,6],[506,6]]},"561":{"position":[[773,11],[845,6],[1007,10]]},"563":{"position":[[451,10],[1163,10]]},"567":{"position":[[563,8],[600,6]]},"618":{"position":[[359,9]]}}}],["accident",{"_index":1111,"t":{"192":{"position":[[399,12]]}}}],["accommod",{"_index":1816,"t":{"414":{"position":[[201,11]]},"505":{"position":[[338,11]]}}}],["accompani",{"_index":1768,"t":{"354":{"position":[[1403,11]]}}}],["accord",{"_index":1684,"t":{"336":{"position":[[303,9]]},"577":{"position":[[1290,10],[1937,10]]}}}],["accordingli",{"_index":1851,"t":{"454":{"position":[[552,12]]}}}],["account",{"_index":823,"t":{"109":{"position":[[58,7]]},"216":{"position":[[278,7]]},"302":{"position":[[373,7]]},"342":{"position":[[432,10],[498,10]]},"479":{"position":[[269,8]]},"551":{"position":[[896,7]]},"553":{"position":[[2246,8]]},"620":{"position":[[858,8],[2206,8]]}}}],["accur",{"_index":2259,"t":{"553":{"position":[[2378,9]]},"563":{"position":[[872,9]]},"567":{"position":[[399,9]]}}}],["accuraci",{"_index":2280,"t":{"561":{"position":[[421,9]]},"563":{"position":[[941,9]]}}}],["achiev",{"_index":1466,"t":{"284":{"position":[[120,7]]},"328":{"position":[[82,7]]},"330":{"position":[[197,8]]},"332":{"position":[[97,8]]},"517":{"position":[[96,7]]},"523":{"position":[[260,8]]}}}],["ack/nack",{"_index":2243,"t":{"553":{"position":[[961,8]]}}}],["acknowledg",{"_index":773,"t":{"96":{"position":[[425,12],[1012,14],[1085,12]]},"386":{"position":[[96,16]]},"513":{"position":[[138,15],[341,12]]}}}],["acquir",{"_index":2455,"t":{"606":{"position":[[395,7]]}}}],["act",{"_index":744,"t":{"90":{"position":[[38,4]]},"473":{"position":[[557,4]]},"479":{"position":[[95,4]]},"620":{"position":[[608,6]]},"633":{"position":[[292,6],[374,6]]},"635":{"position":[[122,4]]},"642":{"position":[[260,4]]},"644":{"position":[[371,4]]}}}],["action",{"_index":732,"t":{"88":{"position":[[163,6]]},"326":{"position":[[216,7]]},"328":{"position":[[62,7]]},"467":{"position":[[799,7]]},"577":{"position":[[2234,6]]}}}],["activ",{"_index":513,"t":{"50":{"position":[[212,6]]},"52":{"position":[[95,6]]},"54":{"position":[[2266,6]]},"284":{"position":[[294,8]]},"328":{"position":[[118,10]]},"469":{"position":[[278,10]]},"537":{"position":[[646,10],[687,10],[780,10]]},"539":{"position":[[209,10]]},"567":{"position":[[524,10],[717,10]]}}}],["actor",{"_index":1655,"t":{"326":{"position":[[340,6]]},"328":{"position":[[47,5],[134,6]]}}}],["actual",{"_index":886,"t":{"121":{"position":[[3026,8]]},"326":{"position":[[333,6]]},"563":{"position":[[695,6]]},"644":{"position":[[362,8]]}}}],["ad",{"_index":762,"t":{"92":{"position":[[398,6]]},"103":{"position":[[119,5]]},"137":{"position":[[246,6]]},"147":{"position":[[419,6]]},"272":{"position":[[274,6]]},"454":{"position":[[47,6],[204,5],[407,5]]}}}],["adapt",{"_index":288,"t":{"28":{"position":[[198,8]]},"547":{"position":[[51,10]]},"666":{"position":[[283,8]]}}}],["add",{"_index":42,"t":{"8":{"position":[[75,3]]},"18":{"position":[[103,3]]},"20":{"position":[[104,3]]},"22":{"position":[[458,4],[607,3]]},"28":{"position":[[103,3]]},"30":{"position":[[445,3]]},"54":{"position":[[62,3]]},"64":{"position":[[134,3]]},"94":{"position":[[74,3]]},"105":{"position":[[150,3]]},"115":{"position":[[172,3]]},"208":{"position":[[412,3]]},"272":{"position":[[455,3]]},"469":{"position":[[216,4]]},"481":{"position":[[0,3],[184,3]]},"549":{"position":[[648,4]]},"642":{"position":[[159,3]]},"646":{"position":[[28,4],[555,3]]}}}],["add(new",{"_index":355,"t":{"34":{"position":[[951,8],[1002,8]]},"92":{"position":[[193,8],[244,8],[292,8]]},"147":{"position":[[214,8],[265,8],[313,8]]}}}],["addit",{"_index":628,"t":{"62":{"position":[[1209,10]]},"284":{"position":[[312,10]]},"316":{"position":[[525,10]]},"342":{"position":[[384,8]]},"515":{"position":[[267,10]]},"531":{"position":[[3,8]]},"637":{"position":[[1405,10],[1512,10],[1782,10]]}}}],["addition",{"_index":1715,"t":{"342":{"position":[[579,13]]},"348":{"position":[[256,13]]},"426":{"position":[[201,13]]},"467":{"position":[[221,13]]},"497":{"position":[[91,13]]}}}],["addr",{"_index":1197,"t":{"210":{"position":[[35,5],[104,5]]}}}],["address",{"_index":603,"t":{"56":{"position":[[1613,9],[1670,9],[1759,9],[1815,10]]},"62":{"position":[[1176,7],[1479,7],[1619,7],[1665,8]]},"208":{"position":[[265,7],[306,7],[497,8]]},"210":{"position":[[299,7]]},"212":{"position":[[626,7],[665,7],[753,7],[761,7]]},"222":{"position":[[88,7],[116,7]]},"224":{"position":[[105,7],[133,7]]},"228":{"position":[[368,7]]},"236":{"position":[[87,9],[137,9]]},"238":{"position":[[383,7],[494,7]]},"240":{"position":[[28,10]]},"242":{"position":[[415,9]]},"244":{"position":[[411,9],[695,9]]},"246":{"position":[[455,10]]},"254":{"position":[[621,10]]},"292":{"position":[[516,7]]},"298":{"position":[[72,7],[781,7]]},"308":{"position":[[209,7],[239,7],[803,8]]},"320":{"position":[[63,9]]},"392":{"position":[[96,10],[121,9]]},"473":{"position":[[819,8]]},"475":{"position":[[87,7]]},"527":{"position":[[227,7]]},"529":{"position":[[537,8],[608,7],[715,9],[821,7]]},"559":{"position":[[167,7]]},"666":{"position":[[92,7]]}}}],["address=127.0.0.1",{"_index":1605,"t":{"308":{"position":[[1110,17]]}}}],["address=[rest",{"_index":1599,"t":{"308":{"position":[[772,13]]}}}],["adequ",{"_index":2122,"t":{"535":{"position":[[288,8]]}}}],["admin",{"_index":1272,"t":{"222":{"position":[[281,5],[320,5]]},"308":{"position":[[574,5],[615,5],[1172,5]]}}}],["admin=[true|fals",{"_index":1602,"t":{"308":{"position":[[919,18]]}}}],["admin=tru",{"_index":1607,"t":{"308":{"position":[[1273,10]]}}}],["administ",{"_index":2368,"t":{"577":{"position":[[1227,12]]}}}],["administr",{"_index":2380,"t":{"577":{"position":[[1891,14]]}}}],["adopt",{"_index":2576,"t":{"623":{"position":[[423,8]]}}}],["advanc",{"_index":1089,"t":{"184":{"position":[[280,8]]},"200":{"position":[[1166,8]]},"340":{"position":[[122,8]]}}}],["adversari",{"_index":1420,"t":{"268":{"position":[[659,12]]},"328":{"position":[[19,9]]},"330":{"position":[[53,9]]},"342":{"position":[[46,11]]}}}],["advertis",{"_index":1179,"t":{"208":{"position":[[594,9]]},"473":{"position":[[107,13],[462,13]]},"477":{"position":[[144,13]]}}}],["advic",{"_index":2290,"t":{"561":{"position":[[1586,6]]}}}],["advis",{"_index":2337,"t":{"569":{"position":[[412,7]]}}}],["affect",{"_index":2138,"t":{"537":{"position":[[668,7],[741,6]]},"545":{"position":[[235,8],[456,8]]},"553":{"position":[[1431,7]]},"579":{"position":[[412,6]]},"646":{"position":[[373,6]]}}}],["affili",{"_index":2701,"t":{"654":{"position":[[87,11]]}}}],["africa",{"_index":2535,"t":{"618":{"position":[[684,6]]},"620":{"position":[[2291,6],[2357,6],[2750,6]]}}}],["again",{"_index":1974,"t":{"483":{"position":[[387,6]]}}}],["against",{"_index":1714,"t":{"342":{"position":[[558,7]]},"483":{"position":[[934,7]]},"489":{"position":[[27,7]]},"505":{"position":[[283,7]]},"571":{"position":[[53,7]]},"577":{"position":[[102,7],[2276,7]]}}}],["agent",{"_index":1163,"t":{"208":{"position":[[131,5],[155,5]]}}}],["aggreg",{"_index":2338,"t":{"569":{"position":[[474,9]]},"660":{"position":[[200,10],[898,9]]}}}],["agnost",{"_index":1683,"t":{"336":{"position":[[220,8]]}}}],["agnostic",{"_index":2012,"t":{"499":{"position":[[122,12]]}}}],["agre",{"_index":2265,"t":{"557":{"position":[[377,6],[454,5]]}}}],["agreement",{"_index":2387,"t":{"579":{"position":[[44,9],[155,11]]}}}],["aim",{"_index":809,"t":{"105":{"position":[[10,4]]},"324":{"position":[[177,6]]},"340":{"position":[[3,3]]},"519":{"position":[[342,3]]},"529":{"position":[[3,3]]},"547":{"position":[[830,4]]},"563":{"position":[[1205,3]]},"614":{"position":[[17,4]]},"637":{"position":[[11,4],[879,5]]}}}],["aka",{"_index":2042,"t":{"519":{"position":[[613,3]]}}}],["alert",{"_index":105,"t":{"10":{"position":[[931,7]]}}}],["alic",{"_index":768,"t":{"96":{"position":[[178,8]]},"121":{"position":[[541,5],[998,5],[2883,5],[3054,5],[3228,8],[3290,8]]},"149":{"position":[[240,8]]},"288":{"position":[[36,5],[102,5],[233,6],[240,5],[337,5],[472,6],[479,5],[571,5],[616,5]]},"318":{"position":[[36,5],[95,5],[135,5],[219,6],[226,5],[300,5],[329,5],[390,5]]},"322":{"position":[[0,5]]}}}],["alice'",{"_index":887,"t":{"121":{"position":[[3063,7]]},"322":{"position":[[114,7]]}}}],["aliceprivatekey",{"_index":867,"t":{"121":{"position":[[1010,15],[1332,16],[1627,16]]}}}],["alicepublickey",{"_index":868,"t":{"121":{"position":[[1056,14]]}}}],["align",{"_index":415,"t":{"34":{"position":[[2307,5]]}}}],["aliv",{"_index":1227,"t":{"212":{"position":[[1262,5],[1286,5]]}}}],["allmessag",{"_index":452,"t":{"40":{"position":[[600,11]]}}}],["alloc",{"_index":2047,"t":{"519":{"position":[[995,9],[1062,8]]},"620":{"position":[[997,8]]}}}],["allow",{"_index":79,"t":{"10":{"position":[[433,8]]},"22":{"position":[[304,6]]},"121":{"position":[[427,6]]},"143":{"position":[[193,6]]},"145":{"position":[[381,6],[562,6],[646,6]]},"151":{"position":[[805,6]]},"161":{"position":[[381,8]]},"194":{"position":[[94,8]]},"208":{"position":[[735,7]]},"222":{"position":[[347,5],[360,5],[661,5]]},"234":{"position":[[453,8],[794,8],[1407,5]]},"264":{"position":[[577,6]]},"268":{"position":[[77,8]]},"270":{"position":[[182,8]]},"282":{"position":[[916,8]]},"284":{"position":[[828,6]]},"290":{"position":[[77,6],[294,6]]},"298":{"position":[[130,6]]},"300":{"position":[[1478,6]]},"310":{"position":[[217,6]]},"312":{"position":[[218,6]]},"336":{"position":[[244,6]]},"346":{"position":[[198,5]]},"354":{"position":[[1520,8],[1657,7]]},"374":{"position":[[49,6]]},"382":{"position":[[58,6]]},"402":{"position":[[131,8]]},"408":{"position":[[165,8]]},"422":{"position":[[81,8]]},"440":{"position":[[107,6]]},"499":{"position":[[135,8]]},"509":{"position":[[16,6]]},"513":{"position":[[108,6]]},"521":{"position":[[169,7],[356,5],[499,6]]},"523":{"position":[[67,6],[747,8]]},"551":{"position":[[54,6]]},"565":{"position":[[146,6]]},"582":{"position":[[750,8]]},"584":{"position":[[643,8]]},"610":{"position":[[587,5]]},"640":{"position":[[914,7]]},"650":{"position":[[265,7],[670,5]]},"656":{"position":[[148,8]]},"660":{"position":[[581,5]]},"666":{"position":[[38,8]]}}}],["along",{"_index":388,"t":{"34":{"position":[[1822,5]]},"202":{"position":[[51,5]]},"342":{"position":[[593,5]]}}}],["alongsid",{"_index":266,"t":{"24":{"position":[[1603,9]]},"40":{"position":[[176,9]]},"58":{"position":[[331,9]]},"473":{"position":[[874,9]]}}}],["alreadi",{"_index":2201,"t":{"551":{"position":[[219,7]]},"591":{"position":[[176,7]]},"616":{"position":[[1253,7]]},"637":{"position":[[835,7]]}}}],["altern",{"_index":625,"t":{"62":{"position":[[810,14]]},"378":{"position":[[170,11]]},"509":{"position":[[161,11]]},"620":{"position":[[1724,12]]}}}],["although",{"_index":1760,"t":{"354":{"position":[[1083,8]]},"457":{"position":[[798,8]]}}}],["altruist",{"_index":1922,"t":{"469":{"position":[[891,15]]}}}],["alway",{"_index":478,"t":{"44":{"position":[[338,6]]},"173":{"position":[[738,6]]},"175":{"position":[[752,6]]},"535":{"position":[[662,6]]},"635":{"position":[[1281,6]]}}}],["amazon",{"_index":1359,"t":{"248":{"position":[[927,6]]}}}],["ambient",{"_index":1478,"t":{"284":{"position":[[1037,7]]}}}],["amend",{"_index":2313,"t":{"563":{"position":[[1347,7]]}}}],["america",{"_index":2508,"t":{"618":{"position":[[548,7],[582,7]]},"620":{"position":[[2684,7],[2702,7]]}}}],["amic",{"_index":2362,"t":{"577":{"position":[[755,8]]}}}],["amongst",{"_index":2664,"t":{"637":{"position":[[1687,7]]}}}],["amount",{"_index":1256,"t":{"216":{"position":[[199,6]]},"228":{"position":[[409,6],[500,6]]},"302":{"position":[[275,6]]},"473":{"position":[[796,6],[1011,7]]},"479":{"position":[[246,6]]},"483":{"position":[[927,6]]},"523":{"position":[[190,6],[285,6],[468,6]]},"529":{"position":[[388,6]]},"547":{"position":[[651,6]]},"549":{"position":[[899,6]]},"551":{"position":[[331,6],[710,6]]},"614":{"position":[[117,6]]},"616":{"position":[[557,7]]}}}],["analysi",{"_index":2260,"t":{"555":{"position":[[59,8]]},"616":{"position":[[1219,8]]},"637":{"position":[[193,9]]}}}],["analyz",{"_index":2000,"t":{"493":{"position":[[13,7],[89,7],[245,7]]},"635":{"position":[[53,9]]}}}],["and/or",{"_index":1231,"t":{"212":{"position":[[1431,6]]}}}],["announc",{"_index":1180,"t":{"208":{"position":[[675,8]]},"298":{"position":[[157,9]]},"314":{"position":[[75,8]]}}}],["anonym",{"_index":1143,"t":{"200":{"position":[[512,9]]},"268":{"position":[[187,10],[524,9],[582,9]]},"270":{"position":[[19,9]]},"272":{"position":[[597,9]]},"316":{"position":[[506,10]]},"326":{"position":[[205,10]]},"328":{"position":[[0,9],[90,10],[227,9]]},"334":{"position":[[102,9]]},"412":{"position":[[145,10]]},"503":{"position":[[129,9],[251,10]]},"521":{"position":[[219,9]]}}}],["anoth",{"_index":143,"t":{"16":{"position":[[14,7]]},"119":{"position":[[1556,7]]},"342":{"position":[[72,7]]},"537":{"position":[[509,7]]},"547":{"position":[[796,7]]},"620":{"position":[[1516,7]]},"635":{"position":[[171,7]]}}}],["anyon",{"_index":1510,"t":{"290":{"position":[[301,6]]},"616":{"position":[[803,6],[864,6]]},"664":{"position":[[53,6]]}}}],["anyth",{"_index":709,"t":{"78":{"position":[[1246,9]]},"200":{"position":[[954,9]]},"256":{"position":[[293,9]]},"664":{"position":[[316,9]]}}}],["api",{"_index":561,"t":{"54":{"position":[[1869,3]]},"56":{"position":[[573,3],[1726,4]]},"78":{"position":[[1159,3]]},"101":{"position":[[61,4],[124,3],[197,4]]},"109":{"position":[[188,4]]},"200":{"position":[[32,3]]},"222":{"position":[[258,3],[326,4],[435,3]]},"236":{"position":[[235,4]]},"254":{"position":[[60,4]]},"256":{"position":[[103,4]]},"260":{"position":[[778,3]]},"308":{"position":[[22,3],[89,4],[158,3],[259,3],[375,3],[502,3],[621,3],[704,3],[1025,3],[1190,3]]},"438":{"position":[[160,4]]},"450":{"position":[[14,4]]},"582":{"position":[[589,3],[739,3]]},"584":{"position":[[482,3],[632,3]]},"610":{"position":[[98,3],[204,5]]},"668":{"position":[[31,3],[40,3],[133,3]]}}}],["app",{"_index":201,"t":{"22":{"position":[[356,3]]},"24":{"position":[[894,3],[932,3]]},"32":{"position":[[66,4],[527,4],[729,5]]},"34":{"position":[[349,5],[1691,3]]},"36":{"position":[[261,5]]},"38":{"position":[[252,5]]},"40":{"position":[[299,5]]},"42":{"position":[[130,3]]},"44":{"position":[[98,3],[207,3],[267,3]]},"46":{"position":[[78,3]]},"272":{"position":[[252,3]]},"450":{"position":[[591,5]]},"519":{"position":[[1726,4]]},"635":{"position":[[187,3],[369,4],[406,3],[504,3]]},"660":{"position":[[71,4]]},"668":{"position":[[160,3],[282,3],[311,4]]}}}],["app%2f2%2fchatroom",{"_index":1148,"t":{"200":{"position":[[786,18]]}}}],["app.css",{"_index":338,"t":{"34":{"position":[[328,11],[1899,7]]}}}],["app.jsx",{"_index":318,"t":{"32":{"position":[[655,7]]},"34":{"position":[[88,7]]}}}],["app/0/a/proto",{"_index":1432,"t":{"272":{"position":[[327,14]]}}}],["app/1/default/proto",{"_index":1838,"t":{"448":{"position":[[601,21]]},"450":{"position":[[756,21]]}}}],["app/1/messages/proto",{"_index":719,"t":{"86":{"position":[[186,22]]}}}],["app/1/notifications/proto",{"_index":979,"t":{"139":{"position":[[922,28]]},"446":{"position":[[137,27],[311,27]]}}}],["app/2/chatroom",{"_index":1144,"t":{"200":{"position":[[562,14]]}}}],["appear",{"_index":131,"t":{"12":{"position":[[445,8]]}}}],["appli",{"_index":81,"t":{"10":{"position":[[468,5]]},"113":{"position":[[280,7]]},"234":{"position":[[866,7],[931,7],[1250,5]]},"354":{"position":[[393,7]]},"525":{"position":[[214,7]]},"531":{"position":[[309,6]]},"549":{"position":[[1717,7]]},"561":{"position":[[656,5]]},"569":{"position":[[587,5]]},"620":{"position":[[147,5]]},"635":{"position":[[1874,8],[3424,8]]}}}],["applic",{"_index":169,"t":{"18":{"position":[[346,13]]},"22":{"position":[[51,11],[276,12]]},"24":{"position":[[87,12],[848,11],[1168,11],[1257,11],[1516,11]]},"28":{"position":[[241,12]]},"30":{"position":[[88,12]]},"32":{"position":[[144,11]]},"34":{"position":[[1837,11]]},"36":{"position":[[24,12]]},"38":{"position":[[27,12]]},"40":{"position":[[131,11],[1438,11]]},"48":{"position":[[105,12]]},"50":{"position":[[129,12]]},"52":{"position":[[1283,12]]},"54":{"position":[[966,12],[1189,12],[1257,13],[1698,12],[1885,12]]},"86":{"position":[[32,11],[556,12]]},"98":{"position":[[103,12]]},"107":{"position":[[176,11],[474,13]]},"111":{"position":[[126,13]]},"121":{"position":[[243,11]]},"123":{"position":[[108,12],[403,12]]},"139":{"position":[[709,13]]},"145":{"position":[[32,11],[1132,12]]},"151":{"position":[[364,11]]},"173":{"position":[[564,11]]},"175":{"position":[[679,11]]},"260":{"position":[[612,12],[1012,11]]},"264":{"position":[[51,13],[113,11],[177,11]]},"270":{"position":[[99,11],[319,12]]},"272":{"position":[[8,11],[730,11]]},"320":{"position":[[5,12]]},"354":{"position":[[28,11]]},"358":{"position":[[0,12]]},"370":{"position":[[96,12]]},"382":{"position":[[113,12]]},"396":{"position":[[49,11],[144,12]]},"420":{"position":[[134,13]]},"426":{"position":[[184,11]]},"428":{"position":[[123,11]]},"436":{"position":[[39,11]]},"450":{"position":[[75,11],[405,11],[574,12]]},"503":{"position":[[74,12],[175,12]]},"515":{"position":[[311,11]]},"519":{"position":[[894,12]]},"529":{"position":[[211,10]]},"535":{"position":[[694,10]]},"553":{"position":[[1138,12]]},"561":{"position":[[697,10],[959,10]]},"569":{"position":[[628,10]]},"577":{"position":[[2017,10]]},"582":{"position":[[759,12]]},"584":{"position":[[652,12]]},"602":{"position":[[196,13]]},"608":{"position":[[435,12]]},"612":{"position":[[17,11]]},"620":{"position":[[2542,13]]},"656":{"position":[[134,13]]},"658":{"position":[[166,13],[219,12]]}}}],["application'",{"_index":542,"t":{"54":{"position":[[218,13],[368,13]]},"92":{"position":[[12,13]]},"147":{"position":[[12,13]]}}}],["application/json",{"_index":1140,"t":{"200":{"position":[[432,17],[863,17]]},"254":{"position":[[228,17]]}}}],["applicationinfo",{"_index":1839,"t":{"450":{"position":[[38,15],[312,15]]}}}],["appoint",{"_index":2452,"t":{"606":{"position":[[293,7]]}}}],["appreci",{"_index":480,"t":{"46":{"position":[[15,10]]},"635":{"position":[[2347,11]]}}}],["approach",{"_index":256,"t":{"24":{"position":[[1200,8]]},"234":{"position":[[831,9]]},"272":{"position":[[347,8]]},"290":{"position":[[166,8]]},"457":{"position":[[821,10]]},"461":{"position":[[56,10]]},"503":{"position":[[21,9]]},"525":{"position":[[85,8]]},"533":{"position":[[13,9]]},"616":{"position":[[514,9],[672,10]]},"620":{"position":[[789,9]]},"635":{"position":[[293,9]]}}}],["appropri",{"_index":663,"t":{"72":{"position":[[52,11]]},"473":{"position":[[784,11]]},"561":{"position":[[806,11]]}}}],["approv",{"_index":498,"t":{"46":{"position":[[516,9]]}}}],["apt",{"_index":931,"t":{"127":{"position":[[197,3]]}}}],["arbitr",{"_index":2349,"t":{"575":{"position":[[102,12]]},"577":{"position":[[260,11],[427,11],[549,11],[1215,11],[1263,11],[1339,11],[1447,8],[1499,11],[1656,11],[1781,11],[1860,12],[1910,10],[1986,12],[2264,11]]}}}],["arch",{"_index":928,"t":{"127":{"position":[[164,4]]}}}],["architectur",{"_index":2021,"t":{"505":{"position":[[33,12]]},"547":{"position":[[128,13]]},"616":{"position":[[733,14],[784,12]]}}}],["archiv",{"_index":2572,"t":{"623":{"position":[[48,9],[229,7]]},"635":{"position":[[754,7],[1757,7]]},"637":{"position":[[473,8]]}}}],["area",{"_index":2451,"t":{"606":{"position":[[240,4]]}}}],["arg",{"_index":678,"t":{"78":{"position":[[66,8],[189,6]]}}}],["arguabl",{"_index":1961,"t":{"479":{"position":[[1120,8]]}}}],["argument",{"_index":680,"t":{"78":{"position":[[211,9]]},"204":{"position":[[236,8]]},"208":{"position":[[620,8]]},"210":{"position":[[205,8]]},"212":{"position":[[1232,8],[1376,8],[1489,8],[1683,8]]},"226":{"position":[[240,8]]},"228":{"position":[[259,8]]}}}],["aris",{"_index":2336,"t":{"569":{"position":[[251,7]]},"571":{"position":[[130,7]]},"577":{"position":[[690,7]]}}}],["aros",{"_index":2383,"t":{"577":{"position":[[2110,5]]}}}],["around",{"_index":2179,"t":{"549":{"position":[[871,6]]},"612":{"position":[[117,6]]}}}],["array",{"_index":209,"t":{"22":{"position":[[432,7]]},"68":{"position":[[21,5],[271,5]]}}}],["arriv",{"_index":1748,"t":{"352":{"position":[[898,7]]},"553":{"position":[[1216,8]]}}}],["articl",{"_index":1775,"t":{"356":{"position":[[605,7]]}}}],["as::volume/period@@waku",{"_index":367,"t":{"34":{"position":[[1169,8]]}}}],["hackathon",{"_index":2732,"t":{"668":{"position":[[419,10]]}}}],["hackenproof",{"_index":2705,"t":{"654":{"position":[[238,11]]}}}],["hammer",{"_index":2657,"t":{"637":{"position":[[869,6],[1455,6],[1562,6],[1833,6]]}}}],["hand",{"_index":2081,"t":{"523":{"position":[[587,4]]},"635":{"position":[[157,5]]},"646":{"position":[[13,5]]}}}],["handl",{"_index":26,"t":{"4":{"position":[[124,6]]},"14":{"position":[[74,6]]},"24":{"position":[[1481,6]]},"48":{"position":[[70,6]]},"52":{"position":[[307,6],[1248,6]]},"123":{"position":[[196,8]]},"151":{"position":[[616,6]]},"660":{"position":[[268,6]]}}}],["handleinputchang",{"_index":345,"t":{"34":{"position":[[522,17]]}}}],["happen",{"_index":521,"t":{"52":{"position":[[324,7]]},"117":{"position":[[1296,6]]},"151":{"position":[[633,7]]},"212":{"position":[[1173,6]]},"604":{"position":[[39,6]]},"635":{"position":[[3398,7]]}}}],["hard",{"_index":1640,"t":{"322":{"position":[[96,5]]}}}],["hardcod",{"_index":861,"t":{"121":{"position":[[325,9]]}}}],["harm",{"_index":2324,"t":{"567":{"position":[[423,8]]}}}],["harmless",{"_index":2344,"t":{"571":{"position":[[35,8]]}}}],["harry'",{"_index":1503,"t":{"288":{"position":[[456,7],[531,7]]}}}],["hash",{"_index":1416,"t":{"268":{"position":[[460,6]]},"272":{"position":[[186,7],[669,4],[802,4]]},"286":{"position":[[109,4]]},"292":{"position":[[139,4],[291,6]]},"372":{"position":[[57,4]]},"404":{"position":[[95,4]]},"479":{"position":[[83,4]]}}}],["have",{"_index":1885,"t":{"461":{"position":[[299,6]]},"637":{"position":[[49,6]]}}}],["haven't",{"_index":2493,"t":{"616":{"position":[[1442,7]]}}}],["hd",{"_index":2540,"t":{"618":{"position":[[824,2],[839,2]]},"620":{"position":[[2600,2]]}}}],["head",{"_index":506,"t":{"46":{"position":[[670,4]]},"304":{"position":[[794,4]]},"579":{"position":[[268,8]]}}}],["header",{"_index":1138,"t":{"200":{"position":[[410,6],[847,6]]},"254":{"position":[[212,6]]},"256":{"position":[[176,6]]}}}],["health",{"_index":728,"t":{"88":{"position":[[24,6],[313,6],[339,7]]},"256":{"position":[[18,6],[68,6]]}}}],["healthi",{"_index":1374,"t":{"256":{"position":[[212,7]]},"591":{"position":[[213,7]]}}}],["healthstatu",{"_index":735,"t":{"88":{"position":[[217,12]]}}}],["healthstatus.minimallyhealthi",{"_index":740,"t":{"88":{"position":[[448,30]]}}}],["healthstatus.sufficientlyhealthi",{"_index":738,"t":{"88":{"position":[[351,33]]}}}],["heard",{"_index":2356,"t":{"577":{"position":[[495,5]]}}}],["heavi",{"_index":1430,"t":{"272":{"position":[[138,5]]}}}],["height",{"_index":398,"t":{"34":{"position":[[2038,7]]}}}],["hel1.misc.wakudev",{"_index":2658,"t":{"637":{"position":[[1090,18]]}}}],["hel1.misc.wakudev.status.im",{"_index":2622,"t":{"635":{"position":[[960,29],[2032,29]]}}}],["held",{"_index":2326,"t":{"569":{"position":[[15,4]]},"577":{"position":[[1519,4]]},"579":{"position":[[532,4]]}}}],["hello",{"_index":769,"t":{"96":{"position":[[196,7]]},"149":{"position":[[258,7]]},"200":{"position":[[485,6]]}}}],["help",{"_index":21,"t":{"4":{"position":[[59,8],[150,4]]},"26":{"position":[[335,4]]},"78":{"position":[[836,4],[1279,4]]},"88":{"position":[[41,4]]},"121":{"position":[[16,5]]},"133":{"position":[[174,4]]},"161":{"position":[[538,5],[564,4]]},"200":{"position":[[987,4]]},"256":{"position":[[326,4]]},"264":{"position":[[280,5]]},"336":{"position":[[11,4]]},"487":{"position":[[131,5]]},"509":{"position":[[285,5]]},"551":{"position":[[268,5]]},"602":{"position":[[132,4]]},"604":{"position":[[407,4]]},"610":{"position":[[369,4],[788,4]]},"625":{"position":[[276,4]]},"654":{"position":[[253,4]]},"664":{"position":[[349,4]]}}}],["helper",{"_index":947,"t":{"127":{"position":[[479,6],[496,7]]}}}],["henc",{"_index":2443,"t":{"602":{"position":[[70,6]]},"620":{"position":[[1314,5]]}}}],["here",{"_index":44,"t":{"8":{"position":[[94,4]]},"82":{"position":[[240,4]]},"111":{"position":[[179,5]]},"180":{"position":[[376,5]]},"202":{"position":[[0,4]]},"264":{"position":[[0,4]]},"266":{"position":[[85,4]]},"342":{"position":[[250,5],[727,5],[872,5]]},"352":{"position":[[0,4]]},"503":{"position":[[288,4]]},"553":{"position":[[340,5],[1031,5]]},"618":{"position":[[155,4]]}}}],["herein",{"_index":2286,"t":{"561":{"position":[[994,6],[1257,6],[1493,7],[1527,6]]},"563":{"position":[[825,6],[1004,7]]},"577":{"position":[[1422,6]]}}}],["hesit",{"_index":283,"t":{"26":{"position":[[223,8]]}}}],["hex",{"_index":1167,"t":{"208":{"position":[[247,3]]},"212":{"position":[[516,3],[594,3]]},"304":{"position":[[271,3],[359,3],[385,3],[553,3]]},"392":{"position":[[35,3]]}}}],["hexadecim",{"_index":899,"t":{"123":{"position":[[372,11],[666,11],[806,11]]}}}],["hextobyt",{"_index":901,"t":{"123":{"position":[[474,10]]}}}],["hextobytes(privatekeyhex",{"_index":911,"t":{"123":{"position":[[910,26]]}}}],["hextobytes(symmetrickeyhex",{"_index":909,"t":{"123":{"position":[[854,28]]}}}],["hide",{"_index":1418,"t":{"268":{"position":[[624,4]]},"434":{"position":[[240,6]]}}}],["high",{"_index":1425,"t":{"270":{"position":[[345,4]]},"282":{"position":[[1071,4]]},"457":{"position":[[458,4]]},"521":{"position":[[386,4]]},"549":{"position":[[59,4]]},"553":{"position":[[711,4]]},"563":{"position":[[500,4],[1027,4]]},"644":{"position":[[461,4]]}}}],["higher",{"_index":2043,"t":{"519":{"position":[[686,6]]},"549":{"position":[[227,6],[272,6]]},"631":{"position":[[967,6]]},"633":{"position":[[644,6]]}}}],["highli",{"_index":285,"t":{"26":{"position":[[312,6]]},"246":{"position":[[139,6]]},"264":{"position":[[838,6]]}}}],["highlight",{"_index":2448,"t":{"604":{"position":[[456,11]]},"608":{"position":[[233,9]]},"612":{"position":[[252,9]]}}}],["histor",{"_index":237,"t":{"24":{"position":[[528,10]]},"54":{"position":[[537,10],[661,10]]},"161":{"position":[[412,10]]},"163":{"position":[[87,10]]},"171":{"position":[[121,10]]},"182":{"position":[[791,10]]},"262":{"position":[[192,10]]},"300":{"position":[[1513,10],[1708,10]]},"350":{"position":[[195,10]]},"356":{"position":[[456,10]]},"471":{"position":[[44,8]]},"650":{"position":[[586,10]]}}}],["histori",{"_index":1066,"t":{"180":{"position":[[1025,8]]},"473":{"position":[[755,8]]},"475":{"position":[[48,8]]},"487":{"position":[[229,8]]},"623":{"position":[[154,7]]}}}],["historyqueri",{"_index":1923,"t":{"471":{"position":[[104,12]]},"473":{"position":[[847,12]]}}}],["historyrespons",{"_index":1924,"t":{"471":{"position":[[151,15]]},"473":{"position":[[1038,15]]}}}],["hold",{"_index":2343,"t":{"571":{"position":[[27,4]]}}}],["home/.cargo/env",{"_index":941,"t":{"127":{"position":[[313,18]]}}}],["homebrew",{"_index":929,"t":{"127":{"position":[[181,10]]}}}],["hongkong",{"_index":1558,"t":{"300":{"position":[[1779,8]]},"310":{"position":[[570,8]]},"312":{"position":[[498,8]]}}}],["honour",{"_index":1971,"t":{"483":{"position":[[199,7]]}}}],["hood",{"_index":1127,"t":{"196":{"position":[[172,5]]},"356":{"position":[[649,5]]}}}],["hop",{"_index":1286,"t":{"228":{"position":[[581,3],[628,4]]},"547":{"position":[[614,4],[661,4]]},"549":{"position":[[175,4],[242,5],[473,4],[608,4],[644,3],[909,4],[1148,4],[1308,4],[1352,4],[1876,4]]},"553":{"position":[[1368,3],[1953,3]]},"646":{"position":[[518,5]]}}}],["hopr",{"_index":1957,"t":{"479":{"position":[[688,6]]}}}],["host",{"_index":616,"t":{"62":{"position":[[389,4]]},"78":{"position":[[1122,4]]},"222":{"position":[[472,4]]},"276":{"position":[[347,4]]},"282":{"position":[[521,4]]},"370":{"position":[[56,7]]}}}],["host]:[websocket",{"_index":121,"t":{"12":{"position":[[142,16]]}}}],["hour",{"_index":1255,"t":{"216":{"position":[[194,4]]},"234":{"position":[[1367,5]]},"300":{"position":[[698,7],[1268,7]]},"310":{"position":[[509,7],[777,7]]},"473":{"position":[[747,4]]},"475":{"position":[[40,4]]}}}],["http",{"_index":76,"t":{"10":{"position":[[350,8],[612,5]]},"127":{"position":[[256,8],[403,8],[551,8]]},"188":{"position":[[65,5]]},"222":{"position":[[59,4],[136,4],[190,4],[315,4],[520,4]]},"224":{"position":[[198,4]]},"360":{"position":[[17,5]]}}}],["http://127.0.0.1:8645/debug/v1/info",{"_index":1135,"t":{"200":{"position":[[184,37]]},"254":{"position":[[170,37]]}}}],["http://127.0.0.1:8645/debug/v1/vers",{"_index":1134,"t":{"200":{"position":[[110,40]]}}}],["http://127.0.0.1:8645/health",{"_index":1372,"t":{"256":{"position":[[141,30]]}}}],["http://127.0.0.1:8645/relay/v1/auto/messag",{"_index":1137,"t":{"200":{"position":[[359,46]]}}}],["http://127.0.0.1:8645/store/v1/messages?contenttopics=%2fmi",{"_index":1147,"t":{"200":{"position":[[725,60]]}}}],["http://localhost:3000/d/yns_4vfvk/nwaku",{"_index":1130,"t":{"198":{"position":[[6,39]]}}}],["https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.j",{"_index":215,"t":{"22":{"position":[[735,70]]}}}],["https://creativecommons.org/licenses/by/4.0",{"_index":2321,"t":{"565":{"position":[[390,45]]}}}],["https://examples.waku.org",{"_index":2730,"t":{"668":{"position":[[336,26]]}}}],["https://examples.waku.org/rln",{"_index":1701,"t":{"340":{"position":[[391,29]]}}}],["https://github.com/vacp2p/research/issues/148",{"_index":1670,"t":{"330":{"position":[[476,46]]},"342":{"position":[[256,46]]}}}],["https://github.com/waku",{"_index":507,"t":{"46":{"position":[[678,23]]},"76":{"position":[[99,23]]},"111":{"position":[[185,23]]},"129":{"position":[[129,23]]},"190":{"position":[[10,23]]},"342":{"position":[[878,23]]},"477":{"position":[[21,23],[91,23],[164,23],[235,23]]},"481":{"position":[[31,23],[137,23],[225,23],[321,23]]},"485":{"position":[[70,23],[141,23]]},"489":{"position":[[52,23],[145,23]]},"493":{"position":[[42,23],[198,23],[362,23],[504,23]]},"551":{"position":[[962,23]]},"614":{"position":[[172,23]]},"616":{"position":[[1080,23],[1169,23],[1321,23]]},"620":{"position":[[181,23],[2830,23]]},"623":{"position":[[459,23]]},"627":{"position":[[0,23],[42,23]]},"629":{"position":[[122,23]]},"637":{"position":[[1141,23],[1264,23]]}}}],["https://ideas.waku.org",{"_index":2724,"t":{"660":{"position":[[1296,23]]}}}],["https://sh.rustup.r",{"_index":939,"t":{"127":{"position":[[280,20],[427,20],[575,20]]}}}],["https://unpkg.com/@waku/sdk@latest/bundle/index.j",{"_index":181,"t":{"20":{"position":[[227,53]]},"82":{"position":[[173,53]]}}}],["https://vac.dev/build",{"_index":1717,"t":{"342":{"position":[[733,24]]}}}],["hub",{"_index":664,"t":{"74":{"position":[[52,3]]}}}],["huge",{"_index":2256,"t":{"553":{"position":[[2060,4]]}}}],["hundr",{"_index":2340,"t":{"569":{"position":[[537,7]]}}}],["h|m|s|m",{"_index":1308,"t":{"234":{"position":[[528,8]]}}}],["i.",{"_index":1981,"t":{"483":{"position":[[805,5]]},"635":{"position":[[63,4]]}}}],["i13n",{"_index":1888,"t":{"461":{"position":[[346,4]]},"465":{"position":[[93,4]]},"473":{"position":[[280,4],[1165,4]]}}}],["id",{"_index":754,"t":{"90":{"position":[[381,3],[425,3]]},"96":{"position":[[533,2]]},"208":{"position":[[39,2],[52,2],[112,2]]},"212":{"position":[[474,2],[537,2]]},"272":{"position":[[233,3],[628,3]]},"637":{"position":[[702,3]]}}}],["id'",{"_index":1437,"t":{"272":{"position":[[807,4]]}}}],["id=\"messag",{"_index":379,"t":{"34":{"position":[[1479,11]]}}}],["id=1",{"_index":703,"t":{"78":{"position":[[902,5]]}}}],["idea",{"_index":2162,"t":{"545":{"position":[[537,4]]},"553":{"position":[[593,4],[1653,4]]},"660":{"position":[[1230,5]]}}}],["ideal",{"_index":1917,"t":{"469":{"position":[[329,7]]}}}],["ident",{"_index":1213,"t":{"212":{"position":[[491,8],[565,8]]},"326":{"position":[[116,11]]},"434":{"position":[[231,8]]},"479":{"position":[[838,11]]},"483":{"position":[[594,10]]},"652":{"position":[[99,9]]}}}],["identif",{"_index":1654,"t":{"326":{"position":[[311,14]]}}}],["identifi",{"_index":745,"t":{"90":{"position":[[49,10],[243,8]]},"208":{"position":[[185,10]]},"268":{"position":[[311,12]]},"272":{"position":[[203,10]]},"326":{"position":[[77,11]]},"328":{"position":[[161,12]]},"334":{"position":[[190,8],[344,12]]},"354":{"position":[[931,12]]},"376":{"position":[[68,8]]},"404":{"position":[[21,10]]},"410":{"position":[[46,10]]},"529":{"position":[[638,11]]},"579":{"position":[[277,11]]},"608":{"position":[[172,8]]}}}],["idl",{"_index":1228,"t":{"212":{"position":[[1296,4]]}}}],["ii",{"_index":2032,"t":{"517":{"position":[[85,3]]},"519":{"position":[[582,3]]},"545":{"position":[[258,3]]},"547":{"position":[[926,3]]},"577":{"position":[[965,4]]},"616":{"position":[[1130,3],[1574,3]]}}}],["illustr",{"_index":1744,"t":{"352":{"position":[[18,12]]}}}],["imag",{"_index":565,"t":{"54":{"position":[[2465,6],[2550,6]]},"74":{"position":[[17,6],[144,6]]},"76":{"position":[[30,5],[157,5],[175,5]]},"78":{"position":[[58,7],[116,5],[129,5]]},"155":{"position":[[295,5]]},"248":{"position":[[857,6]]}}}],["immedi",{"_index":1394,"t":{"260":{"position":[[1075,12]]},"340":{"position":[[203,9]]},"541":{"position":[[185,11]]},"573":{"position":[[217,11]]}}}],["impact",{"_index":1967,"t":{"481":{"position":[[285,6]]},"553":{"position":[[2065,6]]},"616":{"position":[[1235,6]]},"623":{"position":[[262,6],[343,7]]},"642":{"position":[[356,6]]}}}],["implement",{"_index":163,"t":{"18":{"position":[[205,14]]},"103":{"position":[[137,9]]},"338":{"position":[[81,15]]},"340":{"position":[[354,14]]},"390":{"position":[[34,10]]},"430":{"position":[[56,12]]},"533":{"position":[[67,11]]},"555":{"position":[[187,15]]},"648":{"position":[[50,11],[105,11],[165,11]]},"660":{"position":[[707,9]]},"666":{"position":[[8,11]]}}}],["impli",{"_index":2171,"t":{"549":{"position":[[281,7]]},"561":{"position":[[163,8],[1385,7]]},"567":{"position":[[246,5]]},"650":{"position":[[10,7]]}}}],["implic",{"_index":1409,"t":{"266":{"position":[[71,13]]},"640":{"position":[[106,12],[961,12]]}}}],["implicit",{"_index":1898,"t":{"463":{"position":[[287,9]]}}}],["import",{"_index":65,"t":{"10":{"position":[[181,9]]},"20":{"position":[[205,6]]},"22":{"position":[[713,6],[728,6]]},"32":{"position":[[182,6],[237,6],[681,6]]},"34":{"position":[[144,6],[189,6],[228,6],[286,6],[321,6]]},"36":{"position":[[208,6]]},"38":{"position":[[194,6]]},"40":{"position":[[223,6]]},"60":{"position":[[135,6]]},"62":{"position":[[147,6]]},"64":{"position":[[282,6],[327,6],[816,6]]},"66":{"position":[[86,6],[131,6],[178,6]]},"68":{"position":[[123,6]]},"82":{"position":[[124,6]]},"84":{"position":[[94,6]]},"86":{"position":[[86,6]]},"88":{"position":[[208,6]]},"90":{"position":[[511,6]]},"92":{"position":[[62,6]]},"117":{"position":[[162,6],[415,6],[882,6]]},"119":{"position":[[162,6],[570,6],[1051,6]]},"121":{"position":[[563,6],[640,6],[734,6],[2228,6],[2291,6]]},"123":{"position":[[453,6]]},"139":{"position":[[94,6]]},"143":{"position":[[272,6]]},"145":{"position":[[86,6]]},"147":{"position":[[83,6]]},"165":{"position":[[94,6]]},"167":{"position":[[85,6]]},"169":{"position":[[92,6]]},"178":{"position":[[151,6]]},"180":{"position":[[180,6]]},"326":{"position":[[143,9]]},"442":{"position":[[131,6],[303,6]]},"444":{"position":[[7,6],[149,6]]},"446":{"position":[[7,6],[177,6]]},"448":{"position":[[133,6],[291,6],[465,6]]},"450":{"position":[[465,6],[622,6]]},"454":{"position":[[572,6],[686,6]]},"479":{"position":[[861,9]]},"519":{"position":[[444,10]]},"549":{"position":[[139,9],[1614,9]]},"553":{"position":[[346,9]]}}}],["impos",{"_index":67,"t":{"10":{"position":[[213,6]]},"316":{"position":[[517,7]]},"354":{"position":[[902,7]]},"418":{"position":[[164,8]]},"507":{"position":[[245,7]]}}}],["imposs",{"_index":2070,"t":{"521":{"position":[[426,11]]}}}],["improv",{"_index":286,"t":{"26":{"position":[[340,7]]},"272":{"position":[[510,7]]},"286":{"position":[[544,9]]},"336":{"position":[[874,8]]},"582":{"position":[[563,13]]},"584":{"position":[[456,13]]},"610":{"position":[[196,7]]},"616":{"position":[[690,11]]}}}],["in/out",{"_index":2061,"t":{"519":{"position":[[1679,6]]}}}],["incent",{"_index":1716,"t":{"342":{"position":[[682,9]]},"469":{"position":[[704,10],[734,10]]}}}],["incentiv",{"_index":1876,"t":{"459":{"position":[[13,12]]}}}],["incentivis",{"_index":262,"t":{"24":{"position":[[1543,15]]},"58":{"position":[[271,15]]},"340":{"position":[[20,12]]},"342":{"position":[[396,13]]},"358":{"position":[[383,15]]},"457":{"position":[[16,15]]},"469":{"position":[[80,12]]},"473":{"position":[[16,12]]},"491":{"position":[[67,12]]},"493":{"position":[[420,15]]},"497":{"position":[[16,11]]}}}],["incid",{"_index":2702,"t":{"654":{"position":[[126,9]]}}}],["incident",{"_index":2333,"t":{"569":{"position":[[202,11]]}}}],["includ",{"_index":216,"t":{"22":{"position":[[814,7]]},"52":{"position":[[689,8]]},"127":{"position":[[55,9]]},"192":{"position":[[341,7]]},"246":{"position":[[404,8]]},"290":{"position":[[233,9],[591,9]]},"324":{"position":[[360,7]]},"330":{"position":[[392,9]]},"346":{"position":[[305,9]]},"356":{"position":[[223,8],[446,9]]},"370":{"position":[[131,9]]},"376":{"position":[[182,8]]},"388":{"position":[[171,7]]},"416":{"position":[[84,9]]},"428":{"position":[[68,9]]},"465":{"position":[[44,7]]},"499":{"position":[[5,8]]},"515":{"position":[[84,8]]},"557":{"position":[[168,9]]},"561":{"position":[[172,9]]},"563":{"position":[[243,7],[727,9],[1259,9]]},"565":{"position":[[233,9]]},"567":{"position":[[104,9]]},"571":{"position":[[103,9],[210,9]]},"577":{"position":[[74,8],[1873,9]]},"612":{"position":[[98,7]]}}}],["incom",{"_index":440,"t":{"38":{"position":[[129,8]]},"94":{"position":[[31,8]]},"161":{"position":[[163,8]]},"262":{"position":[[141,8]]},"336":{"position":[[666,8]]},"582":{"position":[[455,8]]},"584":{"position":[[348,8]]},"587":{"position":[[157,8]]},"591":{"position":[[255,8]]}}}],["incorpor",{"_index":1728,"t":{"346":{"position":[[104,12]]},"577":{"position":[[1409,12]]}}}],["increas",{"_index":1289,"t":{"228":{"position":[[610,8]]},"270":{"position":[[8,8]]},"290":{"position":[[373,9]]},"457":{"position":[[327,9]]},"545":{"position":[[470,10]]},"553":{"position":[[926,10],[1580,9],[2170,8]]},"644":{"position":[[118,9]]},"646":{"position":[[159,8],[211,8]]}}}],["incur",{"_index":2462,"t":{"608":{"position":[[554,5]]}}}],["indemnifi",{"_index":2342,"t":{"571":{"position":[[10,9]]}}}],["independ",{"_index":2148,"t":{"539":{"position":[[110,11]]}}}],["index",{"_index":371,"t":{"34":{"position":[[1246,6]]},"180":{"position":[[41,5],[793,5]]},"212":{"position":[[318,5],[328,5]]}}}],["indic",{"_index":325,"t":{"32":{"position":[[930,9]]},"50":{"position":[[277,9]]},"352":{"position":[[216,9]]},"513":{"position":[[177,10]]},"529":{"position":[[418,9]]},"545":{"position":[[505,9]]},"553":{"position":[[225,8]]},"633":{"position":[[687,9]]},"635":{"position":[[3662,9]]}}}],["individu",{"_index":2174,"t":{"549":{"position":[[542,10],[714,10],[2016,10]]}}}],["industri",{"_index":2300,"t":{"563":{"position":[[168,8]]}}}],["inf",{"_index":1330,"t":{"238":{"position":[[84,3]]},"242":{"position":[[93,3]]},"244":{"position":[[96,3]]}}}],["info",{"_index":127,"t":{"12":{"position":[[311,5],[387,5]]},"34":{"position":[[1695,4]]},"40":{"position":[[1262,4]]},"52":{"position":[[1014,4]]},"58":{"position":[[142,4]]},"72":{"position":[[115,4]]},"78":{"position":[[841,4],[1022,4]]},"84":{"position":[[226,4]]},"86":{"position":[[461,4]]},"92":{"position":[[342,4]]},"113":{"position":[[170,4]]},"121":{"position":[[176,4]]},"125":{"position":[[239,4]]},"139":{"position":[[328,4]]},"145":{"position":[[1037,4]]},"147":{"position":[[363,4]]},"153":{"position":[[206,4]]},"157":{"position":[[433,4]]},"159":{"position":[[623,4]]},"173":{"position":[[693,4]]},"175":{"position":[[717,4]]},"180":{"position":[[935,4]]},"182":{"position":[[542,4]]},"188":{"position":[[170,4]]},"200":{"position":[[163,4]]},"206":{"position":[[127,5]]},"236":{"position":[[0,4],[104,4],[209,4]]},"246":{"position":[[466,4]]},"254":{"position":[[122,4],[562,4]]},"268":{"position":[[467,4]]},"272":{"position":[[575,4]]},"274":{"position":[[117,4]]},"278":{"position":[[673,4]]},"280":{"position":[[796,4]]},"282":{"position":[[837,4]]},"298":{"position":[[695,4]]},"310":{"position":[[697,4]]},"314":{"position":[[304,4]]},"316":{"position":[[231,4]]},"336":{"position":[[838,4]]},"362":{"position":[[169,4]]},"509":{"position":[[264,4]]},"511":{"position":[[234,4]]},"513":{"position":[[306,4]]}}}],["inform",{"_index":701,"t":{"78":{"position":[[740,11]]},"121":{"position":[[366,11]]},"123":{"position":[[273,11]]},"240":{"position":[[39,11]]},"254":{"position":[[91,11]]},"268":{"position":[[257,12],[324,11]]},"316":{"position":[[325,11]]},"328":{"position":[[174,11]]},"334":{"position":[[357,11]]},"352":{"position":[[875,9]]},"354":{"position":[[1568,11]]},"376":{"position":[[210,11]]},"380":{"position":[[51,11]]},"394":{"position":[[33,11]]},"400":{"position":[[47,11]]},"503":{"position":[[196,8]]},"525":{"position":[[65,6]]},"533":{"position":[[191,11]]},"537":{"position":[[937,11]]},"553":{"position":[[986,11]]},"561":{"position":[[1076,13],[1245,11],[1505,11]]},"563":{"position":[[803,11],[982,11],[1246,12]]},"620":{"position":[[34,8]]}}}],["infrastructur",{"_index":1718,"t":{"342":{"position":[[777,14]]},"358":{"position":[[134,15],[301,14]]},"497":{"position":[[153,14]]},"555":{"position":[[552,14]]},"660":{"position":[[808,15]]}}}],["infring",{"_index":2274,"t":{"561":{"position":[[278,12]]}}}],["infura",{"_index":1784,"t":{"360":{"position":[[122,6],[146,6]]}}}],["init",{"_index":953,"t":{"127":{"position":[[645,4]]}}}],["initi",{"_index":1690,"t":{"338":{"position":[[73,7]]},"366":{"position":[[21,7]]},"469":{"position":[[856,7]]},"604":{"position":[[17,7],[144,7]]},"648":{"position":[[8,7]]}}}],["initialis",{"_index":448,"t":{"40":{"position":[[143,11]]},"44":{"position":[[0,10],[191,10]]},"284":{"position":[[5,12]]}}}],["inject",{"_index":1993,"t":{"487":{"position":[[200,9]]},"582":{"position":[[204,9]]},"584":{"position":[[97,9]]},"587":{"position":[[102,9],[127,9]]},"589":{"position":[[252,9]]},"591":{"position":[[77,9],[333,9]]},"652":{"position":[[211,9]]}}}],["innov",{"_index":1509,"t":{"290":{"position":[[155,10]]}}}],["input",{"_index":343,"t":{"34":{"position":[[502,5],[1460,6],[1491,6],[2339,5]]},"36":{"position":[[100,5]]}}}],["inputmessag",{"_index":339,"t":{"34":{"position":[[363,14],[471,12]]},"36":{"position":[[613,12]]}}}],["inputmessage.length",{"_index":426,"t":{"36":{"position":[[445,19]]}}}],["insecur",{"_index":73,"t":{"10":{"position":[[288,8]]},"14":{"position":[[57,8]]}}}],["insert",{"_index":1997,"t":{"489":{"position":[[129,9]]},"631":{"position":[[8,6],[473,7],[1469,6]]},"637":{"position":[[106,6],[445,6],[1416,9],[1523,9],[1617,6],[1658,6],[1793,9]]}}}],["inspir",{"_index":1908,"t":{"465":{"position":[[169,8]]},"660":{"position":[[1254,12]]}}}],["instal",{"_index":173,"t":{"20":{"position":[[0,7],[81,7],[175,10]]},"22":{"position":[[501,7],[583,7],[680,10]]},"30":{"position":[[292,7],[399,7]]},"44":{"position":[[244,9]]},"54":{"position":[[9,7],[142,12],[445,12],[1347,12]]},"64":{"position":[[47,7],[101,7]]},"72":{"position":[[17,9]]},"82":{"position":[[4,7]]},"92":{"position":[[375,12]]},"115":{"position":[[0,7],[122,7]]},"127":{"position":[[205,7],[341,7],[606,7]]},"137":{"position":[[214,12]]},"147":{"position":[[396,12]]}}}],["instanc",{"_index":1879,"t":{"461":{"position":[[92,9]]},"483":{"position":[[1018,9]]},"637":{"position":[[342,9]]}}}],["instanceof",{"_index":533,"t":{"52":{"position":[[732,10]]}}}],["instead",{"_index":635,"t":{"62":{"position":[[1487,7]]},"125":{"position":[[230,8]]},"212":{"position":[[1452,7]]},"260":{"position":[[116,7]]},"268":{"position":[[283,7]]},"314":{"position":[[453,8]]},"326":{"position":[[89,7]]},"450":{"position":[[116,8],[180,8],[285,8]]},"452":{"position":[[51,8]]},"454":{"position":[[137,8],[325,7]]},"642":{"position":[[283,8]]},"648":{"position":[[240,8]]}}}],["institut",{"_index":2370,"t":{"577":{"position":[[1275,11]]},"654":{"position":[[50,9]]}}}],["instruct",{"_index":553,"t":{"54":{"position":[[1331,12],[2436,13]]},"72":{"position":[[64,12]]},"258":{"position":[[122,12],[323,12]]},"300":{"position":[[856,8]]},"354":{"position":[[1771,12]]},"362":{"position":[[59,12]]}}}],["instrument",{"_index":2200,"t":{"551":{"position":[[154,10]]}}}],["integ",{"_index":1306,"t":{"234":{"position":[[382,7],[492,7]]},"618":{"position":[[264,8]]}}}],["integr",{"_index":167,"t":{"18":{"position":[[306,9]]},"24":{"position":[[815,9]]},"28":{"position":[[210,9]]},"30":{"position":[[326,11]]},"40":{"position":[[1404,10]]},"54":{"position":[[1161,9],[1669,9]]},"115":{"position":[[34,11]]},"121":{"position":[[141,9]]},"332":{"position":[[66,9]]},"336":{"position":[[825,12]]},"420":{"position":[[44,9]]},"430":{"position":[[242,10]]},"434":{"position":[[192,10]]},"608":{"position":[[418,10]]},"656":{"position":[[164,9]]},"660":{"position":[[329,9]]},"666":{"position":[[53,9],[314,11]]}}}],["intellectu",{"_index":2275,"t":{"561":{"position":[[294,12]]}}}],["intend",{"_index":2008,"t":{"497":{"position":[[5,7]]},"525":{"position":[[53,8]]},"561":{"position":[[1042,8]]}}}],["intention",{"_index":1659,"t":{"330":{"position":[[104,13]]}}}],["inter",{"_index":2251,"t":{"553":{"position":[[1471,5]]}}}],["interact",{"_index":115,"t":{"12":{"position":[[56,13]]},"56":{"position":[[478,8],[523,8]]},"84":{"position":[[62,8]]},"139":{"position":[[62,8]]},"165":{"position":[[62,8]]},"184":{"position":[[180,8]]},"186":{"position":[[89,8]]},"200":{"position":[[53,11]]},"246":{"position":[[413,11]]},"254":{"position":[[8,8]]},"260":{"position":[[747,12]]},"284":{"position":[[848,12]]},"308":{"position":[[29,8]]},"344":{"position":[[95,11]]},"352":{"position":[[35,11]]},"360":{"position":[[182,8]]},"398":{"position":[[94,11]]},"475":{"position":[[179,12]]},"531":{"position":[[218,8]]},"582":{"position":[[635,12]]},"584":{"position":[[528,12]]},"602":{"position":[[335,11]]},"604":{"position":[[152,12],[291,12]]},"660":{"position":[[346,12],[520,12]]},"668":{"position":[[87,8]]}}}],["interconnect",{"_index":2687,"t":{"648":{"position":[[372,14]]}}}],["interest",{"_index":1379,"t":{"258":{"position":[[243,10]]},"268":{"position":[[120,10]]},"408":{"position":[[155,9]]},"410":{"position":[[74,8],[112,10]]},"529":{"position":[[684,8]]},"547":{"position":[[531,10]]}}}],["interfac",{"_index":329,"t":{"34":{"position":[[19,9],[1157,11],[1987,9]]},"38":{"position":[[171,10]]},"56":{"position":[[577,9]]},"668":{"position":[[44,9]]}}}],["intern",{"_index":2317,"t":{"565":{"position":[[87,13]]},"577":{"position":[[1325,13],[1972,13]]}}}],["internal/priv",{"_index":1834,"t":{"438":{"position":[[178,16]]}}}],["internet",{"_index":1803,"t":{"388":{"position":[[97,8],[135,8]]},"519":{"position":[[541,8]]},"616":{"position":[[114,8]]}}}],["interoper",{"_index":193,"t":{"22":{"position":[[190,17]]},"54":{"position":[[314,17]]},"596":{"position":[[25,16]]}}}],["interpret",{"_index":2392,"t":{"579":{"position":[[423,14]]}}}],["interv",{"_index":1248,"t":{"216":{"position":[[99,8],[122,8]]},"302":{"position":[[171,9],[181,8]]}}}],["interval=300",{"_index":1561,"t":{"302":{"position":[[523,12]]}}}],["introduc",{"_index":1737,"t":{"348":{"position":[[275,10]]},"463":{"position":[[12,10],[391,10]]},"521":{"position":[[151,11],[481,11]]}}}],["introduct",{"_index":2073,"t":{"523":{"position":[[136,12]]}}}],["invalid",{"_index":137,"t":{"14":{"position":[[81,7],[188,10]]},"463":{"position":[[243,8]]},"579":{"position":[[537,7]]}}}],["invest",{"_index":2631,"t":{"635":{"position":[[3175,8]]}}}],["investig",{"_index":139,"t":{"14":{"position":[[230,11]]},"610":{"position":[[462,14],[610,14],[696,11],[802,14]]}}}],["invoc",{"_index":969,"t":{"131":{"position":[[54,10]]}}}],["involv",{"_index":1491,"t":{"286":{"position":[[593,8]]},"320":{"position":[[478,8]]},"354":{"position":[[236,8]]},"457":{"position":[[766,8]]},"479":{"position":[[1045,9]]},"503":{"position":[[113,8]]},"549":{"position":[[786,8]]},"598":{"position":[[87,8]]}}}],["io4qdxtotg86ppck2kvmevcxc2advzwrxxsvnzeaoa0jhshbm5qed69rqz1s1mweeqj3aoklo_7eu9iibcpmveklcqbgmlkgny0ixnly3ayntzrmaeddbhk1gx6y_zv5dvw5qb3dtsommvhtzo1wsorrf2lol2ddwrwgimohxdha3uyaw",{"_index":1348,"t":{"244":{"position":[[218,177],[441,177]]},"280":{"position":[[618,177]]}}}],["ip",{"_index":617,"t":{"62":{"position":[[394,4],[1173,2]]},"78":{"position":[[567,3],[632,3]]},"210":{"position":[[161,3]]},"226":{"position":[[226,3]]},"228":{"position":[[365,2],[389,2],[439,2],[481,2],[530,2]]},"268":{"position":[[99,2]]},"276":{"position":[[352,4]]},"278":{"position":[[443,3],[669,3],[906,3]]},"282":{"position":[[526,4]]},"290":{"position":[[243,3]]},"292":{"position":[[513,2]]},"298":{"position":[[778,2]]},"314":{"position":[[103,2]]},"320":{"position":[[259,3]]},"529":{"position":[[534,2],[605,2],[712,2],[818,2]]}}}],["ip4/0.0.0.0/tcp/60000/p2p/16uiu2hamqcsh9v81xoqtwgut3qwkzwbwy1tttqwpr3djhu2tswmn",{"_index":1338,"t":{"238":{"position":[[391,80]]}}}],["ip4/0.0.0.0/tcp/60000/p2p/16uiu2hamubpqufqqje3jiqob5yoiubbya59nb4qqezeitnghea6w",{"_index":1367,"t":{"254":{"position":[[269,82]]}}}],["ip4/0.0.0.0/tcp/60002/ws/p2p/16uiu2hakzjwwgeaxfegnmkfpspc6vgbrqcdtlg5q3gmk2v4pqw7h",{"_index":623,"t":{"62":{"position":[[528,86],[931,86]]},"66":{"position":[[307,86]]}}}],["ip4/0.0.0.0/tcp/60003/ws/p2p/16uiu2hamfba7lgtwy5wvvikdmxvo3cklqkmvvtudu63fe8safeqj",{"_index":624,"t":{"62":{"position":[[615,86],[1018,86]]},"66":{"position":[[394,86]]}}}],["ip4/0.0.0.0/tcp/8000/ws/p2p/16uiu2hamqcsh9v81xoqtwgut3qwkzwbwy1tttqwpr3djhu2tswmn",{"_index":1339,"t":{"238":{"position":[[502,82]]}}}],["ip4/1.2.3.4/tcp/1234/p2p/16uiu2ham",{"_index":457,"t":{"40":{"position":[[1059,40]]},"167":{"position":[[495,40]]}}}],["ipf",{"_index":572,"t":{"54":{"position":[[2640,4]]},"354":{"position":[[970,5],[1036,4]]},"465":{"position":[[81,5]]}}}],["ipt",{"_index":2194,"t":{"549":{"position":[[2005,3]]}}}],["ipv4",{"_index":1204,"t":{"210":{"position":[[294,4]]},"298":{"position":[[18,4],[67,4]]}}}],["irrecover",{"_index":778,"t":{"96":{"position":[[651,13]]}}}],["ish",{"_index":2672,"t":{"642":{"position":[[29,4],[92,4]]}}}],["isload",{"_index":320,"t":{"32":{"position":[[791,9],[918,11]]},"34":{"position":[[641,9]]}}}],["isn't",{"_index":555,"t":{"54":{"position":[[1737,5]]}}}],["issu",{"_index":20,"t":{"4":{"position":[[15,6]]},"10":{"position":[[673,6],[909,6]]},"16":{"position":[[322,5],[397,6]]},"26":{"position":[[243,5]]},"52":{"position":[[1097,7]]},"54":{"position":[[2103,6]]},"78":{"position":[[1194,6]]},"88":{"position":[[561,6]]},"200":{"position":[[902,6]]},"256":{"position":[[241,6]]},"483":{"position":[[549,7]]},"493":{"position":[[29,6]]},"547":{"position":[[824,5]]},"606":{"position":[[485,6],[621,7]]},"610":{"position":[[480,7],[880,6],[912,5]]},"614":{"position":[[11,5]]},"616":{"position":[[1034,5],[1307,6],[1495,5]]},"637":{"position":[[37,6]]},"640":{"position":[[137,5]]},"664":{"position":[[264,6]]}}}],["it'",{"_index":64,"t":{"10":{"position":[[176,4]]},"54":{"position":[[2510,4]]},"139":{"position":[[723,4]]},"248":{"position":[[190,4]]},"469":{"position":[[875,4]]},"545":{"position":[[230,4]]},"553":{"position":[[740,4],[2255,4]]},"620":{"position":[[802,4]]},"650":{"position":[[461,4]]}}}],["item",{"_index":416,"t":{"34":{"position":[[2313,6]]},"612":{"position":[[262,5]]}}}],["itself",{"_index":1021,"t":{"161":{"position":[[458,7]]},"300":{"position":[[1559,7]]},"473":{"position":[[156,6]]},"553":{"position":[[1526,7]]},"631":{"position":[[1359,6]]},"646":{"position":[[273,6]]},"652":{"position":[[255,7]]}}}],["iu4qbkyj8ovxwz4fialxz_1a8docu2wc",{"_index":1344,"t":{"242":{"position":[[212,32],[445,32]]}}}],["iu4qcqzxzdb_jsymloyor0f5e_95hbiywgo_wgx2riddbmcjzktzmlcr0wmmzv47lgik_tvwww5ming90ris83tismbgmlkgny0gmlwhaaaaacjc2vjcdi1nmsxoqpszztg",{"_index":1369,"t":{"254":{"position":[[371,131]]}}}],["javascript",{"_index":50,"t":{"8":{"position":[[161,10]]},"18":{"position":[[23,10],[151,10]]},"28":{"position":[[23,10]]},"54":{"position":[[70,10],[1453,10],[1722,10]]},"56":{"position":[[594,10]]},"666":{"position":[[227,10]]}}}],["javascript/typescript",{"_index":2727,"t":{"666":{"position":[[167,21]]}}}],["jitter",{"_index":1257,"t":{"216":{"position":[[239,6],[318,6]]},"302":{"position":[[344,7],[413,7]]}}}],["jitter=20",{"_index":1563,"t":{"302":{"position":[[583,9]]}}}],["jmeter",{"_index":2609,"t":{"633":{"position":[[416,7],[584,6],[787,6]]}}}],["join",{"_index":1363,"t":{"252":{"position":[[3,4]]},"296":{"position":[[3,4]]}}}],["jq",{"_index":934,"t":{"127":{"position":[[240,2]]}}}],["js",{"_index":278,"t":{"26":{"position":[[112,3],[256,2]]},"46":{"position":[[266,2],[425,2]]},"151":{"position":[[1414,2]]},"182":{"position":[[878,2]]},"260":{"position":[[796,2]]},"340":{"position":[[387,3],[421,3]]}}}],["json",{"_index":211,"t":{"22":{"position":[[447,4]]},"54":{"position":[[425,5]]},"206":{"position":[[278,4]]}}}],["judg",{"_index":2357,"t":{"577":{"position":[[506,6]]}}}],["jump",{"_index":2186,"t":{"549":{"position":[[1342,4]]}}}],["juri",{"_index":2359,"t":{"577":{"position":[[615,4]]}}}],["jurisdict",{"_index":2285,"t":{"561":{"position":[[826,13]]},"577":{"position":[[650,14]]}}}],["k",{"_index":135,"t":{"14":{"position":[[50,1],[128,1]]},"270":{"position":[[17,1]]},"272":{"position":[[584,1],[595,1],[771,1],[829,1]]},"483":{"position":[[346,1],[404,1]]}}}],["kademlia'",{"_index":1287,"t":{"228":{"position":[[587,10]]}}}],["kb",{"_index":2589,"t":{"631":{"position":[[293,3]]}}}],["kb/",{"_index":2399,"t":{"582":{"position":[[141,4],[446,4],[480,4]]},"584":{"position":[[34,4],[339,4],[373,4]]},"587":{"position":[[176,6],[217,6]]},"591":{"position":[[274,6],[315,6]]}}}],["keen",{"_index":2444,"t":{"602":{"position":[[94,4]]},"610":{"position":[[361,4]]},"612":{"position":[[55,4],[180,4]]}}}],["keep",{"_index":548,"t":{"54":{"position":[[866,7]]},"98":{"position":[[177,4]]},"119":{"position":[[279,4]]},"131":{"position":[[136,4]]},"212":{"position":[[1257,4],[1281,4]]},"260":{"position":[[1088,4],[1271,4]]},"266":{"position":[[113,4]]},"483":{"position":[[98,5]]},"616":{"position":[[411,4]]},"635":{"position":[[1708,5]]},"640":{"position":[[888,4]]}}}],["kept",{"_index":2377,"t":{"577":{"position":[[1742,4]]}}}],["key",{"_index":43,"t":{"8":{"position":[[89,4],[172,3]]},"117":{"position":[[43,3],[157,4],[258,3],[641,3],[1265,3],[1357,3]]},"119":{"position":[[31,3],[64,3],[157,4],[274,4],[353,3],[374,4],[521,3],[792,3],[996,3],[1440,3]]},"121":{"position":[[313,3],[536,4],[855,3],[935,4],[1292,3],[1360,3],[1587,3],[1655,3],[2045,3],[2134,3],[2388,3],[2815,3],[2896,3],[3078,3]]},"123":{"position":[[27,4],[140,4],[187,3],[269,3],[364,4],[554,4],[658,4],[796,4]]},"161":{"position":[[136,3]]},"194":{"position":[[34,3]]},"204":{"position":[[182,4]]},"208":{"position":[[232,3]]},"212":{"position":[[477,3],[507,3],[551,3],[585,3],[837,3],[849,3]]},"232":{"position":[[213,3],[239,3]]},"268":{"position":[[379,5],[456,3]]},"272":{"position":[[244,4]]},"278":{"position":[[284,5],[346,3]]},"304":{"position":[[26,3],[144,3],[215,4],[258,3],[495,3],[546,3],[629,3],[728,3],[829,3],[846,3],[1015,3]]},"306":{"position":[[461,3],[488,3],[707,3],[734,3],[1058,3],[1197,3]]},"392":{"position":[[7,3],[55,3]]},"404":{"position":[[121,4]]},"434":{"position":[[104,3]]},"495":{"position":[[118,3]]},"582":{"position":[[21,3]]},"637":{"position":[[624,3],[687,3]]}}}],["key={index",{"_index":372,"t":{"34":{"position":[[1263,11]]}}}],["key]@[domain",{"_index":645,"t":{"64":{"position":[[442,12]]},"278":{"position":[[603,12]]}}}],["keystore/keystore.json",{"_index":1120,"t":{"194":{"position":[[314,22]]}}}],["kind",{"_index":1160,"t":{"206":{"position":[[211,4]]},"561":{"position":[[146,5]]}}}],["kit",{"_index":2729,"t":{"668":{"position":[[172,3]]}}}],["know",{"_index":730,"t":{"88":{"position":[[50,4]]},"96":{"position":[[379,4]]},"139":{"position":[[570,4]]}}}],["knowledg",{"_index":1765,"t":{"354":{"position":[[1280,9]]},"412":{"position":[[58,9]]},"473":{"position":[[427,9]]},"475":{"position":[[134,10]]}}}],["known",{"_index":1468,"t":{"284":{"position":[[222,5]]},"473":{"position":[[732,5]]},"577":{"position":[[2160,5]]},"620":{"position":[[2080,5]]}}}],["l",{"_index":967,"t":{"129":{"position":[[197,1]]}}}],["laid",{"_index":2131,"t":{"537":{"position":[[240,4]]}}}],["languag",{"_index":2378,"t":{"577":{"position":[[1765,8]]},"666":{"position":[[78,9]]}}}],["laptop",{"_index":2478,"t":{"616":{"position":[[88,6]]},"620":{"position":[[600,7]]}}}],["larg",{"_index":1705,"t":{"342":{"position":[[123,5]]},"354":{"position":[[1052,6],[1173,5]]},"594":{"position":[[132,5]]}}}],["larger",{"_index":1517,"t":{"290":{"position":[[567,6]]}}}],["last",{"_index":1082,"t":{"182":{"position":[[710,4]]},"234":{"position":[[690,4]]},"300":{"position":[[1246,4]]},"525":{"position":[[0,4]]},"557":{"position":[[0,4]]}}}],["lastmessag",{"_index":1059,"t":{"180":{"position":[[628,11]]}}}],["late",{"_index":1916,"t":{"469":{"position":[[122,4]]}}}],["latenc",{"_index":1513,"t":{"290":{"position":[[411,8]]},"320":{"position":[[186,8]]},"503":{"position":[[279,8]]},"549":{"position":[[1376,7]]},"551":{"position":[[453,7]]},"553":{"position":[[1482,7]]},"555":{"position":[[392,7]]},"589":{"position":[[24,7],[111,7],[697,7],[733,7]]},"646":{"position":[[569,7]]}}}],["latency=100m",{"_index":2206,"t":{"551":{"position":[[430,14]]}}}],["later",{"_index":1749,"t":{"352":{"position":[[929,5]]},"487":{"position":[[292,6]]},"511":{"position":[[121,6]]}}}],["latest",{"_index":275,"t":{"26":{"position":[[76,6]]},"44":{"position":[[354,6]]},"125":{"position":[[92,6]]},"248":{"position":[[606,6]]},"596":{"position":[[80,6]]},"650":{"position":[[140,6]]}}}],["latitud",{"_index":2586,"t":{"631":{"position":[[241,8]]}}}],["launch",{"_index":1124,"t":{"196":{"position":[[0,6]]}}}],["law",{"_index":2282,"t":{"561":{"position":[[708,4],[976,5]]},"569":{"position":[[639,4]]},"575":{"position":[[6,3],[145,4]]},"577":{"position":[[66,3]]}}}],["lawsuit",{"_index":2385,"t":{"577":{"position":[[2241,7]]}}}],["layer",{"_index":1641,"t":{"324":{"position":[[16,6]]},"326":{"position":[[46,7]]},"362":{"position":[[248,5]]},"660":{"position":[[741,5],[824,5],[908,5]]}}}],["lead",{"_index":1565,"t":{"304":{"position":[[50,7]]},"326":{"position":[[283,7]]},"483":{"position":[[722,5]]}}}],["leaf",{"_index":1526,"t":{"292":{"position":[[402,4]]}}}],["leak",{"_index":1769,"t":{"354":{"position":[[1551,4]]}}}],["learn",{"_index":223,"t":{"24":{"position":[[68,5],[183,5],[360,5],[495,5],[629,5],[763,5],[898,5],[1051,5],[1180,5],[1304,5],[1436,5]]},"40":{"position":[[1594,5]]},"54":{"position":[[494,5],[628,5]]},"56":{"position":[[80,5]]},"78":{"position":[[1457,5]]},"80":{"position":[[0,5]]},"84":{"position":[[413,5]]},"133":{"position":[[182,5]]},"135":{"position":[[174,5]]},"139":{"position":[[515,5]]},"186":{"position":[[51,5]]},"200":{"position":[[1199,5]]},"244":{"position":[[779,5]]},"250":{"position":[[178,5]]},"256":{"position":[[519,5]]},"262":{"position":[[308,5]]},"286":{"position":[[443,5]]},"292":{"position":[[537,8]]},"354":{"position":[[121,5]]},"356":{"position":[[533,5]]},"656":{"position":[[286,5]]}}}],["leav",{"_index":2564,"t":{"620":{"position":[[2514,7]]},"648":{"position":[[658,7]]}}}],["led",{"_index":2218,"t":{"551":{"position":[[834,3]]}}}],["legal",{"_index":2101,"t":{"527":{"position":[[212,5]]},"529":{"position":[[184,5]]},"559":{"position":[[152,5]]},"561":{"position":[[431,9],[785,7],[1565,6]]},"569":{"position":[[93,5]]}}}],["legal@free.technolog",{"_index":2152,"t":{"543":{"position":[[89,22]]},"579":{"position":[[902,22]]}}}],["legisl",{"_index":2111,"t":{"529":{"position":[[230,12]]},"535":{"position":[[713,12]]},"537":{"position":[[269,12]]}}}],["legitim",{"_index":2114,"t":{"529":{"position":[[673,10]]}}}],["leobago",{"_index":2499,"t":{"618":{"position":[[175,8]]}}}],["less",{"_index":1290,"t":{"228":{"position":[[623,4]]},"360":{"position":[[263,5]]},"549":{"position":[[237,4],[248,4]]},"620":{"position":[[437,5],[1085,4],[1803,4]]}}}],["let",{"_index":1014,"t":{"159":{"position":[[232,4]]}}}],["let'",{"_index":328,"t":{"34":{"position":[[0,5]]},"306":{"position":[[1303,5]]},"519":{"position":[[14,5]]},"549":{"position":[[0,5]]}}}],["level",{"_index":1009,"t":{"159":{"position":[[99,5]]},"206":{"position":[[35,5],[76,5],[105,7]]},"236":{"position":[[113,6]]},"262":{"position":[[98,5]]},"368":{"position":[[68,5]]},"535":{"position":[[297,5]]},"549":{"position":[[64,6]]},"582":{"position":[[743,6]]},"584":{"position":[[636,6]]},"635":{"position":[[1723,5]]}}}],["leverag",{"_index":1801,"t":{"384":{"position":[[57,9]]},"390":{"position":[[64,9]]},"602":{"position":[[137,8]]}}}],["liabil",{"_index":2149,"t":{"539":{"position":[[179,9]]},"569":{"position":[[73,10],[484,9],[572,9]]}}}],["liabl",{"_index":2325,"t":{"567":{"position":[[498,6]]},"569":{"position":[[20,6]]}}}],["lib",{"_index":949,"t":{"127":{"position":[[533,4]]}}}],["libp2p",{"_index":23,"t":{"4":{"position":[[86,6]]},"6":{"position":[[195,7]]},"8":{"position":[[277,6]]},"62":{"position":[[1285,7]]},"64":{"position":[[632,7],[938,7]]},"66":{"position":[[670,7]]},"113":{"position":[[185,6]]},"161":{"position":[[172,6]]},"208":{"position":[[318,6],[753,6]]},"282":{"position":[[890,6]]},"288":{"position":[[655,6]]},"318":{"position":[[117,6]]},"326":{"position":[[60,6]]},"354":{"position":[[298,6]]},"382":{"position":[[0,6]]},"495":{"position":[[30,7]]},"501":{"position":[[0,6]]},"505":{"position":[[126,6]]},"587":{"position":[[21,6],[150,6],[191,6]]},"631":{"position":[[723,8]]}}}],["libp2p'",{"_index":2009,"t":{"497":{"position":[[75,8]]}}}],["libp2p.getp",{"_index":656,"t":{"68":{"position":[[66,17]]}}}],["libp2p/bootstrap",{"_index":655,"t":{"66":{"position":[[157,20]]}}}],["libpq",{"_index":943,"t":{"127":{"position":[[372,5]]}}}],["libpq.5.dylib",{"_index":956,"t":{"127":{"position":[[678,13]]}}}],["libpq5",{"_index":933,"t":{"127":{"position":[[233,6]]}}}],["libpqisbusi",{"_index":2638,"t":{"635":{"position":[[3639,13]]}}}],["librari",{"_index":722,"t":{"86":{"position":[[450,10]]},"127":{"position":[[130,8]]},"420":{"position":[[16,10]]},"606":{"position":[[47,9]]},"610":{"position":[[392,8]]}}}],["licenc",{"_index":2319,"t":{"565":{"position":[[138,7],[342,8]]}}}],["licens",{"_index":2153,"t":{"543":{"position":[[129,8]]},"565":{"position":[[101,7]]},"579":{"position":[[942,8]]}}}],["light",{"_index":232,"t":{"24":{"position":[[338,5],[402,5],[424,5],[551,5]]},"32":{"position":[[297,5],[437,5],[604,5],[759,5],[841,5]]},"34":{"position":[[609,5],[1078,5]]},"36":{"position":[[387,5]]},"48":{"position":[[169,5],[211,5]]},"84":{"position":[[47,5],[151,5]]},"117":{"position":[[699,5]]},"119":{"position":[[850,5]]},"121":{"position":[[1750,5]]},"137":{"position":[[88,5],[126,5]]},"139":{"position":[[47,5],[161,5]]},"145":{"position":[[191,7]]},"149":{"position":[[49,5],[413,5]]},"151":{"position":[[1356,5],[1408,5],[1421,5]]},"163":{"position":[[47,5]]},"165":{"position":[[47,5],[161,5]]},"182":{"position":[[816,5]]},"252":{"position":[[527,5]]},"268":{"position":[[23,5]]},"284":{"position":[[800,5]]},"310":{"position":[[25,5]]},"312":{"position":[[25,5],[51,5],[163,5]]},"316":{"position":[[165,5]]},"334":{"position":[[522,5]]},"350":{"position":[[289,5]]},"378":{"position":[[34,5]]},"384":{"position":[[2,5]]},"386":{"position":[[0,5],[34,5]]},"402":{"position":[[57,5]]},"442":{"position":[[56,5]]},"467":{"position":[[245,5],[292,5],[455,5],[526,5],[615,5],[677,5],[717,5]]},"471":{"position":[[16,5]]},"479":{"position":[[934,5]]},"493":{"position":[[459,5]]},"509":{"position":[[23,5]]},"513":{"position":[[0,5],[321,5]]},"620":{"position":[[723,5],[1573,5],[1689,5]]},"640":{"position":[[549,5]]}}}],["lightn",{"_index":1956,"t":{"479":{"position":[[674,10]]}}}],["lightnodeprovid",{"_index":304,"t":{"32":{"position":[[90,17],[246,17],[484,18],[535,20]]}}}],["lightpush",{"_index":648,"t":{"64":{"position":[[529,10]]},"66":{"position":[[550,10]]},"208":{"position":[[1054,10]]},"220":{"position":[[145,9],[172,9],[253,9]]},"234":{"position":[[1139,9]]},"312":{"position":[[81,9],[245,9],[400,9]]},"467":{"position":[[281,10],[990,10]]},"493":{"position":[[475,10]]},"589":{"position":[[452,9]]}}}],["lightpush.send",{"_index":989,"t":{"149":{"position":[[110,16]]}}}],["lightpush=tru",{"_index":1616,"t":{"312":{"position":[[119,14]]}}}],["lightpushnod",{"_index":1268,"t":{"220":{"position":[[209,13]]},"312":{"position":[[191,13]]}}}],["lightpushnode=/dns4/nod",{"_index":1618,"t":{"312":{"position":[[464,24]]}}}],["lightpushnode=[light",{"_index":1617,"t":{"312":{"position":[[309,20]]}}}],["lightpush|filter|px|store|storev2|storev3",{"_index":1304,"t":{"234":{"position":[[321,41]]}}}],["lightweight",{"_index":1349,"t":{"246":{"position":[[11,11]]},"264":{"position":[[924,11]]},"378":{"position":[[158,11]]},"509":{"position":[[149,11]]}}}],["like",{"_index":2716,"t":{"660":{"position":[[364,5]]}}}],["limit",{"_index":69,"t":{"10":{"position":[[228,11]]},"54":{"position":[[1784,12]]},"80":{"position":[[182,12]]},"98":{"position":[[143,11]]},"109":{"position":[[72,12]]},"194":{"position":[[186,7],[248,6]]},"228":{"position":[[392,5],[484,5]]},"234":{"position":[[36,5],[105,5],[683,6],[898,5],[1175,8]]},"290":{"position":[[720,7]]},"316":{"position":[[87,7]]},"320":{"position":[[293,7]]},"324":{"position":[[314,12]]},"330":{"position":[[418,5]]},"340":{"position":[[90,5],[149,7]]},"350":{"position":[[73,7],[347,7]]},"354":{"position":[[1219,8],[1251,8]]},"356":{"position":[[281,8]]},"384":{"position":[[27,7]]},"412":{"position":[[5,5],[93,8]]},"416":{"position":[[9,7]]},"418":{"position":[[63,5],[135,5]]},"426":{"position":[[130,7]]},"432":{"position":[[137,7]]},"489":{"position":[[110,5]]},"499":{"position":[[259,7]]},"507":{"position":[[60,5],[153,5]]},"509":{"position":[[245,7]]},"513":{"position":[[57,7]]},"517":{"position":[[115,8]]},"519":{"position":[[586,7],[2006,5]]},"521":{"position":[[80,8],[185,5],[243,5],[514,5]]},"523":{"position":[[82,5],[272,8],[457,6],[554,5],[907,6]]},"529":{"position":[[10,5]]},"531":{"position":[[19,7]]},"537":{"position":[[40,5]]},"545":{"position":[[125,11]]},"555":{"position":[[424,8]]},"561":{"position":[[190,10]]},"569":{"position":[[513,7],[558,10]]},"571":{"position":[[228,10]]},"577":{"position":[[570,8],[2039,12]]},"579":{"position":[[402,6]]},"608":{"position":[[533,11]]},"614":{"position":[[277,5]]},"616":{"position":[[917,8],[994,7],[1396,5]]},"620":{"position":[[2435,7],[2774,5]]},"623":{"position":[[83,5]]},"631":{"position":[[676,11]]},"648":{"position":[[519,7]]}}}],["limit=\"100/1",{"_index":1315,"t":{"234":{"position":[[1042,14]]}}}],["limit=\"filter:8/5m",{"_index":1325,"t":{"234":{"position":[[1380,19]]}}}],["limit=\"lightpush:0/0",{"_index":1317,"t":{"234":{"position":[[1114,22]]}}}],["limit=\"px:10/1h",{"_index":1323,"t":{"234":{"position":[[1303,16]]}}}],["limit=\"store:130/1500m",{"_index":1318,"t":{"234":{"position":[[1191,24]]}}}],["line",{"_index":590,"t":{"56":{"position":[[859,4]]},"133":{"position":[[141,4]]},"153":{"position":[[83,4],[314,4]]},"155":{"position":[[51,4],[272,4]]},"157":{"position":[[510,4]]},"159":{"position":[[699,4]]},"204":{"position":[[85,4]]},"620":{"position":[[832,5]]}}}],["link",{"_index":955,"t":{"127":{"position":[[670,4]]},"268":{"position":[[94,4]]},"326":{"position":[[275,7]]},"328":{"position":[[110,7],[364,6],[502,6]]},"334":{"position":[[407,4],[501,4]]},"469":{"position":[[351,6]]},"539":{"position":[[37,5]]},"553":{"position":[[827,5]]},"561":{"position":[[613,6]]},"567":{"position":[[39,5],[182,7]]},"582":{"position":[[68,5]]}}}],["linkabl",{"_index":1676,"t":{"334":{"position":[[284,8]]}}}],["linux",{"_index":916,"t":{"125":{"position":[[319,5]]},"127":{"position":[[169,5]]},"304":{"position":[[287,6],[462,6]]}}}],["list",{"_index":443,"t":{"38":{"position":[[394,4]]},"62":{"position":[[23,4],[478,4],[881,4]]},"64":{"position":[[213,4],[239,4],[402,4]]},"66":{"position":[[257,4]]},"78":{"position":[[203,4]]},"173":{"position":[[220,4]]},"175":{"position":[[191,4]]},"226":{"position":[[119,4]]},"278":{"position":[[190,4],[366,4],[884,5]]},"290":{"position":[[462,4],[574,4],[745,6],[880,8]]},"320":{"position":[[416,4]]},"473":{"position":[[1096,4]]},"668":{"position":[[374,4]]}}}],["listen",{"_index":604,"t":{"56":{"position":[[1652,9]]},"78":{"position":[[1127,10]]},"86":{"position":[[619,6]]},"94":{"position":[[80,9]]},"96":{"position":[[358,9]]},"145":{"position":[[1195,6]]},"161":{"position":[[152,6]]},"208":{"position":[[258,6],[296,9],[383,9]]},"222":{"position":[[106,9],[163,9]]},"224":{"position":[[123,9],[188,9]]},"228":{"position":[[122,9]]},"232":{"position":[[114,9]]},"236":{"position":[[63,9]]},"238":{"position":[[40,9],[118,9],[359,9],[474,9]]},"244":{"position":[[668,9]]},"254":{"position":[[611,9]]},"306":{"position":[[286,9],[636,9]]},"308":{"position":[[229,9],[348,9],[793,9],[839,9]]},"336":{"position":[[485,9]]},"392":{"position":[[86,9]]}}}],["listenaddress",{"_index":1366,"t":{"254":{"position":[[248,18],[571,15]]}}}],["litig",{"_index":2353,"t":{"577":{"position":[[277,10],[474,10]]}}}],["live",{"_index":1959,"t":{"479":{"position":[[832,5]]},"491":{"position":[[162,4]]},"551":{"position":[[541,4]]},"612":{"position":[[32,5]]}}}],["ln",{"_index":959,"t":{"127":{"position":[[746,2]]}}}],["load",{"_index":1126,"t":{"196":{"position":[[144,6]]},"204":{"position":[[43,5]]},"286":{"position":[[268,4]]},"316":{"position":[[536,4]]},"372":{"position":[[129,4]]},"660":{"position":[[991,5]]}}}],["local",{"_index":40,"t":{"8":{"position":[[57,5]]},"10":{"position":[[499,8]]},"62":{"position":[[383,5],[1432,5],[1579,8],[1635,7]]},"76":{"position":[[36,8]]},"78":{"position":[[181,7]]},"123":{"position":[[290,5]]},"276":{"position":[[341,5]]},"282":{"position":[[515,5]]},"306":{"position":[[887,5]]},"457":{"position":[[636,5]]},"485":{"position":[[47,5]]},"561":{"position":[[970,5]]},"631":{"position":[[223,7]]},"635":{"position":[[735,8]]},"650":{"position":[[214,7]]}}}],["localhost",{"_index":83,"t":{"10":{"position":[[516,9]]},"222":{"position":[[629,12]]}}}],["locat",{"_index":608,"t":{"56":{"position":[[1798,6]]},"60":{"position":[[90,6]]},"200":{"position":[[101,8],[175,8],[350,8],[716,8]]},"254":{"position":[[161,8]]},"256":{"position":[[132,8]]},"278":{"position":[[379,9]]},"284":{"position":[[171,6]]},"346":{"position":[[35,8]]},"366":{"position":[[136,6]]},"400":{"position":[[30,7]]},"616":{"position":[[1560,9]]}}}],["lock",{"_index":1902,"t":{"463":{"position":[[448,4]]}}}],["log",{"_index":7,"t":{"2":{"position":[[59,4]]},"4":{"position":[[47,4],[140,4]]},"6":{"position":[[16,4],[112,4],[167,4],[246,4]]},"8":{"position":[[14,4],[230,4],[290,4],[321,4]]},"12":{"position":[[435,3]]},"24":{"position":[[1357,4]]},"54":{"position":[[2044,4]]},"56":{"position":[[634,4],[693,4],[742,4],[1712,4]]},"159":{"position":[[95,3],[179,7]]},"196":{"position":[[208,4],[281,4]]},"206":{"position":[[31,3],[72,3],[162,3],[219,4]]},"224":{"position":[[238,7],[266,8]]},"236":{"position":[[109,3],[177,4]]},"238":{"position":[[13,3],[73,3]]},"242":{"position":[[13,3],[82,3]]},"244":{"position":[[13,3],[85,3]]}}}],["log(1000)/log(6",{"_index":2181,"t":{"549":{"position":[[1029,16]]}}}],["log(total_nodes)/log(d)=5",{"_index":2681,"t":{"646":{"position":[[492,25]]}}}],["logging.logformat.text",{"_index":1159,"t":{"206":{"position":[[173,22]]}}}],["logging.loglevel.info",{"_index":1154,"t":{"206":{"position":[[41,21]]}}}],["logic",{"_index":1807,"t":{"396":{"position":[[91,5]]}}}],["logo",{"_index":2097,"t":{"527":{"position":[[135,5],[238,5],[350,8],[417,5]]},"559":{"position":[[75,5],[179,5],[291,8],[368,5]]}}}],["long",{"_index":1532,"t":{"300":{"position":[[278,4]]},"354":{"position":[[804,4],[1059,4]]},"479":{"position":[[827,4]]},"519":{"position":[[233,4]]},"549":{"position":[[1321,4]]},"610":{"position":[[721,4]]},"658":{"position":[[297,4]]}}}],["longer",{"_index":1836,"t":{"448":{"position":[[27,6]]},"646":{"position":[[321,8]]}}}],["look",{"_index":219,"t":{"24":{"position":[[7,4]]},"40":{"position":[[1320,4],[1488,4]]},"48":{"position":[[125,4]]},"78":{"position":[[1408,4]]},"84":{"position":[[357,4]]},"92":{"position":[[354,4]]},"123":{"position":[[175,4],[1076,4]]},"133":{"position":[[221,4]]},"135":{"position":[[125,4]]},"137":{"position":[[202,4]]},"139":{"position":[[459,4]]},"147":{"position":[[375,4]]},"151":{"position":[[1396,4]]},"161":{"position":[[633,4]]},"182":{"position":[[860,4]]},"200":{"position":[[1122,4]]},"234":{"position":[[1557,4]]},"238":{"position":[[0,4]]},"242":{"position":[[0,4]]},"244":{"position":[[0,4],[733,4]]},"250":{"position":[[243,4]]},"256":{"position":[[470,4]]},"262":{"position":[[266,4]]},"286":{"position":[[407,4]]},"356":{"position":[[634,4]]},"360":{"position":[[82,4],[299,4]]},"362":{"position":[[7,4]]},"563":{"position":[[37,7],[213,7],[549,7]]},"637":{"position":[[19,4]]},"660":{"position":[[1161,7]]}}}],["lookup",{"_index":1291,"t":{"228":{"position":[[637,6]]},"292":{"position":[[4,6],[169,6],[320,6]]}}}],["lose",{"_index":2044,"t":{"519":{"position":[[746,6],[1535,6]]}}}],["loss",{"_index":2594,"t":{"631":{"position":[[661,4]]}}}],["lost",{"_index":2329,"t":{"569":{"position":[[127,4]]},"631":{"position":[[612,4],[930,4]]}}}],["lot",{"_index":1490,"t":{"286":{"position":[[569,4]]},"495":{"position":[[51,3]]}}}],["low",{"_index":1512,"t":{"290":{"position":[[407,3],[420,3]]},"316":{"position":[[386,3]]},"320":{"position":[[182,3],[195,3]]},"330":{"position":[[343,3]]},"350":{"position":[[99,3]]},"457":{"position":[[559,3]]},"521":{"position":[[344,3]]},"616":{"position":[[475,4]]},"620":{"position":[[355,3],[546,3]]}}}],["lower",{"_index":2173,"t":{"549":{"position":[[487,5]]},"553":{"position":[[678,5],[1836,6],[2129,5]]}}}],["lowest",{"_index":2563,"t":{"620":{"position":[[2240,6],[2308,6],[2450,6]]}}}],["luckili",{"_index":2684,"t":{"648":{"position":[[132,8]]}}}],["m",{"_index":1972,"t":{"483":{"position":[[297,1],[397,2]]},"547":{"position":[[210,1],[284,2]]},"549":{"position":[[1859,1]]}}}],["machin",{"_index":1131,"t":{"198":{"position":[[137,8]]},"635":{"position":[[936,7],[2008,7]]},"637":{"position":[[1066,7]]}}}],["maco",{"_index":917,"t":{"125":{"position":[[329,6]]},"127":{"position":[[175,5]]}}}],["made",{"_index":1146,"t":{"200":{"position":[[666,4]]},"561":{"position":[[1057,4]]},"565":{"position":[[33,4]]},"616":{"position":[[1261,5]]}}}],["magnitud",{"_index":2562,"t":{"620":{"position":[[2183,9],[3022,9]]}}}],["main",{"_index":1805,"t":{"394":{"position":[[98,4]]},"503":{"position":[[301,4]]},"519":{"position":[[935,4]]},"596":{"position":[[87,4]]},"616":{"position":[[912,4]]},"640":{"position":[[156,4],[579,4]]}}}],["main.jsx",{"_index":301,"t":{"32":{"position":[[7,8]]}}}],["mainli",{"_index":2199,"t":{"551":{"position":[[144,6]]},"616":{"position":[[986,7]]}}}],["maintain",{"_index":1222,"t":{"212":{"position":[[1072,8]]},"246":{"position":[[105,8]]},"304":{"position":[[86,8]]},"410":{"position":[[155,8]]},"469":{"position":[[880,10]]},"533":{"position":[[128,8]]},"600":{"position":[[142,8]]},"612":{"position":[[63,8]]},"660":{"position":[[414,8]]}}}],["mainten",{"_index":1635,"t":{"320":{"position":[[374,11]]}}}],["major",{"_index":966,"t":{"129":{"position":[[104,5]]}}}],["make",{"_index":677,"t":{"76":{"position":[[163,4]]},"127":{"position":[[83,5]]},"131":{"position":[[24,4],[49,4],[121,4],[179,4]]},"135":{"position":[[24,4]]},"192":{"position":[[242,4]]},"260":{"position":[[638,4]]},"334":{"position":[[237,6]]},"342":{"position":[[114,6],[153,5],[448,5]]},"503":{"position":[[191,4]]},"511":{"position":[[75,6]]},"521":{"position":[[399,4]]},"531":{"position":[[138,6]]},"561":{"position":[[367,4],[716,4]]},"577":{"position":[[97,4],[953,7]]},"625":{"position":[[178,5]]},"633":{"position":[[433,4]]},"637":{"position":[[1462,6],[1569,6],[1840,6]]}}}],["malici",{"_index":1713,"t":{"342":{"position":[[477,9]]}}}],["manag",{"_index":175,"t":{"20":{"position":[[59,8]]},"22":{"position":[[561,8]]},"24":{"position":[[1403,6],[1449,6]]},"30":{"position":[[377,8]]},"48":{"position":[[38,6]]},"50":{"position":[[145,6]]},"52":{"position":[[1211,7]]},"54":{"position":[[2143,6],[2353,6]]},"107":{"position":[[262,10]]},"115":{"position":[[100,8]]},"212":{"position":[[441,11]]},"370":{"position":[[68,10]]}}}],["mani",{"_index":801,"t":{"101":{"position":[[184,4]]},"330":{"position":[[89,4]]},"408":{"position":[[191,4]]},"414":{"position":[[213,4]]},"463":{"position":[[362,4]]},"505":{"position":[[350,4]]},"521":{"position":[[366,4]]}}}],["manner",{"_index":2166,"t":{"547":{"position":[[429,7]]},"577":{"position":[[388,7]]}}}],["manual",{"_index":576,"t":{"54":{"position":[[2731,8]]},"635":{"position":[[872,6],[1944,6]]}}}],["map",{"_index":706,"t":{"78":{"position":[[1060,8]]},"212":{"position":[[1577,3]]}}}],["margin",{"_index":391,"t":{"34":{"position":[[1963,7],[2212,6],[2396,6]]}}}],["market",{"_index":2301,"t":{"563":{"position":[[181,7],[620,6]]},"660":{"position":[[851,7]]}}}],["marketplac",{"_index":2713,"t":{"660":{"position":[[242,13]]}}}],["master",{"_index":964,"t":{"129":{"position":[[70,7]]}}}],["match",{"_index":93,"t":{"10":{"position":[[728,5]]},"352":{"position":[[588,5],[983,8],[1095,5]]},"467":{"position":[[885,5]]},"471":{"position":[[329,7]]}}}],["matrix",{"_index":1855,"t":{"457":{"position":[[54,7]]}}}],["matter",{"_index":2184,"t":{"549":{"position":[[1102,6]]},"561":{"position":[[1475,7]]},"563":{"position":[[437,7],[1123,7]]},"606":{"position":[[330,6]]},"644":{"position":[[51,6]]}}}],["max",{"_index":1181,"t":{"208":{"position":[[708,3],[909,3],[978,3]]},"218":{"position":[[297,3],[400,3]]},"589":{"position":[[709,3]]}}}],["maximum",{"_index":1183,"t":{"208":{"position":[[727,7],[1108,7]]},"218":{"position":[[321,7],[418,7]]},"228":{"position":[[401,7],[492,7]]},"519":{"position":[[1033,7]]},"523":{"position":[[182,7],[718,7]]},"549":{"position":[[891,7]]},"561":{"position":[[669,7]]},"569":{"position":[[600,7]]},"614":{"position":[[33,7],[109,7],[239,7]]},"616":{"position":[[1406,7],[1589,7]]},"620":{"position":[[69,7]]},"631":{"position":[[0,7],[444,7],[1461,7]]}}}],["maxmessages",{"_index":2084,"t":{"523":{"position":[[683,15]]}}}],["mayb",{"_index":741,"t":{"88":{"position":[[484,5]]}}}],["mb/gb",{"_index":1540,"t":{"300":{"position":[[543,6]]}}}],["mbp",{"_index":2049,"t":{"519":{"position":[[1220,4],[1423,5],[1696,6]]},"523":{"position":[[1059,4],[1268,4]]},"614":{"position":[[56,4],[289,4]]},"616":{"position":[[960,4],[1484,5],[1610,4]]},"618":{"position":[[93,4],[332,5],[428,4],[489,6],[503,6],[734,6],[755,6],[829,4],[844,4],[859,4]]},"620":{"position":[[1993,4],[2302,5],[2368,5],[2572,5],[2786,4]]}}}],["mean",{"_index":538,"t":{"52":{"position":[[1119,4]]},"234":{"position":[[765,5]]},"260":{"position":[[447,5]]},"328":{"position":[[10,5]]},"352":{"position":[[140,5]]},"523":{"position":[[644,7],[706,7]]},"535":{"position":[[197,5]]},"547":{"position":[[573,5]]},"557":{"position":[[362,5]]},"577":{"position":[[43,7]]},"579":{"position":[[760,4]]},"620":{"position":[[1367,7],[1484,7]]},"633":{"position":[[52,5]]},"644":{"position":[[228,5]]}}}],["meant",{"_index":2554,"t":{"620":{"position":[[1869,5]]}}}],["measur",{"_index":1673,"t":{"332":{"position":[[149,8]]},"491":{"position":[[105,7]]},"529":{"position":[[788,8]]},"533":{"position":[[101,8]]},"547":{"position":[[716,8]]},"549":{"position":[[1406,8]]},"551":{"position":[[182,7],[514,13]]},"589":{"position":[[35,8]]},"591":{"position":[[112,12]]},"633":{"position":[[769,8]]}}}],["mechan",{"_index":597,"t":{"56":{"position":[[1314,10]]},"58":{"position":[[198,10]]},"107":{"position":[[416,10]]},"252":{"position":[[136,11],[363,9],[452,9]]},"274":{"position":[[184,10]]},"284":{"position":[[146,9],[961,11]]},"286":{"position":[[55,9]]},"296":{"position":[[136,11]]},"330":{"position":[[226,9]]},"346":{"position":[[135,11],[187,10]]},"348":{"position":[[313,9]]},"372":{"position":[[27,9]]},"374":{"position":[[34,9]]},"402":{"position":[[34,9]]},"424":{"position":[[25,9]]},"434":{"position":[[117,10]]},"465":{"position":[[185,11]]},"473":{"position":[[1170,10]]},"479":{"position":[[1084,10]]},"483":{"position":[[975,9]]},"497":{"position":[[28,10]]},"521":{"position":[[89,10]]},"640":{"position":[[53,9]]},"660":{"position":[[682,9]]}}}],["media",{"_index":569,"t":{"54":{"position":[[2536,5],[2603,5]]},"660":{"position":[[1004,5],[1101,5]]}}}],["median",{"_index":2213,"t":{"551":{"position":[[637,6]]},"618":{"position":[[287,6],[718,6],[741,6]]}}}],["meet",{"_index":1396,"t":{"262":{"position":[[225,4]]},"577":{"position":[[305,5]]},"620":{"position":[[1208,4],[1544,7],[1608,7]]}}}],["member",{"_index":501,"t":{"46":{"position":[[577,7]]},"354":{"position":[[1631,7]]},"640":{"position":[[906,7]]},"650":{"position":[[257,7],[344,7],[404,7]]}}}],["membership",{"_index":1099,"t":{"188":{"position":[[159,10]]},"194":{"position":[[8,10],[283,10],[520,11]]},"196":{"position":[[130,10]]},"212":{"position":[[307,10],[772,10]]},"360":{"position":[[213,10],[495,11]]},"523":{"position":[[295,11],[478,11]]},"640":{"position":[[367,10],[488,11]]}}}],["memori",{"_index":1547,"t":{"300":{"position":[[897,6]]},"416":{"position":[[110,7]]},"519":{"position":[[1760,7]]},"616":{"position":[[584,7]]},"642":{"position":[[366,6]]},"652":{"position":[[70,6]]}}}],["mempool",{"_index":2720,"t":{"660":{"position":[[874,9]]}}}],["menduist",{"_index":2203,"t":{"551":{"position":[[250,9]]}}}],["mention",{"_index":2045,"t":{"519":{"position":[[835,7]]}}}],["merchant",{"_index":2272,"t":{"561":{"position":[[219,16]]}}}],["merg",{"_index":495,"t":{"46":{"position":[[489,5]]},"487":{"position":[[93,5]]}}}],["mesh",{"_index":1469,"t":{"284":{"position":[[368,5],[418,5]]},"286":{"position":[[384,4]]},"551":{"position":[[237,5]]},"591":{"position":[[221,5]]}}}],["messag",{"_index":184,"t":{"22":{"position":[[24,7],[142,7]]},"24":{"position":[[152,8],[213,8],[323,8],[390,8],[465,8],[539,8],[620,8],[718,8]]},"34":{"position":[[41,8],[67,9],[417,10],[678,7],[867,7],[1064,7],[1291,9],[1571,11],[1737,7],[1849,7],[2141,8],[2330,8]]},"36":{"position":[[8,8],[373,7],[496,7],[604,8],[647,7]]},"38":{"position":[[11,8],[138,9],[271,8],[313,9],[402,8]]},"40":{"position":[[11,8],[201,9],[337,8],[354,9],[430,8],[472,9],[567,8],[1341,8]]},"46":{"position":[[338,7]]},"48":{"position":[[154,8]]},"50":{"position":[[93,8],[241,7]]},"52":{"position":[[401,8],[681,7]]},"54":{"position":[[232,7],[382,9],[548,8],[589,8],[672,8],[753,9],[782,7],[879,8],[946,8],[1012,8],[1121,8]]},"80":{"position":[[30,8]]},"86":{"position":[[57,7],[221,7],[430,8],[506,8],[597,8]]},"88":{"position":[[184,9],[589,8]]},"90":{"position":[[136,8],[336,9],[717,9]]},"92":{"position":[[26,7],[109,7]]},"94":{"position":[[40,9],[285,7],[356,7]]},"96":{"position":[[8,8],[53,7],[91,7],[187,8],[234,7],[340,7],[393,8],[512,8],[643,7],[760,10],[925,7],[1077,7],[1210,8]]},"113":{"position":[[114,8],[134,7],[444,7]]},"117":{"position":[[51,7],[325,9],[354,7],[383,7],[505,7],[584,7],[660,8],[685,7],[774,8],[815,7],[847,8],[972,7],[1058,8],[1157,8]]},"119":{"position":[[463,9],[489,7],[538,7],[653,7],[732,7],[811,8],[836,7],[925,8],[963,7],[1016,8],[1134,7],[1218,8],[1317,8],[1545,7]]},"121":{"position":[[0,7],[62,9],[102,8],[189,8],[458,7],[487,7],[871,8],[904,7],[990,7],[1145,8],[1235,7],[1311,8],[1376,8],[1445,8],[1527,7],[1606,8],[1671,8],[1727,8],[2190,7],[2404,8],[2465,7],[2553,8],[2717,7],[2786,7],[3014,7],[3206,7],[3264,7]]},"123":{"position":[[51,7],[1014,8]]},"137":{"position":[[107,8],[159,8]]},"139":{"position":[[588,9]]},"145":{"position":[[57,7],[235,7],[411,8],[520,7],[569,8],[1082,8],[1173,8]]},"147":{"position":[[26,7],[67,7],[130,7]]},"149":{"position":[[8,8],[83,7],[153,7],[249,8],[296,7],[399,7]]},"151":{"position":[[11,8],[78,7],[278,7],[710,8],[1179,8],[1315,8]]},"161":{"position":[[332,9],[423,8],[450,7]]},"163":{"position":[[98,8]]},"169":{"position":[[41,8],[75,7],[226,7]]},"171":{"position":[[142,9]]},"173":{"position":[[120,8],[291,7],[380,9],[448,9],[769,8]]},"175":{"position":[[90,8],[262,7],[348,9],[456,8],[530,8],[554,8],[778,8]]},"178":{"position":[[213,8],[312,8]]},"180":{"position":[[62,9],[132,8],[252,8],[461,8],[496,8],[755,8],[771,7]]},"182":{"position":[[57,8],[117,8],[294,8],[591,7],[656,7],[720,8],[802,8]]},"184":{"position":[[240,9]]},"194":{"position":[[127,8],[218,8],[460,8]]},"196":{"position":[[59,9]]},"200":{"position":[[229,7],[598,8]]},"204":{"position":[[202,7]]},"212":{"position":[[1105,7]]},"214":{"position":[[133,7],[170,7],[354,7],[449,7],[556,7]]},"216":{"position":[[298,7]]},"218":{"position":[[137,8]]},"220":{"position":[[276,8]]},"222":{"position":[[262,7]]},"260":{"position":[[678,8]]},"262":{"position":[[66,8],[150,8],[203,8]]},"264":{"position":[[317,9],[420,7],[632,9]]},"270":{"position":[[172,9],[290,7],[454,7],[490,7],[614,7]]},"272":{"position":[[124,9],[407,8],[550,8]]},"284":{"position":[[74,7],[460,8]]},"300":{"position":[[10,7],[151,8],[212,7],[283,8],[712,7],[764,8],[904,7],[1030,7],[1092,7],[1221,8],[1319,7],[1365,7],[1524,8],[1551,7],[1675,8],[1719,9]]},"302":{"position":[[393,7]]},"308":{"position":[[506,7],[1201,7]]},"310":{"position":[[265,8],[454,8]]},"312":{"position":[[268,8],[423,8]]},"328":{"position":[[270,7],[323,8],[390,9]]},"330":{"position":[[94,9]]},"332":{"position":[[180,7]]},"340":{"position":[[170,9]]},"348":{"position":[[98,8],[150,7],[227,8]]},"350":{"position":[[206,9],[257,8],[312,7]]},"352":{"position":[[157,8],[251,8],[343,9],[444,8],[574,8],[661,7],[769,7],[915,8],[974,8],[1081,8]]},"354":{"position":[[156,9],[219,8],[550,7],[619,9],[684,8],[866,10],[1020,9],[1387,7],[1497,8],[1586,7],[1696,8]]},"356":{"position":[[33,9],[95,10],[467,7]]},"368":{"position":[[40,8],[98,7]]},"378":{"position":[[83,8]]},"386":{"position":[[54,8]]},"396":{"position":[[28,7],[97,7],[228,7]]},"406":{"position":[[115,7]]},"408":{"position":[[47,9],[87,8],[131,8]]},"410":{"position":[[189,8]]},"414":{"position":[[98,7]]},"418":{"position":[[144,8]]},"422":{"position":[[56,8],[123,8]]},"428":{"position":[[5,7],[38,8]]},"430":{"position":[[5,7],[181,7]]},"432":{"position":[[58,9]]},"467":{"position":[[863,8],[947,8],[1035,7]]},"471":{"position":[[53,8],[303,7],[316,7],[508,9]]},"475":{"position":[[377,8]]},"487":{"position":[[35,9],[183,9],[215,8]]},"489":{"position":[[121,7]]},"493":{"position":[[265,7],[347,8]]},"505":{"position":[[89,8],[193,9]]},"507":{"position":[[162,8]]},"509":{"position":[[72,8],[416,9]]},"511":{"position":[[42,8],[206,8],[403,8]]},"513":{"position":[[167,9],[275,8]]},"515":{"position":[[5,7],[51,8],[205,7],[397,7],[506,8]]},"519":{"position":[[753,8],[814,9],[1250,8],[1542,9]]},"521":{"position":[[272,7],[371,8],[450,8],[535,8]]},"523":{"position":[[90,8],[200,8],[726,7],[830,8],[942,7],[1117,7]]},"545":{"position":[[77,7],[182,7],[262,7],[318,8],[416,7],[485,7],[558,8]]},"547":{"position":[[86,8],[166,8],[202,7],[339,8],[480,8],[586,7],[681,7],[779,7],[886,7],[1009,7]]},"549":{"position":[[17,7],[187,7],[391,7],[580,7],[683,7],[921,7],[1134,8],[1290,7],[1465,9],[1490,8],[1639,7],[1654,7],[1705,8],[1758,7],[1851,7],[1946,7],[2094,7]]},"551":{"position":[[73,7],[804,8],[855,9]]},"553":{"position":[[31,7],[167,7],[372,8],[783,7],[1062,8],[1207,8],[1518,7],[1554,7],[1599,9],[1683,9],[2179,7]]},"555":{"position":[[384,7]]},"582":{"position":[[179,7],[196,7],[301,7],[579,9],[729,9]]},"584":{"position":[[72,7],[89,7],[194,7],[472,9],[622,9]]},"587":{"position":[[82,8],[119,7]]},"589":{"position":[[4,7],[68,7],[202,8],[226,7],[244,7],[677,7],[713,7]]},"591":{"position":[[69,7],[227,7],[325,7]]},"616":{"position":[[289,9]]},"623":{"position":[[58,8],[146,7],[237,8]]},"625":{"position":[[48,7]]},"631":{"position":[[161,8],[271,7],[381,9],[599,8],[653,7],[779,8],[916,8],[950,7],[1031,8]]},"635":{"position":[[219,8],[428,8]]},"637":{"position":[[310,8],[452,7],[1426,8],[1533,8],[1803,8]]},"640":{"position":[[395,7],[722,8],[786,8]]},"644":{"position":[[74,8],[208,7],[267,8],[476,8]]},"646":{"position":[[172,7],[302,7],[413,8]]},"648":{"position":[[473,8]]},"650":{"position":[[304,9]]},"652":{"position":[[180,8]]},"656":{"position":[[115,9]]},"658":{"position":[[156,9],[371,10]]},"660":{"position":[[471,7]]}}}],["message'",{"_index":1757,"t":{"354":{"position":[[750,9]]}}}],["message/payload",{"_index":1036,"t":{"173":{"position":[[540,15]]},"175":{"position":[[655,15]]}}}],["message/proto",{"_index":1407,"t":{"264":{"position":[[752,13]]}}}],["messageid",{"_index":775,"t":{"96":{"position":[[558,9],[689,10],[891,10],[1043,10]]}}}],["messageindex\\\"\\ndetail",{"_index":2652,"t":{"637":{"position":[[661,25]]}}}],["messageobj",{"_index":991,"t":{"151":{"position":[[334,10],[382,10]]}}}],["messages.map((messag",{"_index":370,"t":{"34":{"position":[[1222,23]]}}}],["messages.push(wakumessag",{"_index":1057,"t":{"180":{"position":[[303,27]]}}}],["messages/minut",{"_index":2690,"t":{"648":{"position":[[487,16]]}}}],["messages[messages.length",{"_index":1060,"t":{"180":{"position":[[642,24]]}}}],["messagespromis",{"_index":1043,"t":{"175":{"position":[[482,16]]}}}],["messagespromises.map(async",{"_index":1046,"t":{"175":{"position":[[584,26]]}}}],["messeng",{"_index":2709,"t":{"660":{"position":[[5,11],[1033,11]]}}}],["meta",{"_index":2028,"t":{"515":{"position":[[238,4]]}}}],["metadata",{"_index":1193,"t":{"208":{"position":[[1072,9]]},"262":{"position":[[19,8]]},"428":{"position":[[110,8]]}}}],["metal",{"_index":2619,"t":{"635":{"position":[[944,6],[2016,6]]},"637":{"position":[[1074,6]]}}}],["method",{"_index":425,"t":{"36":{"position":[[282,6]]},"44":{"position":[[63,8]]},"54":{"position":[[1066,8],[1492,6]]},"56":{"position":[[776,7],[969,7]]},"60":{"position":[[56,6],[226,6]]},"84":{"position":[[342,7],[424,7]]},"107":{"position":[[221,7]]},"113":{"position":[[161,8],[270,6],[471,8]]},"117":{"position":[[1326,7]]},"119":{"position":[[1480,8]]},"121":{"position":[[352,7],[3129,7]]},"123":{"position":[[1060,8]]},"133":{"position":[[341,7]]},"139":{"position":[[444,7],[526,7]]},"153":{"position":[[66,8],[265,6]]},"155":{"position":[[86,8]]},"157":{"position":[[471,6]]},"159":{"position":[[660,6]]},"167":{"position":[[28,6]]},"173":{"position":[[73,6],[310,8]]},"175":{"position":[[281,8]]},"208":{"position":[[460,6]]},"234":{"position":[[1588,7]]},"250":{"position":[[274,7]]},"290":{"position":[[287,6]]},"306":{"position":[[32,6]]},"340":{"position":[[131,7],[377,6]]},"354":{"position":[[383,6],[577,7]]},"366":{"position":[[109,7]]},"394":{"position":[[117,6]]},"396":{"position":[[202,7]]},"430":{"position":[[169,7]]},"465":{"position":[[98,7]]},"481":{"position":[[17,7]]},"577":{"position":[[1602,7]]}}}],["metric",{"_index":1013,"t":{"159":{"position":[[171,7]]},"184":{"position":[[258,7]]},"196":{"position":[[85,7]]},"198":{"position":[[75,7]]},"224":{"position":[[31,7],[63,7],[90,7],[148,7],[163,7],[215,7],[230,7],[258,7]]},"491":{"position":[[52,7]]},"519":{"position":[[1948,6]]},"582":{"position":[[37,7]]},"652":{"position":[[151,7]]}}}],["mgs/epoch",{"_index":2076,"t":{"523":{"position":[[371,9]]}}}],["microsoft",{"_index":1357,"t":{"248":{"position":[[910,9]]}}}],["migrat",{"_index":1247,"t":{"214":{"position":[[567,9],[598,9]]},"258":{"position":[[112,9]]},"260":{"position":[[590,7],[1305,9]]},"362":{"position":[[407,7]]},"436":{"position":[[2,9]]},"438":{"position":[[0,9]]}}}],["million",{"_index":2606,"t":{"633":{"position":[[233,7]]}}}],["min",{"_index":1328,"t":{"234":{"position":[[1476,4]]}}}],["mind",{"_index":791,"t":{"98":{"position":[[185,5]]},"266":{"position":[[121,5]]}}}],["mine",{"_index":1892,"t":{"463":{"position":[[133,5]]}}}],["miner",{"_index":1891,"t":{"463":{"position":[[93,6],[168,6]]},"469":{"position":[[459,6]]}}}],["mini",{"_index":2677,"t":{"644":{"position":[[381,4]]}}}],["minim",{"_index":205,"t":{"22":{"position":[[384,9]]},"610":{"position":[[545,7]]}}}],["minimum",{"_index":915,"t":{"125":{"position":[[246,7]]}}}],["minor",{"_index":2216,"t":{"551":{"position":[[771,5]]},"652":{"position":[[159,5]]}}}],["minu",{"_index":2400,"t":{"582":{"position":[[146,6]]},"584":{"position":[[39,6]]}}}],["minut",{"_index":1251,"t":{"216":{"position":[[114,7]]},"218":{"position":[[182,7]]},"650":{"position":[[421,7]]}}}],["misbehav",{"_index":1866,"t":{"457":{"position":[[274,11]]}}}],["misbehaviour",{"_index":1904,"t":{"463":{"position":[[532,13]]}}}],["miss",{"_index":1027,"t":{"171":{"position":[[135,6]]},"422":{"position":[[116,6]]},"457":{"position":[[580,4]]},"511":{"position":[[199,6]]}}}],["mitig",{"_index":1709,"t":{"342":{"position":[[219,10]]}}}],["mix",{"_index":2413,"t":{"589":{"position":[[368,5],[773,5]]}}}],["mkdir",{"_index":958,"t":{"127":{"position":[[716,5]]}}}],["mobil",{"_index":1731,"t":{"346":{"position":[[315,6]]},"388":{"position":[[192,6]]},"620":{"position":[[1751,7]]}}}],["model",{"_index":1644,"t":{"324":{"position":[[140,6]]},"342":{"position":[[509,5]]},"481":{"position":[[100,5]]}}}],["modern",{"_index":46,"t":{"8":{"position":[[122,6]]}}}],["modif",{"_index":2217,"t":{"551":{"position":[[777,12]]},"620":{"position":[[2957,14]]}}}],["modifi",{"_index":39,"t":{"8":{"position":[[46,6]]},"34":{"position":[[77,6],[1888,6]]},"36":{"position":[[48,6]]},"121":{"position":[[2678,6]]},"290":{"position":[[478,9]]},"320":{"position":[[430,9]]},"541":{"position":[[7,6]]},"551":{"position":[[127,8]]},"565":{"position":[[168,6]]},"573":{"position":[[7,6]]},"579":{"position":[[386,7]]}}}],["modular",{"_index":1727,"t":{"346":{"position":[[81,7]]},"382":{"position":[[12,7]]},"467":{"position":[[49,7]]},"503":{"position":[[13,7]]},"555":{"position":[[462,7]]}}}],["monetari",{"_index":1858,"t":{"457":{"position":[[85,8],[151,8],[192,8]]},"461":{"position":[[337,8]]},"463":{"position":[[54,8],[297,8],[411,8]]},"469":{"position":[[221,8],[289,8],[674,8],[725,8]]}}}],["money",{"_index":1978,"t":{"483":{"position":[[645,6]]}}}],["monitor",{"_index":660,"t":{"70":{"position":[[132,10]]},"184":{"position":[[317,7]]},"186":{"position":[[76,8]]},"198":{"position":[[46,10]]},"246":{"position":[[93,7]]}}}],["more",{"_index":471,"t":{"40":{"position":[[1600,5]]},"54":{"position":[[500,5]]},"78":{"position":[[726,4]]},"84":{"position":[[419,4]]},"109":{"position":[[91,4]]},"133":{"position":[[188,4]]},"139":{"position":[[521,4]]},"175":{"position":[[45,4]]},"252":{"position":[[85,4]]},"262":{"position":[[314,5]]},"272":{"position":[[459,4]]},"286":{"position":[[449,5]]},"296":{"position":[[85,4]]},"340":{"position":[[290,4]]},"342":{"position":[[722,4],[810,4]]},"346":{"position":[[361,5]]},"354":{"position":[[1492,4]]},"356":{"position":[[539,4]]},"358":{"position":[[420,4]]},"406":{"position":[[178,5]]},"469":{"position":[[561,4]]},"479":{"position":[[773,4],[807,4],[856,4],[1129,4]]},"481":{"position":[[4,4]]},"483":{"position":[[837,4]]},"485":{"position":[[9,4]]},"507":{"position":[[320,4]]},"549":{"position":[[289,4],[1503,4],[1609,4]]},"553":{"position":[[745,4],[981,4],[2373,4]]},"582":{"position":[[775,4]]},"584":{"position":[[668,4]]},"620":{"position":[[370,4]]},"625":{"position":[[295,4]]},"631":{"position":[[1162,4]]},"635":{"position":[[278,4],[1438,4],[2196,4],[2533,4],[2809,4]]},"637":{"position":[[1634,4],[1700,4],[1911,4]]}}}],["moreov",{"_index":1883,"t":{"461":{"position":[[253,9]]},"479":{"position":[[1095,9]]}}}],["mostli",{"_index":1739,"t":{"350":{"position":[[116,6]]},"388":{"position":[[0,6]]},"499":{"position":[[235,6]]},"620":{"position":[[935,6]]}}}],["motiv",{"_index":1353,"t":{"246":{"position":[[246,12]]}}}],["mount",{"_index":2580,"t":{"625":{"position":[[226,7]]},"631":{"position":[[96,8]]}}}],["move",{"_index":1679,"t":{"336":{"position":[[16,4]]}}}],["mpb",{"_index":2558,"t":{"620":{"position":[[2025,5],[2461,5]]}}}],["mpt=ipt_1+ipt_2+ipt_3+ipt_4",{"_index":2193,"t":{"549":{"position":[[1971,27]]}}}],["ms",{"_index":2161,"t":{"545":{"position":[[383,3]]},"553":{"position":[[1113,3],[1233,3],[1318,3]]}}}],["msg",{"_index":1047,"t":{"175":{"position":[[626,3]]}}}],["msg/",{"_index":2407,"t":{"587":{"position":[[226,5]]}}}],["msg/10",{"_index":2410,"t":{"587":{"position":[[246,7]]}}}],["msg/second",{"_index":2090,"t":{"523":{"position":[[1009,10],[1241,10]]}}}],["msg1",{"_index":1746,"t":{"352":{"position":[[382,4],[638,4],[752,5],[859,4],[1054,4]]}}}],["msgs/epoch",{"_index":2078,"t":{"523":{"position":[[394,10],[417,10]]}}}],["msgs/sec",{"_index":2599,"t":{"631":{"position":[[1138,9],[1224,8]]}}}],["mu",{"_index":2231,"t":{"553":{"position":[[304,2]]}}}],["much",{"_index":1882,"t":{"461":{"position":[[231,4]]},"521":{"position":[[324,4]]},"631":{"position":[[1157,4]]},"635":{"position":[[3007,4]]},"646":{"position":[[385,4]]}}}],["multi",{"_index":639,"t":{"62":{"position":[[1613,5]]},"660":{"position":[[556,5],[587,5]]}}}],["multiaddr",{"_index":124,"t":{"12":{"position":[[209,9]]},"16":{"position":[[114,9]]},"40":{"position":[[1103,9]]},"62":{"position":[[31,9],[290,13]]},"167":{"position":[[539,9]]},"208":{"position":[[557,9],[649,9]]},"210":{"position":[[89,10],[182,10]]},"212":{"position":[[1196,9]]},"218":{"position":[[95,9]]},"220":{"position":[[232,9]]},"230":{"position":[[139,9]]},"276":{"position":[[213,9],[247,9]]},"282":{"position":[[200,9],[340,9]]},"290":{"position":[[257,10]]},"298":{"position":[[167,10],[550,9]]},"300":{"position":[[1609,10]]},"304":{"position":[[71,11]]},"310":{"position":[[332,10]]},"312":{"position":[[340,10]]},"314":{"position":[[140,9],[163,9],[206,10],[243,9],[317,9],[436,9]]},"318":{"position":[[68,9],[288,11]]}}}],["multiaddr=[multiaddr",{"_index":1624,"t":{"314":{"position":[[271,20]]}}}],["multiaddress",{"_index":1178,"t":{"208":{"position":[[576,14],[693,14]]},"214":{"position":[[93,12]]}}}],["multimedia",{"_index":2722,"t":{"660":{"position":[[1137,10]]}}}],["multipl",{"_index":1312,"t":{"234":{"position":[[649,8]]},"248":{"position":[[62,8]]},"252":{"position":[[112,8]]},"270":{"position":[[191,8]]},"272":{"position":[[377,8]]},"274":{"position":[[160,8]]},"276":{"position":[[117,8]]},"278":{"position":[[495,8]]},"280":{"position":[[249,8]]},"284":{"position":[[937,8]]},"296":{"position":[[112,8]]},"336":{"position":[[284,8]]},"350":{"position":[[145,8]]},"471":{"position":[[213,8]]},"475":{"position":[[317,8]]},"487":{"position":[[72,8]]},"547":{"position":[[605,8]]},"549":{"position":[[599,8]]},"616":{"position":[[380,8]]},"631":{"position":[[355,8]]},"648":{"position":[[454,8]]},"666":{"position":[[23,8]]}}}],["multipli",{"_index":2051,"t":{"519":{"position":[[1270,10]]}}}],["mvp",{"_index":2463,"t":{"610":{"position":[[38,3],[334,4]]}}}],["my_private_key.pem",{"_index":1576,"t":{"304":{"position":[[683,18],[747,18]]}}}],["n",{"_index":1142,"t":{"200":{"position":[[483,1]]},"483":{"position":[[228,2],[394,2]]},"631":{"position":[[105,3]]},"637":{"position":[[951,1]]}}}],["n1",{"_index":2191,"t":{"549":{"position":[[1891,2]]}}}],["n5",{"_index":2192,"t":{"549":{"position":[[1909,2]]}}}],["n_1...n_i",{"_index":2165,"t":{"547":{"position":[[249,9]]}}}],["name",{"_index":95,"t":{"10":{"position":[[745,5]]},"64":{"position":[[455,7]]},"90":{"position":[[29,5]]},"155":{"position":[[175,5],[301,4]]},"157":{"position":[[78,4]]},"204":{"position":[[0,4]]},"206":{"position":[[0,4]]},"208":{"position":[[0,4]]},"210":{"position":[[0,4],[110,4],[149,4],[242,4],[258,4]]},"212":{"position":[[0,4]]},"214":{"position":[[0,4]]},"216":{"position":[[0,4]]},"218":{"position":[[0,4]]},"220":{"position":[[2,4]]},"222":{"position":[[0,4]]},"224":{"position":[[0,4]]},"226":{"position":[[0,4],[175,4],[214,4]]},"228":{"position":[[0,4]]},"230":{"position":[[0,4]]},"232":{"position":[[0,4]]},"234":{"position":[[0,4]]},"260":{"position":[[395,5]]},"264":{"position":[[125,5],[150,4],[341,5],[360,4]]},"278":{"position":[[275,4],[403,4],[431,4],[508,4],[616,5],[640,4],[657,4],[708,4],[1105,4],[1143,4]]},"290":{"position":[[144,5],[341,4],[499,5],[614,5],[684,5]]},"298":{"position":[[34,4],[112,4],[248,5],[287,4],[444,4],[584,5],[744,4],[851,4],[912,4]]},"304":{"position":[[663,4]]},"314":{"position":[[385,4]]},"348":{"position":[[22,4]]},"374":{"position":[[116,5]]},"448":{"position":[[0,5]]},"519":{"position":[[119,4]]}}}],["name=[domain",{"_index":1529,"t":{"298":{"position":[[235,12]]}}}],["name=nwakunode.com",{"_index":1530,"t":{"298":{"position":[[371,18]]}}}],["name}/{encod",{"_index":1399,"t":{"264":{"position":[[96,16]]}}}],["name}/{version}/{cont",{"_index":1398,"t":{"264":{"position":[[65,24]]}}}],["nascent",{"_index":2442,"t":{"602":{"position":[[10,7]]}}}],["nat",{"_index":691,"t":{"78":{"position":[[597,4]]},"208":{"position":[[444,3]]},"314":{"position":[[365,3]]}}}],["nat=ani",{"_index":692,"t":{"78":{"position":[[604,7]]}}}],["nat=extip:[your",{"_index":689,"t":{"78":{"position":[[544,15]]}}}],["nativ",{"_index":55,"t":{"10":{"position":[[15,6]]},"18":{"position":[[84,7],[125,6]]},"28":{"position":[[84,7],[125,6]]},"463":{"position":[[47,6],[464,6]]},"469":{"position":[[29,6]]}}}],["natur",{"_index":820,"t":{"107":{"position":[[307,7]]},"577":{"position":[[908,6]]}}}],["nearest",{"_index":2502,"t":{"618":{"position":[[256,7]]}}}],["necessari",{"_index":1106,"t":{"192":{"position":[[251,9]]},"469":{"position":[[814,9]]},"610":{"position":[[436,9],[574,9]]}}}],["need",{"_index":108,"t":{"10":{"position":[[956,4]]},"36":{"position":[[40,4]]},"38":{"position":[[43,4]]},"40":{"position":[[38,4]]},"62":{"position":[[1237,7]]},"82":{"position":[[93,7]]},"90":{"position":[[4,4],[235,4]]},"101":{"position":[[229,4]]},"123":{"position":[[332,4]]},"127":{"position":[[20,4]]},"139":{"position":[[561,5]]},"194":{"position":[[495,4]]},"246":{"position":[[239,6]]},"260":{"position":[[169,4],[310,4],[629,4]]},"272":{"position":[[568,6]]},"290":{"position":[[521,4]]},"454":{"position":[[527,4]]},"519":{"position":[[1648,5]]},"521":{"position":[[592,5]]},"529":{"position":[[306,4],[403,6]]},"549":{"position":[[2136,4],[2199,4]]},"604":{"position":[[219,5],[424,6]]},"616":{"position":[[243,4]]},"623":{"position":[[435,6]]},"644":{"position":[[284,4]]},"650":{"position":[[543,4]]},"658":{"position":[[116,4]]}}}],["neglig",{"_index":2327,"t":{"569":{"position":[[54,11]]},"650":{"position":[[376,11]]}}}],["negoti",{"_index":1674,"t":{"332":{"position":[[325,11]]},"473":{"position":[[127,11],[489,12]]},"475":{"position":[[211,11],[287,10]]},"477":{"position":[[217,11]]}}}],["neighbor",{"_index":1873,"t":{"457":{"position":[[528,9],[672,10]]}}}],["neighbour",{"_index":1464,"t":{"282":{"position":[[948,12]]}}}],["neighbourhood",{"_index":1628,"t":{"316":{"position":[[365,14]]}}}],["netflix",{"_index":2505,"t":{"618":{"position":[[437,7]]},"620":{"position":[[2119,7]]}}}],["network",{"_index":62,"t":{"10":{"position":[[154,7]]},"16":{"position":[[22,10]]},"24":{"position":[[1643,8],[1769,7]]},"36":{"position":[[153,7],[671,7]]},"40":{"position":[[974,8],[1253,8]]},"46":{"position":[[606,7]]},"50":{"position":[[71,8]]},"52":{"position":[[1060,7]]},"54":{"position":[[900,8],[1422,7],[2495,8]]},"58":{"position":[[113,7],[371,8],[497,7]]},"78":{"position":[[883,7]]},"84":{"position":[[85,8]]},"88":{"position":[[92,8],[658,7]]},"96":{"position":[[1233,7]]},"111":{"position":[[99,7]]},"113":{"position":[[314,8]]},"139":{"position":[[85,8],[631,7]]},"141":{"position":[[36,7]]},"143":{"position":[[92,8]]},"145":{"position":[[599,7],[682,7],[748,7],[861,7]]},"149":{"position":[[31,7]]},"151":{"position":[[841,7],[907,7],[1020,7],[1338,7]]},"165":{"position":[[85,8]]},"167":{"position":[[410,8],[689,8]]},"184":{"position":[[212,7]]},"194":{"position":[[50,8],[476,8]]},"200":{"position":[[497,7],[700,8]]},"208":{"position":[[199,7],[611,8]]},"212":{"position":[[1528,7],[1560,8]]},"228":{"position":[[250,8]]},"244":{"position":[[831,8]]},"246":{"position":[[387,8]]},"252":{"position":[[17,8]]},"256":{"position":[[454,8]]},"270":{"position":[[40,7]]},"274":{"position":[[108,8]]},"282":{"position":[[925,7],[1018,7]]},"284":{"position":[[197,8],[446,7]]},"286":{"position":[[78,8],[336,8]]},"290":{"position":[[354,8]]},"296":{"position":[[17,8]]},"300":{"position":[[44,7]]},"308":{"position":[[61,8]]},"316":{"position":[[222,8],[293,7]]},"318":{"position":[[426,8]]},"332":{"position":[[353,8]]},"336":{"position":[[43,7],[150,7]]},"342":{"position":[[671,7]]},"344":{"position":[[87,7]]},"346":{"position":[[67,8]]},"348":{"position":[[60,8],[167,8],[247,8]]},"352":{"position":[[91,8],[171,7]]},"354":{"position":[[427,8],[704,8],[1348,7]]},"356":{"position":[[9,7],[43,7],[559,8],[577,8]]},"358":{"position":[[82,8],[200,7],[351,8],[467,8]]},"360":{"position":[[548,8]]},"362":{"position":[[108,8],[190,7],[434,7]]},"366":{"position":[[63,8],[162,8]]},"372":{"position":[[161,7]]},"376":{"position":[[136,8]]},"378":{"position":[[206,8]]},"380":{"position":[[94,8]]},"382":{"position":[[20,7],[141,7]]},"384":{"position":[[101,8]]},"386":{"position":[[76,7]]},"388":{"position":[[153,8]]},"390":{"position":[[83,7]]},"398":{"position":[[58,7]]},"400":{"position":[[89,8]]},"402":{"position":[[122,8]]},"404":{"position":[[54,7]]},"406":{"position":[[64,7]]},"414":{"position":[[190,7]]},"418":{"position":[[201,7]]},"422":{"position":[[72,8],[157,8]]},"424":{"position":[[17,7]]},"426":{"position":[[258,8]]},"428":{"position":[[59,8]]},"430":{"position":[[114,8]]},"432":{"position":[[9,7],[68,7]]},"438":{"position":[[43,7],[73,7]]},"440":{"position":[[21,7]]},"442":{"position":[[6,7],[77,7],[416,7]]},"454":{"position":[[243,7],[871,7]]},"459":{"position":[[40,8]]},"461":{"position":[[23,8]]},"463":{"position":[[80,8]]},"465":{"position":[[35,8]]},"467":{"position":[[125,8],[1056,8]]},"469":{"position":[[106,9],[550,7],[837,7]]},"481":{"position":[[295,7]]},"491":{"position":[[167,8]]},"497":{"position":[[215,8],[298,8]]},"505":{"position":[[327,7]]},"507":{"position":[[202,8],[277,7]]},"509":{"position":[[197,8]]},"511":{"position":[[66,8],[435,8]]},"513":{"position":[[297,8],[408,7]]},"515":{"position":[[72,8],[477,7]]},"517":{"position":[[35,7]]},"519":{"position":[[1171,8],[1617,7]]},"521":{"position":[[104,7],[646,8]]},"523":{"position":[[233,7],[601,7],[983,8]]},"545":{"position":[[102,7],[141,7]]},"549":{"position":[[1066,7]]},"551":{"position":[[481,8]]},"553":{"position":[[109,7]]},"555":{"position":[[541,7]]},"582":{"position":[[512,7]]},"584":{"position":[[405,7]]},"587":{"position":[[65,7]]},"589":{"position":[[132,7],[289,7]]},"591":{"position":[[44,7],[147,7]]},"594":{"position":[[143,8],[170,7]]},"620":{"position":[[415,7],[443,7],[738,7],[1139,7]]},"640":{"position":[[280,7]]},"642":{"position":[[117,7]]},"646":{"position":[[561,7]]},"648":{"position":[[441,7],[600,7]]},"658":{"position":[[31,7],[320,8]]},"660":{"position":[[983,7]]},"664":{"position":[[84,8]]},"668":{"position":[[110,7]]}}}],["networkconfig",{"_index":978,"t":{"139":{"position":[[870,14]]},"141":{"position":[[185,14]]},"145":{"position":[[769,13],[958,14],[1021,15]]},"151":{"position":[[928,13]]},"440":{"position":[[83,13]]},"444":{"position":[[231,14]]},"446":{"position":[[259,14]]},"448":{"position":[[373,14],[547,14]]},"450":{"position":[[102,13],[166,13],[233,13],[704,14]]},"452":{"position":[[37,13],[60,13]]},"454":{"position":[[844,13]]}}}],["never",{"_index":1973,"t":{"483":{"position":[[372,5]]}}}],["new",{"_index":276,"t":{"26":{"position":[[83,5],[202,3]]},"34":{"position":[[919,3]]},"36":{"position":[[492,3]]},"40":{"position":[[563,3]]},"44":{"position":[[13,3]]},"52":{"position":[[397,3]]},"78":{"position":[[15,3]]},"92":{"position":[[161,3]]},"96":{"position":[[87,3]]},"147":{"position":[[182,3]]},"149":{"position":[[79,3],[149,3]]},"151":{"position":[[706,3]]},"161":{"position":[[127,3]]},"182":{"position":[[188,3],[218,3]]},"260":{"position":[[79,3],[1182,3]]},"304":{"position":[[15,3]]},"352":{"position":[[911,3]]},"440":{"position":[[79,3]]},"454":{"position":[[146,3],[361,3]]},"483":{"position":[[583,3],[764,3]]},"541":{"position":[[148,3]]},"573":{"position":[[174,3]]},"594":{"position":[[52,3]]},"612":{"position":[[206,3],[340,3],[400,3]]},"640":{"position":[[613,3],[731,3],[825,3]]},"660":{"position":[[1122,4]]}}}],["newer",{"_index":200,"t":{"22":{"position":[[350,5]]},"258":{"position":[[159,5]]}}}],["newli",{"_index":449,"t":{"40":{"position":[[186,5]]},"463":{"position":[[127,5]]}}}],["newseq[protectedshard](0",{"_index":1151,"t":{"204":{"position":[[134,25]]}}}],["next",{"_index":246,"t":{"24":{"position":[[962,4]]},"30":{"position":[[286,5]]},"32":{"position":[[579,5]]},"34":{"position":[[1882,5]]},"42":{"position":[[53,4]]},"44":{"position":[[164,5]]},"52":{"position":[[461,5]]},"180":{"position":[[169,4],[742,4]]},"625":{"position":[[16,4]]},"631":{"position":[[323,4]]},"635":{"position":[[364,4],[815,4],[1887,4]]},"668":{"position":[[194,4]]}}}],["nft",{"_index":2712,"t":{"660":{"position":[[238,3],[285,3]]}}}],["nightli",{"_index":1355,"t":{"248":{"position":[[582,7],[667,7]]}}}],["nim",{"_index":1351,"t":{"246":{"position":[[34,3]]},"623":{"position":[[4,3]]},"637":{"position":[[219,3],[1121,3]]}}}],["node",{"_index":111,"t":{"10":{"position":[[1069,4]]},"12":{"position":[[195,4]]},"24":{"position":[[408,5],[557,5],[1026,5],[1079,4],[1488,4],[1538,4],[1597,5],[1667,5],[1786,5]]},"32":{"position":[[303,4],[443,4],[610,4],[765,4],[778,5],[819,6],[847,4],[901,4],[952,4]]},"34":{"position":[[615,4],[628,5]]},"36":{"position":[[294,4],[343,5]]},"38":{"position":[[362,5]]},"40":{"position":[[401,5],[521,5],[887,5],[937,4],[962,4],[989,4],[1137,4],[1198,4]]},"48":{"position":[[77,4]]},"52":{"position":[[1255,4]]},"54":{"position":[[1442,6],[1583,5],[1653,5],[2722,5],[2753,4]]},"56":{"position":[[21,5],[124,5],[179,4],[314,5],[349,4],[434,5],[509,5],[553,4],[650,4],[688,4],[808,6],[839,5],[950,4],[1052,4],[1087,4],[1134,4],[1259,4],[1349,6],[1429,5],[1577,5],[1647,4],[1754,4],[1810,4]]},"58":{"position":[[58,4],[180,4],[214,4],[266,4],[325,5],[395,5],[514,5]]},"60":{"position":[[193,4],[239,4]]},"62":{"position":[[58,4],[205,4],[235,4],[332,4],[718,4],[752,4],[851,4],[1114,4],[1157,5],[1254,4],[1464,5],[1647,4],[1660,4]]},"64":{"position":[[15,4],[234,4],[397,4],[473,4],[570,4],[601,4],[738,4],[876,4],[907,4]]},"66":{"position":[[28,4],[494,4],[591,4],[639,4]]},"68":{"position":[[51,4],[174,4],[303,4]]},"70":{"position":[[60,4]]},"72":{"position":[[149,4],[234,5]]},"78":{"position":[[230,4],[866,4],[1214,4],[1273,5],[1373,4],[1420,4]]},"84":{"position":[[53,4],[157,4],[168,4],[288,4],[379,5],[445,6]]},"88":{"position":[[9,4],[67,4]]},"90":{"position":[[702,4]]},"113":{"position":[[213,4],[221,4]]},"125":{"position":[[52,4]]},"133":{"position":[[255,4],[322,4]]},"135":{"position":[[137,4]]},"137":{"position":[[94,4]]},"139":{"position":[[53,4],[167,4],[178,4],[301,4],[390,4],[481,5],[547,6],[556,4],[771,4],[815,4]]},"141":{"position":[[98,4],[130,4]]},"143":{"position":[[53,4]]},"153":{"position":[[5,5]]},"155":{"position":[[0,4],[234,4]]},"157":{"position":[[0,5],[316,4],[344,4]]},"159":{"position":[[0,5]]},"161":{"position":[[91,4],[131,4],[598,4],[645,4]]},"163":{"position":[[53,4]]},"165":{"position":[[53,4],[167,4],[178,4]]},"167":{"position":[[51,4],[290,5],[352,4],[398,4],[425,4],[573,4],[634,4]]},"171":{"position":[[100,5],[177,5]]},"173":{"position":[[99,5]]},"175":{"position":[[120,5]]},"182":{"position":[[822,4]]},"184":{"position":[[104,4],[198,4],[299,4],[329,5]]},"186":{"position":[[23,4],[105,5]]},"188":{"position":[[204,4],[289,5]]},"194":{"position":[[114,4]]},"196":{"position":[[32,5],[220,4]]},"198":{"position":[[70,4]]},"200":{"position":[[11,4],[684,4],[922,4],[981,5],[1071,4],[1134,4]]},"202":{"position":[[23,4]]},"208":{"position":[[64,4],[84,4],[150,4],[219,4]]},"222":{"position":[[510,4]]},"226":{"position":[[70,5],[114,4]]},"228":{"position":[[73,5],[83,4],[145,4],[180,4],[216,5],[419,5],[510,5]]},"230":{"position":[[129,4]]},"234":{"position":[[1503,4],[1569,4]]},"236":{"position":[[23,5],[160,4],[204,4]]},"238":{"position":[[144,5]]},"240":{"position":[[8,4],[66,4]]},"242":{"position":[[162,5],[410,4]]},"244":{"position":[[168,5],[406,4],[720,5]]},"246":{"position":[[64,5],[124,5],[370,4],[434,4],[500,4],[585,5]]},"248":{"position":[[9,5],[93,5],[177,4],[303,4],[387,4],[555,4],[755,4]]},"250":{"position":[[230,5],[255,4],[286,4]]},"252":{"position":[[26,5],[211,5],[333,5],[533,5],[572,4],[657,4]]},"254":{"position":[[38,4],[86,4],[117,4]]},"256":{"position":[[39,4],[63,4],[204,4],[261,4],[320,5],[437,4],[482,4]]},"258":{"position":[[82,5]]},"260":{"position":[[241,4],[898,4],[1034,5],[1098,4]]},"274":{"position":[[56,4],[148,4]]},"276":{"position":[[40,4],[290,4]]},"278":{"position":[[35,5],[126,4],[185,4],[828,4],[879,4]]},"280":{"position":[[28,5],[115,4],[160,5],[205,5],[465,4],[863,4]]},"282":{"position":[[35,5],[126,4],[183,4],[224,4],[405,5],[459,5],[476,5],[555,4],[640,4],[961,6]]},"284":{"position":[[25,5],[284,4],[736,4]]},"286":{"position":[[232,6],[305,5],[374,5]]},"288":{"position":[[72,4]]},"290":{"position":[[39,4],[208,4],[582,5],[752,5]]},"292":{"position":[[151,4],[301,4]]},"294":{"position":[[56,4]]},"296":{"position":[[26,5]]},"298":{"position":[[85,4],[333,5],[398,5],[424,5],[494,5],[926,5]]},"300":{"position":[[268,4],[869,4],[1163,4],[1489,4],[1650,4]]},"304":{"position":[[0,5],[1010,4]]},"306":{"position":[[47,5],[221,4],[416,4],[841,4],[1001,4],[1375,5]]},"308":{"position":[[47,4],[176,4],[998,4],[1145,4]]},"310":{"position":[[228,4],[414,4]]},"312":{"position":[[229,4],[381,4]]},"316":{"position":[[171,5],[205,5],[301,5],[451,5],[554,6]]},"318":{"position":[[383,6]]},"320":{"position":[[58,4],[170,5],[254,4],[328,5],[411,4]]},"322":{"position":[[61,4],[122,5]]},"334":{"position":[[164,5],[398,4],[492,4],[528,4]]},"336":{"position":[[345,6],[416,5],[457,5],[524,6],[608,5]]},"342":{"position":[[620,4]]},"346":{"position":[[50,5]]},"350":{"position":[[336,5]]},"352":{"position":[[287,4],[353,4],[421,4],[522,4],[621,4],[682,4],[692,4],[721,4],[729,4],[807,5],[832,4],[840,4],[867,4],[941,4],[1025,4],[1033,4]]},"354":{"position":[[145,5],[326,4],[334,4],[1442,5],[1747,5]]},"356":{"position":[[439,6]]},"358":{"position":[[330,5],[425,4]]},"360":{"position":[[111,4],[166,4]]},"362":{"position":[[91,4],[133,4]]},"366":{"position":[[46,4]]},"370":{"position":[[124,6]]},"374":{"position":[[146,4]]},"376":{"position":[[9,4],[77,6],[191,4]]},"378":{"position":[[40,5]]},"384":{"position":[[8,4],[75,5]]},"386":{"position":[[40,5]]},"390":{"position":[[2,4]]},"392":{"position":[[2,4],[141,5]]},"398":{"position":[[23,5]]},"400":{"position":[[25,4]]},"402":{"position":[[63,5],[109,5]]},"404":{"position":[[37,4]]},"406":{"position":[[42,5]]},"414":{"position":[[218,5]]},"426":{"position":[[168,4]]},"440":{"position":[[49,4]]},"442":{"position":[[62,5]]},"457":{"position":[[172,4],[217,5],[516,5],[574,5],[645,4],[699,4]]},"467":{"position":[[402,4],[485,4],[591,5],[621,5],[667,4],[683,4]]},"497":{"position":[[46,6],[261,4]]},"505":{"position":[[355,5]]},"509":{"position":[[29,5]]},"511":{"position":[[294,4]]},"513":{"position":[[46,5]]},"519":{"position":[[327,5],[380,4],[707,4],[1154,5],[1329,4],[1888,4]]},"545":{"position":[[43,5]]},"547":{"position":[[148,5],[243,5],[325,4],[441,5],[542,5],[640,6],[760,4],[804,4]]},"549":{"position":[[220,6],[321,5],[337,5],[429,4],[522,5],[780,5],[865,5],[953,5],[1084,5],[1115,4],[1175,6],[1217,5],[1392,6],[1535,5],[1689,4],[1886,4],[2057,4]]},"551":{"position":[[720,5]]},"553":{"position":[[581,4],[633,5],[911,4],[1346,5],[1477,4],[1730,6],[1933,4],[2096,4]]},"582":{"position":[[275,6],[333,6],[380,6],[399,4],[549,6]]},"584":{"position":[[168,6],[226,6],[273,6],[292,4],[442,6]]},"587":{"position":[[16,4],[54,4]]},"589":{"position":[[89,6],[343,5],[386,6],[417,6],[489,5],[545,6],[561,5],[596,5],[757,6],[784,6],[830,6]]},"591":{"position":[[59,5],[165,5]]},"614":{"position":[[154,5]]},"616":{"position":[[69,4],[312,4],[536,5],[834,5],[881,4]]},"620":{"position":[[400,6],[591,5],[642,5],[1197,4],[1501,4],[1534,5],[1598,5]]},"623":{"position":[[13,5],[118,5],[276,5]]},"625":{"position":[[264,4]]},"631":{"position":[[38,4],[109,5],[140,5],[209,5],[364,5],[758,5],[1115,4],[1190,4],[1488,4]]},"633":{"position":[[102,4],[163,4],[265,4],[347,4],[493,5],[530,5],[706,4]]},"635":{"position":[[102,4],[684,5],[1234,4]]},"637":{"position":[[100,5],[228,5],[1130,5],[1705,6]]},"640":{"position":[[334,6]]},"642":{"position":[[134,5]]},"644":{"position":[[246,4]]},"646":{"position":[[459,5]]},"648":{"position":[[387,6],[588,4],[651,6]]},"652":{"position":[[25,5]]},"664":{"position":[[70,5],[196,4],[237,5],[284,4],[343,5]]},"668":{"position":[[123,4]]}}}],["node'",{"_index":602,"t":{"56":{"position":[[1606,6],[1705,6]]},"210":{"position":[[280,6]]},"254":{"position":[[604,6]]},"298":{"position":[[141,6],[771,6]]},"334":{"position":[[425,6]]},"342":{"position":[[80,6]]},"404":{"position":[[107,6]]},"457":{"position":[[309,6],[384,6]]},"469":{"position":[[367,6]]}}}],["node.createdecod",{"_index":721,"t":{"86":{"position":[[323,20]]}}}],["node.createencod",{"_index":720,"t":{"86":{"position":[[265,20]]}}}],["node.dial(multiaddr",{"_index":633,"t":{"62":{"position":[[1372,22]]}}}],["node.events.addeventlistener(\"waku:health",{"_index":736,"t":{"88":{"position":[[250,43]]}}}],["node.filter.createsubscript",{"_index":520,"t":{"52":{"position":[[224,32]]},"151":{"position":[[533,32]]}}}],["node.filter.createsubscription(networkconfig",{"_index":994,"t":{"151":{"position":[[1062,46]]}}}],["node.lightpush.send(eciesencod",{"_index":875,"t":{"121":{"position":[[1952,33]]}}}],["node.lightpush.send(encod",{"_index":840,"t":{"117":{"position":[[716,28]]},"119":{"position":[[867,28]]},"149":{"position":[[430,28]]}}}],["node.lightpush.send(symmetricencod",{"_index":873,"t":{"121":{"position":[[1838,37]]}}}],["node.start",{"_index":971,"t":{"139":{"position":[[242,13]]},"165":{"position":[[242,13]]}}}],["node.stop",{"_index":972,"t":{"139":{"position":[[315,12]]}}}],["node.store.querygenerator([decod",{"_index":1042,"t":{"175":{"position":[[403,37]]},"178":{"position":[[520,35]]},"182":{"position":[[495,35]]}}}],["node.store.querywithorderedcallback([decod",{"_index":841,"t":{"117":{"position":[[1189,46]]},"119":{"position":[[1349,46]]},"173":{"position":[[635,46]]},"178":{"position":[[434,46]]},"180":{"position":[[543,46],[833,46]]},"182":{"position":[[409,46]]}}}],["node.waitforp",{"_index":657,"t":{"68":{"position":[[238,20]]},"143":{"position":[[8,19],[148,20]]},"167":{"position":[[8,19]]}}}],["node.waitforpeers([protocols.lightpush",{"_index":982,"t":{"143":{"position":[[370,39]]}}}],["node.waitforpeers([protocols.stor",{"_index":1022,"t":{"167":{"position":[[171,37]]}}}],["node=/ip4/0.0.0.0/tcp/60000/p2p/16uiu2hamlce6zvqcs6kmqqrbbhyojjfyzgr1q3thtsbykzibqkfr",{"_index":1462,"t":{"282":{"position":[[751,85]]}}}],["node=[discv5",{"_index":1456,"t":{"280":{"position":[[342,12],[399,12]]}}}],["node=[p",{"_index":1459,"t":{"282":{"position":[[329,10]]}}}],["node=enr",{"_index":1457,"t":{"280":{"position":[[608,9]]}}}],["node_a",{"_index":2604,"t":{"633":{"position":[[84,7],[321,7],[671,6]]}}}],["node_b",{"_index":2605,"t":{"633":{"position":[[145,7],[403,7],[628,6]]}}}],["node_c",{"_index":2607,"t":{"633":{"position":[[247,7],[499,7]]}}}],["node_d",{"_index":2608,"t":{"633":{"position":[[329,7],[511,8]]}}}],["node_opt",{"_index":311,"t":{"32":{"position":[[322,12]]}}}],["node_requir",{"_index":646,"t":{"64":{"position":[[497,17],[686,20],[1018,19]]},"66":{"position":[[518,17],[755,20]]}}}],["nodej",{"_index":12,"t":{"2":{"position":[[109,6]]},"6":{"position":[[38,7]]},"24":{"position":[[1161,6],[1250,6]]},"54":{"position":[[1691,6],[1762,6],[1878,6]]},"98":{"position":[[96,6],[258,7]]},"101":{"position":[[54,6],[157,6],[210,7]]},"105":{"position":[[98,6]]},"107":{"position":[[94,7],[169,6],[338,7],[455,6]]},"109":{"position":[[28,6]]},"111":{"position":[[29,6],[119,6]]}}}],["nodekey",{"_index":1164,"t":{"208":{"position":[[207,7]]},"304":{"position":[[157,7]]}}}],["nodekey=286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8",{"_index":1583,"t":{"304":{"position":[[1050,72]]}}}],["nodekey=[nod",{"_index":1566,"t":{"304":{"position":[[193,13]]}}}],["nodes=1000",{"_index":2215,"t":{"551":{"position":[[698,11]]}}}],["nois",{"_index":551,"t":{"54":{"position":[[1049,5]]},"113":{"position":[[192,5]]},"332":{"position":[[204,5],[278,5]]},"354":{"position":[[305,5]]},"434":{"position":[[5,5],[41,5]]}}}],["non",{"_index":1887,"t":{"461":{"position":[[333,3]]},"469":{"position":[[585,3]]},"493":{"position":[[333,3]]},"561":{"position":[[274,3]]},"567":{"position":[[419,3]]},"589":{"position":[[495,3],[575,3],[804,3]]}}}],["none",{"_index":1172,"t":{"208":{"position":[[527,5]]},"214":{"position":[[332,4]]},"300":{"position":[[600,4]]}}}],["nonetheless",{"_index":2130,"t":{"537":{"position":[[117,12]]}}}],["normal",{"_index":2600,"t":{"631":{"position":[[1176,6],[1513,6]]}}}],["north",{"_index":2507,"t":{"618":{"position":[[542,5]]},"620":{"position":[[2678,5]]}}}],["note",{"_index":66,"t":{"10":{"position":[[194,4]]},"78":{"position":[[846,4]]},"82":{"position":[[45,4]]},"153":{"position":[[216,4]]},"200":{"position":[[299,4],[638,4]]},"326":{"position":[[156,4]]},"454":{"position":[[826,5]]},"495":{"position":[[162,7]]},"523":{"position":[[756,5]]},"549":{"position":[[260,4]]},"551":{"position":[[274,4]]},"553":{"position":[[202,4],[356,5],[1693,4]]},"577":{"position":[[520,4]]},"608":{"position":[[317,4]]},"610":{"position":[[339,4],[408,4]]},"616":{"position":[[1156,4]]},"618":{"position":[[212,5]]},"620":{"position":[[1588,4],[2901,5]]}}}],["noth",{"_index":2291,"t":{"561":{"position":[[1628,7]]},"610":{"position":[[831,7]]},"652":{"position":[[232,7]]}}}],["notic",{"_index":1156,"t":{"206":{"position":[[133,7]]},"541":{"position":[[81,7]]},"549":{"position":[[1182,6]]},"563":{"position":[[1392,6]]},"573":{"position":[[87,7]]},"577":{"position":[[870,6],[1108,6]]},"625":{"position":[[156,6]]},"635":{"position":[[658,6],[2119,6],[2456,6],[2732,6],[3472,7],[3733,6]]}}}],["notif",{"_index":1404,"t":{"264":{"position":[[601,13]]},"270":{"position":[[147,13],[652,12]]}}}],["notificationpayload",{"_index":1427,"t":{"270":{"position":[[462,19],[632,19]]}}}],["novemb",{"_index":2642,"t":{"635":{"position":[[3820,8]]}}}],["now",{"_index":757,"t":{"90":{"position":[[480,3]]},"260":{"position":[[165,3]]},"318":{"position":[[339,3]]},"442":{"position":[[399,3]]},"450":{"position":[[347,3]]},"452":{"position":[[77,3]]},"454":{"position":[[290,3],[882,3]]},"551":{"position":[[918,5]]},"650":{"position":[[35,3]]}}}],["npm",{"_index":176,"t":{"20":{"position":[[68,3],[77,3]]},"22":{"position":[[570,3],[579,3]]},"30":{"position":[[160,3],[169,3],[386,3],[395,3]]},"44":{"position":[[72,3]]},"54":{"position":[[107,4]]},"64":{"position":[[88,3],[97,3]]},"82":{"position":[[0,3]]},"115":{"position":[[109,3],[118,3]]}}}],["npx",{"_index":472,"t":{"44":{"position":[[81,3],[334,3]]}}}],["ns1.google.com",{"_index":698,"t":{"78":{"position":[[680,15]]}}}],["nullifi",{"_index":1668,"t":{"330":{"position":[[424,10]]},"340":{"position":[[96,10]]},"354":{"position":[[1228,10],[1260,9]]},"356":{"position":[[290,11]]},"412":{"position":[[11,10]]},"418":{"position":[[69,10]]},"507":{"position":[[66,10]]},"555":{"position":[[433,10]]}}}],["num",{"_index":1232,"t":{"212":{"position":[[1514,3]]}}}],["number",{"_index":712,"t":{"80":{"position":[[172,6]]},"90":{"position":[[198,6]]},"208":{"position":[[436,7],[743,6]]},"212":{"position":[[1536,6]]},"218":{"position":[[329,6],[426,6]]},"234":{"position":[[410,6]]},"272":{"position":[[618,6]]},"320":{"position":[[318,6]]},"342":{"position":[[129,6]]},"354":{"position":[[1686,6]]},"616":{"position":[[1474,6]]},"618":{"position":[[228,7]]},"620":{"position":[[131,7],[310,7],[2232,7],[2912,6]]},"631":{"position":[[452,6]]},"635":{"position":[[452,7]]},"644":{"position":[[466,6]]},"646":{"position":[[335,6]]},"650":{"position":[[319,8]]}}}],["numer",{"_index":1753,"t":{"354":{"position":[[103,8]]}}}],["nutshel",{"_index":1710,"t":{"342":{"position":[[308,9]]}}}],["nwaku",{"_index":18,"t":{"2":{"position":[[179,6]]},"10":{"position":[[0,5]]},"12":{"position":[[189,5]]},"16":{"position":[[333,6]]},"24":{"position":[[1397,5]]},"54":{"position":[[1818,5],[2115,5]]},"56":{"position":[[45,5],[173,5],[343,5],[503,5],[547,5],[644,5],[750,6],[802,5],[833,5],[1046,5],[1343,5],[1423,5],[1600,5]]},"62":{"position":[[1458,5]]},"70":{"position":[[54,5],[166,5]]},"72":{"position":[[143,5]]},"74":{"position":[[4,5]]},"76":{"position":[[136,5]]},"78":{"position":[[4,5],[261,5],[1367,5],[1480,5]]},"103":{"position":[[128,5]]},"109":{"position":[[137,5]]},"111":{"position":[[53,5]]},"125":{"position":[[46,5],[154,6],[289,6],[296,5]]},"127":{"position":[[9,6]]},"129":{"position":[[166,5]]},"131":{"position":[[10,5]]},"133":{"position":[[0,5],[207,6],[249,5],[264,5],[296,5]]},"135":{"position":[[83,5],[197,5]]},"161":{"position":[[85,5]]},"184":{"position":[[0,5],[98,5]]},"188":{"position":[[198,5]]},"190":{"position":[[55,5]]},"194":{"position":[[108,5]]},"196":{"position":[[26,5],[156,5],[289,5]]},"200":{"position":[[5,5],[80,5],[157,5],[1065,5],[1222,5]]},"208":{"position":[[144,5]]},"236":{"position":[[29,5]]},"238":{"position":[[67,5]]},"240":{"position":[[2,5]]},"242":{"position":[[76,5]]},"244":{"position":[[79,5],[714,5]]},"246":{"position":[[0,5],[130,5],[364,5],[494,5]]},"248":{"position":[[33,5],[47,5],[103,5],[297,5],[332,5],[381,5],[418,5],[549,5],[569,5],[613,5],[769,5],[793,5],[831,5]]},"250":{"position":[[25,5],[224,5]]},"252":{"position":[[97,5],[222,5],[314,5],[411,5],[566,5]]},"254":{"position":[[32,5]]},"256":{"position":[[431,5],[542,5]]},"258":{"position":[[27,6]]},"274":{"position":[[50,5],[142,5]]},"276":{"position":[[34,5],[284,5]]},"278":{"position":[[29,5],[728,5],[822,5]]},"280":{"position":[[22,5],[459,5],[857,5]]},"282":{"position":[[29,5],[399,5],[549,5],[634,5],[842,5]]},"294":{"position":[[50,5]]},"296":{"position":[[97,5]]},"298":{"position":[[327,5]]},"300":{"position":[[1157,5],[1421,5],[1644,5]]},"304":{"position":[[1023,6]]},"306":{"position":[[101,5],[835,5],[995,5],[1369,5]]},"308":{"position":[[0,5],[992,5],[1139,5]]},"310":{"position":[[10,5],[138,5],[408,5]]},"312":{"position":[[10,5],[152,5],[375,5]]},"314":{"position":[[117,5]]},"354":{"position":[[1787,5]]},"362":{"position":[[23,5],[85,5]]},"545":{"position":[[37,5]]},"547":{"position":[[941,5]]},"551":{"position":[[103,5],[677,5],[749,5]]},"582":{"position":[[49,5]]},"594":{"position":[[56,5]]},"596":{"position":[[52,5]]},"598":{"position":[[4,5],[196,5]]},"623":{"position":[[19,6],[197,5],[282,5]]},"625":{"position":[[34,5],[197,5],[258,5]]},"633":{"position":[[96,5],[157,5],[259,5],[341,5],[524,5]]},"635":{"position":[[678,5],[795,5],[1798,5],[1818,5],[3220,5],[3369,5]]},"637":{"position":[[1390,5],[1497,5],[1767,5]]},"640":{"position":[[328,5]]},"648":{"position":[[366,5]]},"664":{"position":[[155,5]]},"668":{"position":[[66,5]]}}}],["nwaku'",{"_index":1392,"t":{"260":{"position":[[765,7]]}}}],["nwaku+postgr",{"_index":2583,"t":{"629":{"position":[[89,14]]}}}],["nwaku+sqlit",{"_index":2584,"t":{"629":{"position":[[108,13]]}}}],["nwakunode.com",{"_index":145,"t":{"16":{"position":[[197,13],[255,14]]},"298":{"position":[[292,14]]}}}],["o",{"_index":696,"t":{"78":{"position":[[656,1]]}}}],["o.myaddr.l.google.com",{"_index":697,"t":{"78":{"position":[[658,21]]}}}],["object",{"_index":427,"t":{"36":{"position":[[504,6]]},"94":{"position":[[232,6]]},"96":{"position":[[99,6]]},"149":{"position":[[91,6],[161,6]]},"316":{"position":[[12,9]]},"454":{"position":[[453,7]]},"537":{"position":[[831,6]]}}}],["oblig",{"_index":2119,"t":{"535":{"position":[[7,7]]},"561":{"position":[[1222,10]]}}}],["observ",{"_index":2158,"t":{"545":{"position":[[301,7],[399,7]]}}}],["obtain",{"_index":1675,"t":{"334":{"position":[[256,8]]},"342":{"position":[[357,6]]},"360":{"position":[[348,6]]},"362":{"position":[[153,8]]},"635":{"position":[[833,8],[1905,8]]},"637":{"position":[[1036,8]]}}}],["occasion",{"_index":509,"t":{"50":{"position":[[0,13]]},"388":{"position":[[115,12]]}}}],["occur",{"_index":322,"t":{"32":{"position":[[887,6]]},"212":{"position":[[965,5]]},"535":{"position":[[669,5]]}}}],["oceania",{"_index":2530,"t":{"618":{"position":[[657,7]]},"620":{"position":[[2737,7]]}}}],["oct",{"_index":2504,"t":{"618":{"position":[[372,3]]}}}],["off",{"_index":2018,"t":{"503":{"position":[[108,4]]}}}],["offer",{"_index":1483,"t":{"286":{"position":[[194,6]]},"324":{"position":[[23,5]]},"332":{"position":[[227,5]]},"344":{"position":[[43,6]]},"521":{"position":[[318,5],[566,6]]},"561":{"position":[[1685,5],[1725,5]]},"660":{"position":[[298,6]]}}}],["offic",{"_index":2099,"t":{"527":{"position":[[190,6]]},"559":{"position":[[130,6]]}}}],["offlin",{"_index":734,"t":{"88":{"position":[[199,8]]},"350":{"position":[[123,7]]},"388":{"position":[[7,7],[64,7]]},"422":{"position":[[90,7]]},"511":{"position":[[156,7]]}}}],["offline/resourc",{"_index":2013,"t":{"499":{"position":[[242,16]]}}}],["offset",{"_index":1259,"t":{"216":{"position":[[268,6]]},"302":{"position":[[363,6]]}}}],["old",{"_index":1375,"t":{"258":{"position":[[45,3]]}}}],["older",{"_index":199,"t":{"22":{"position":[[340,5]]},"260":{"position":[[1109,5]]}}}],["oldest",{"_index":1049,"t":{"175":{"position":[[771,6]]},"178":{"position":[[132,6],[305,6]]}}}],["omit",{"_index":1064,"t":{"180":{"position":[[947,4]]},"278":{"position":[[685,4]]},"300":{"position":[[645,4],[926,4]]},"306":{"position":[[309,4]]},"308":{"position":[[278,4],[394,4],[528,4]]},"310":{"position":[[709,4]]},"553":{"position":[[409,8]]}}}],["on",{"_index":267,"t":{"24":{"position":[[1617,4]]},"58":{"position":[[345,4]]},"153":{"position":[[286,3]]},"208":{"position":[[514,3]]},"234":{"position":[[521,3],[695,3]]},"248":{"position":[[245,4]]},"258":{"position":[[361,4]]},"408":{"position":[[184,3]]},"467":{"position":[[451,3]]},"513":{"position":[[202,3]]},"519":{"position":[[301,3],[956,3],[1015,3]]},"549":{"position":[[123,3],[846,3]]},"569":{"position":[[532,4]]},"577":{"position":[[1652,3],[2085,3]]},"606":{"position":[[301,3]]},"616":{"position":[[147,3]]},"620":{"position":[[1497,3]]},"633":{"position":[[92,3],[153,3],[255,3],[337,3]]},"637":{"position":[[61,3]]},"640":{"position":[[346,3]]},"648":{"position":[[400,3]]}}}],["onboard",{"_index":2474,"t":{"612":{"position":[[328,7]]}}}],["onc",{"_index":1311,"t":{"234":{"position":[[630,5]]},"250":{"position":[[0,4]]},"284":{"position":[[246,4]]},"366":{"position":[[72,4]]},"553":{"position":[[2329,4]]},"582":{"position":[[678,4]]},"584":{"position":[[571,4]]},"612":{"position":[[0,4]]},"650":{"position":[[476,5]]}}}],["onchain",{"_index":1210,"t":{"212":{"position":[[341,7]]},"648":{"position":[[264,7]]}}}],["onchange={handleinputchang",{"_index":381,"t":{"34":{"position":[[1519,28]]}}}],["onclick={sendmessage}>send.example.com",{"_index":1524,"t":{"292":{"position":[[218,17]]}}}],["round",{"_index":2501,"t":{"618":{"position":[[241,7]]}}}],["rout",{"_index":973,"t":{"139":{"position":[[582,5]]},"228":{"position":[[452,7],[543,7]]},"280":{"position":[[181,7],[509,7],[905,7]]},"336":{"position":[[172,8]]},"352":{"position":[[149,7]]},"362":{"position":[[240,7]]},"424":{"position":[[114,8]]},"547":{"position":[[21,7],[79,6]]}}}],["row",{"_index":2071,"t":{"521":{"position":[[464,5]]},"631":{"position":[[814,4]]},"633":{"position":[[241,5]]}}}],["rule",{"_index":87,"t":{"10":{"position":[[587,5]]},"336":{"position":[[110,5]]},"354":{"position":[[922,5]]},"406":{"position":[[23,5]]},"577":{"position":[[1316,5],[1386,5],[1963,5]]},"602":{"position":[[277,5]]}}}],["run",{"_index":254,"t":{"24":{"position":[[1142,3],[1657,7]]},"40":{"position":[[914,7]]},"54":{"position":[[1810,7]]},"56":{"position":[[10,3],[41,3],[118,3],[167,3],[304,7],[333,7],[413,7],[495,7],[539,7],[655,7],[1064,8]]},"58":{"position":[[385,7]]},"62":{"position":[[1571,7],[1643,3]]},"70":{"position":[[48,3],[162,3]]},"72":{"position":[[133,7],[213,7]]},"78":{"position":[[0,3],[44,3],[257,3],[312,3],[794,3],[805,3],[856,7],[985,3],[1201,7]]},"109":{"position":[[129,7]]},"131":{"position":[[117,3]]},"133":{"position":[[68,3],[199,7],[243,3],[260,3],[292,3]]},"135":{"position":[[0,3]]},"139":{"position":[[293,7]]},"155":{"position":[[221,7],[329,3]]},"157":{"position":[[303,7],[385,3]]},"159":{"position":[[552,3]]},"161":{"position":[[522,3]]},"167":{"position":[[329,7]]},"184":{"position":[[109,7]]},"186":{"position":[[71,4]]},"188":{"position":[[188,7],[268,7]]},"194":{"position":[[366,7]]},"196":{"position":[[247,7]]},"200":{"position":[[909,7]]},"208":{"position":[[72,7]]},"212":{"position":[[897,4],[956,3]]},"236":{"position":[[152,7]]},"246":{"position":[[49,7],[116,7],[484,7],[564,7]]},"248":{"position":[[3,3],[83,7],[99,3],[171,3],[241,3],[291,3],[328,3],[375,3],[414,3],[823,3]]},"250":{"position":[[39,3],[81,3],[127,3]]},"254":{"position":[[24,7]]},"256":{"position":[[248,7]]},"258":{"position":[[34,7],[183,7],[295,7]]},"260":{"position":[[232,3],[888,7]]},"320":{"position":[[164,3]]},"354":{"position":[[134,3]]},"358":{"position":[[320,3]]},"362":{"position":[[19,3],[75,7]]},"467":{"position":[[407,7],[490,7]]},"483":{"position":[[618,7]]},"497":{"position":[[42,3],[255,3]]},"499":{"position":[[150,3]]},"519":{"position":[[321,3],[364,3],[518,3],[1882,3]]},"545":{"position":[[49,7]]},"551":{"position":[[284,7]]},"596":{"position":[[119,3]]},"614":{"position":[[138,3]]},"616":{"position":[[58,3],[327,7],[603,3],[828,3],[875,3]]},"620":{"position":[[386,3],[577,3],[652,3]]},"631":{"position":[[215,7]]},"633":{"position":[[536,7]]},"635":{"position":[[690,3],[845,7],[1917,7]]},"637":{"position":[[1113,7]]},"640":{"position":[[233,7]]},"664":{"position":[[64,3],[151,3],[231,3],[271,7]]}}}],["runstmt",{"_index":2649,"t":{"637":{"position":[[526,8]]}}}],["rustup",{"_index":923,"t":{"127":{"position":[[100,7],[638,6]]}}}],["s",{"_index":948,"t":{"127":{"position":[[505,1],[750,1]]},"589":{"position":[[705,3],[741,3]]}}}],["sa",{"_index":2155,"t":{"543":{"position":[[150,3]]},"579":{"position":[[963,3]]}}}],["sacrific",{"_index":799,"t":{"101":{"position":[[146,10]]}}}],["safeti",{"_index":2118,"t":{"533":{"position":[[141,6]]}}}],["same",{"_index":615,"t":{"62":{"position":[[378,4]]},"90":{"position":[[131,4]]},"228":{"position":[[434,4],[525,4]]},"234":{"position":[[669,4]]},"276":{"position":[[336,4]]},"282":{"position":[[510,4]]},"326":{"position":[[244,4]]},"410":{"position":[[130,4]]},"535":{"position":[[512,4]]},"620":{"position":[[1276,5],[1417,5],[3008,4]]},"635":{"position":[[703,4],[1718,4]]},"637":{"position":[[260,4],[326,4],[1745,4]]},"652":{"position":[[0,4]]}}}],["sampl",{"_index":1484,"t":{"286":{"position":[[255,8],[487,8]]},"316":{"position":[[439,8]]},"660":{"position":[[1223,6]]}}}],["sandbox",{"_index":2618,"t":{"635":{"position":[[928,7],[2000,7]]},"637":{"position":[[1058,7]]}}}],["saniti",{"_index":2439,"t":{"598":{"position":[[164,6]]}}}],["save",{"_index":1119,"t":{"194":{"position":[[298,5]]},"660":{"position":[[173,4],[313,8]]}}}],["scaffold",{"_index":243,"t":{"24":{"position":[[860,8]]},"668":{"position":[[248,8]]}}}],["scalabl",{"_index":784,"t":{"96":{"position":[[1278,8]]},"290":{"position":[[728,12]]},"320":{"position":[[301,12]]},"356":{"position":[[126,8],[302,11]]},"362":{"position":[[472,12]]},"380":{"position":[[42,8]]},"432":{"position":[[36,8]]},"503":{"position":[[262,12]]},"616":{"position":[[1289,12]]},"660":{"position":[[961,12]]}}}],["scale",{"_index":1815,"t":{"414":{"position":[[174,6]]},"469":{"position":[[827,5]]},"505":{"position":[[311,6]]},"553":{"position":[[1746,5]]},"600":{"position":[[187,6]]},"606":{"position":[[268,9]]},"620":{"position":[[761,5]]}}}],["scenario",{"_index":1740,"t":{"350":{"position":[[131,9]]},"631":{"position":[[27,8]]},"633":{"position":[[75,8]]},"635":{"position":[[990,8],[1309,8],[1484,8],[1735,8],[2062,8],[2396,8],[2672,8]]}}}],["scene",{"_index":2708,"t":{"656":{"position":[[366,7]]}}}],["sceneri",{"_index":2643,"t":{"637":{"position":[[171,7]]}}}],["scheme",{"_index":1528,"t":{"298":{"position":[[195,7]]}}}],["scope",{"_index":2010,"t":{"497":{"position":[[84,6]]}}}],["score",{"_index":1662,"t":{"330":{"position":[[218,7],[268,6],[347,7]]},"457":{"position":[[622,6],[658,6],[719,7]]},"642":{"position":[[208,7]]},"648":{"position":[[313,8]]}}}],["screaming_snake_cas",{"_index":1006,"t":{"157":{"position":[[137,20]]}}}],["script",{"_index":217,"t":{"22":{"position":[[837,6],[848,7]]},"82":{"position":[[101,7],[245,9]]},"631":{"position":[[328,6]]}}}],["sd",{"_index":787,"t":{"96":{"position":[[1297,5]]}}}],["sdk",{"_index":157,"t":{"18":{"position":[[39,3],[167,3]]},"24":{"position":[[240,3]]},"28":{"position":[[39,3]]},"54":{"position":[[81,3],[1225,3],[1464,3],[1733,3]]},"56":{"position":[[610,4]]},"80":{"position":[[57,3]]},"354":{"position":[[112,4]]},"420":{"position":[[0,4]]},"666":{"position":[[32,5],[189,3],[243,3]]}}}],["seamless",{"_index":2718,"t":{"660":{"position":[[462,8]]},"666":{"position":[[305,8]]}}}],["seamlessli",{"_index":166,"t":{"18":{"position":[[295,10]]},"24":{"position":[[804,10]]},"107":{"position":[[80,10]]}}}],["second",{"_index":1008,"t":{"157":{"position":[[450,6]]},"216":{"position":[[249,7]]},"218":{"position":[[253,8]]},"300":{"position":[[400,8],[1257,7]]},"302":{"position":[[233,7],[302,7],[424,7]]},"310":{"position":[[498,7],[766,7]]},"521":{"position":[[288,8],[552,8]]},"523":{"position":[[107,8],[674,8]]},"551":{"position":[[1025,7],[1065,7]]},"553":{"position":[[861,7],[1423,7]]},"637":{"position":[[1484,7],[1591,7],[1862,7]]},"640":{"position":[[412,7]]},"642":{"position":[[39,6],[103,8],[189,8]]},"644":{"position":[[183,7],[489,7]]},"646":{"position":[[108,7],[595,7]]},"648":{"position":[[538,8]]},"652":{"position":[[193,7]]}}}],["secp256k1",{"_index":1567,"t":{"304":{"position":[[240,9],[668,9]]},"392":{"position":[[16,9]]}}}],["secreci",{"_index":1829,"t":{"434":{"position":[[218,8]]}}}],["secret",{"_index":1110,"t":{"192":{"position":[[353,7]]},"212":{"position":[[500,6]]}}}],["section",{"_index":607,"t":{"56":{"position":[[1769,7]]},"579":{"position":[[289,8]]},"656":{"position":[[292,8]]}}}],["secur",{"_index":58,"t":{"10":{"position":[[63,6],[260,6],[327,6]]},"119":{"position":[[284,6]]},"123":{"position":[[237,6]]},"198":{"position":[[235,9]]},"232":{"position":[[139,6],[167,6],[206,6],[222,6],[278,6],[295,6]]},"282":{"position":[[1005,8]]},"298":{"position":[[453,6],[676,6]]},"306":{"position":[[362,6],[386,6],[454,6],[471,6],[508,6],[526,6],[666,6],[700,6],[758,6],[1019,6],[1156,6],[1190,6],[1232,6]]},"324":{"position":[[52,8],[97,8],[131,8],[290,8],[342,8]]},"332":{"position":[[140,8],[310,6]]},"336":{"position":[[531,6],[574,6],[716,9]]},"390":{"position":[[101,6]]},"394":{"position":[[65,6],[135,9]]},"414":{"position":[[66,6]]},"420":{"position":[[70,7]]},"426":{"position":[[29,7]]},"430":{"position":[[69,6]]},"434":{"position":[[97,6]]},"505":{"position":[[225,6]]},"529":{"position":[[779,8]]},"533":{"position":[[36,8],[92,8]]},"555":{"position":[[488,6]]},"561":{"position":[[1764,9]]},"654":{"position":[[8,8],[117,8],[299,7]]},"656":{"position":[[247,8]]},"658":{"position":[[245,6]]},"660":{"position":[[654,8]]}}}],["security@free.technolog",{"_index":2703,"t":{"654":{"position":[[140,25]]}}}],["see",{"_index":662,"t":{"70":{"position":[[154,3]]},"133":{"position":[[119,3]]},"161":{"position":[[469,3]]},"467":{"position":[[696,4]]},"473":{"position":[[618,4]]},"477":{"position":[[17,3],[87,3],[160,3],[231,3]]},"481":{"position":[[27,3],[133,3],[221,3],[317,3]]},"485":{"position":[[66,3],[137,3]]},"489":{"position":[[48,3],[141,3]]},"493":{"position":[[38,3],[194,3],[358,3],[500,3]]},"545":{"position":[[581,3]]},"549":{"position":[[348,3],[483,3]]},"551":{"position":[[416,4],[528,3]]},"553":{"position":[[1270,3],[1541,3]]},"589":{"position":[[632,3]]},"620":{"position":[[2826,3]]},"635":{"position":[[1121,3]]},"637":{"position":[[384,3]]},"648":{"position":[[358,3],[554,3],[642,4]]}}}],["seek",{"_index":150,"t":{"16":{"position":[[349,7]]},"26":{"position":[[34,4]]},"284":{"position":[[303,4],[741,5]]},"577":{"position":[[989,8]]}}}],["seem",{"_index":2675,"t":{"644":{"position":[[0,5],[333,5]]},"646":{"position":[[140,5],[202,5],[342,5]]}}}],["seen",{"_index":1083,"t":{"182":{"position":[[715,4]]}}}],["select",{"_index":474,"t":{"44":{"position":[[170,6]]},"78":{"position":[[92,8]]},"246":{"position":[[182,6]]},"262":{"position":[[118,11]]},"288":{"position":[[577,7]]},"356":{"position":[[372,9]]},"368":{"position":[[88,9]]},"378":{"position":[[49,11]]},"483":{"position":[[864,7]]},"509":{"position":[[38,11]]},"637":{"position":[[917,6],[964,6],[1472,7],[1579,7],[1850,7]]}}}],["sell",{"_index":2294,"t":{"561":{"position":[[1701,5],[1741,4]]}}}],["semi",{"_index":1952,"t":{"479":{"position":[[556,4]]}}}],["send",{"_index":225,"t":{"24":{"position":[[135,4],[196,4],[306,4],[373,4]]},"34":{"position":[[33,7],[1055,4],[2418,5]]},"36":{"position":[[3,4],[364,4]]},"48":{"position":[[137,4]]},"54":{"position":[[2460,4]]},"80":{"position":[[13,4]]},"86":{"position":[[489,4]]},"88":{"position":[[176,7],[568,7]]},"96":{"position":[[3,4],[331,4],[503,4],[755,4]]},"117":{"position":[[310,4],[374,4],[676,4]]},"119":{"position":[[448,4],[529,4],[827,4],[1522,7]]},"121":{"position":[[1705,4]]},"137":{"position":[[102,4]]},"145":{"position":[[1065,4]]},"149":{"position":[[3,4],[390,4]]},"184":{"position":[[223,4]]},"194":{"position":[[122,4],[452,7]]},"200":{"position":[[222,4]]},"230":{"position":[[152,4]]},"260":{"position":[[670,7]]},"264":{"position":[[619,4]]},"284":{"position":[[82,8]]},"354":{"position":[[197,7],[1487,4]]},"386":{"position":[[49,4]]},"406":{"position":[[123,8]]},"408":{"position":[[82,4]]},"414":{"position":[[106,7]]},"467":{"position":[[743,5]]},"471":{"position":[[96,5],[143,5],[454,4]]},"473":{"position":[[839,5],[1030,5]]},"483":{"position":[[791,5]]},"493":{"position":[[325,7]]},"505":{"position":[[64,7]]},"513":{"position":[[159,7]]},"521":{"position":[[441,4]]},"553":{"position":[[656,7]]},"577":{"position":[[852,4]]},"644":{"position":[[260,4]]},"650":{"position":[[299,4]]}}}],["send/rec",{"_index":2479,"t":{"616":{"position":[[276,12]]}}}],["sender",{"_index":766,"t":{"94":{"position":[[277,7]]},"96":{"position":[[170,7]]},"117":{"position":[[401,6]]},"119":{"position":[[394,6],[556,6]]},"121":{"position":[[547,8],[976,6]]},"149":{"position":[[232,7]]},"493":{"position":[[273,8]]},"515":{"position":[[426,7]]},"549":{"position":[[1552,6]]},"553":{"position":[[574,6]]},"648":{"position":[[223,6]]}}}],["senderid",{"_index":755,"t":{"90":{"position":[[435,8],[628,9]]}}}],["sendmessag",{"_index":362,"t":{"34":{"position":[[1095,11]]},"36":{"position":[[59,13],[404,11]]}}}],["sens",{"_index":2579,"t":{"625":{"position":[[184,5]]}}}],["sent",{"_index":772,"t":{"96":{"position":[[411,4],[868,6],[933,5],[1192,4]]},"113":{"position":[[300,4]]},"121":{"position":[[3046,4]]},"151":{"position":[[1297,4]]},"200":{"position":[[607,4]]},"352":{"position":[[672,4]]},"354":{"position":[[413,4]]},"515":{"position":[[232,5]]},"519":{"position":[[1265,4]]},"523":{"position":[[221,4],[843,4]]},"553":{"position":[[381,4],[851,4]]}}}],["separ",{"_index":1322,"t":{"234":{"position":[[1284,11]]},"394":{"position":[[55,9]]},"473":{"position":[[530,8]]},"479":{"position":[[45,8]]},"539":{"position":[[97,8]]}}}],["sepolia",{"_index":1093,"t":{"188":{"position":[[57,7],[92,7],[115,7]]},"360":{"position":[[9,7],[103,7],[246,7],[278,7],[320,7],[355,7],[400,7],[437,7]]},"362":{"position":[[125,7]]},"640":{"position":[[473,7]]},"650":{"position":[[95,8]]}}}],["sequenti",{"_index":1031,"t":{"171":{"position":[[234,13]]}}}],["serial",{"_index":422,"t":{"36":{"position":[[85,9]]}}}],["serialis",{"_index":432,"t":{"36":{"position":[[633,9]]},"96":{"position":[[220,9]]},"149":{"position":[[282,9]]},"264":{"position":[[440,13]]}}}],["serialisedmessag",{"_index":771,"t":{"96":{"position":[[263,17]]},"149":{"position":[[325,17],[470,18]]}}}],["serious",{"_index":2116,"t":{"533":{"position":[[45,9]]},"654":{"position":[[17,9]]}}}],["serv",{"_index":82,"t":{"10":{"position":[[492,6]]},"32":{"position":[[28,6]]},"218":{"position":[[310,5],[348,5]]},"234":{"position":[[1338,5]]},"252":{"position":[[684,7]]},"300":{"position":[[30,5],[163,5]]},"306":{"position":[[110,5]]},"310":{"position":[[19,5]]},"312":{"position":[[19,5]]},"336":{"position":[[705,5]]},"344":{"position":[[130,5]]},"352":{"position":[[128,6],[294,6]]},"396":{"position":[[67,7]]},"410":{"position":[[33,6]]}}}],["server",{"_index":638,"t":{"62":{"position":[[1561,6]]},"78":{"position":[[1163,9]]},"210":{"position":[[115,6],[154,6]]},"222":{"position":[[64,7],[141,6],[195,6],[525,7]]},"224":{"position":[[39,6],[71,7],[98,6],[156,6],[171,6],[223,6]]},"226":{"position":[[180,6],[219,6],[314,6]]},"278":{"position":[[408,6],[436,6],[513,8],[662,6],[713,6],[769,7]]},"282":{"position":[[427,6],[541,7]]},"288":{"position":[[94,7]]},"308":{"position":[[162,6],[263,7],[379,7],[786,6],[832,6],[1029,6]]},"314":{"position":[[27,6]]},"318":{"position":[[87,7]]},"346":{"position":[[348,8]]},"467":{"position":[[339,6],[390,6],[427,6],[545,6],[764,7],[778,6],[842,6],[922,6],[1005,6]]},"471":{"position":[[124,7],[136,6],[432,6]]},"473":{"position":[[867,6],[917,6],[1023,6]]},"475":{"position":[[102,6],[172,6]]},"479":{"position":[[127,6],[761,7],[1189,7]]},"483":{"position":[[36,6],[142,7],[192,6],[246,6],[475,6],[587,6],[699,7],[768,7],[874,6],[1063,6],[1135,7]]},"487":{"position":[[81,7],[149,7]]},"493":{"position":[[184,7]]},"589":{"position":[[443,8],[474,8]]},"616":{"position":[[726,6]]}}}],["server'",{"_index":1622,"t":{"314":{"position":[[94,8]]},"473":{"position":[[810,8]]},"479":{"position":[[260,8],[913,8]]},"483":{"position":[[117,8],[314,8],[946,8]]}}}],["server=8.8.4.4",{"_index":1455,"t":{"278":{"position":[[1148,14]]}}}],["server=8.8.8.8",{"_index":1454,"t":{"278":{"position":[[1110,14]]}}}],["server=[dn",{"_index":1450,"t":{"278":{"position":[[645,11]]}}}],["servic",{"_index":1184,"t":{"208":{"position":[[778,7],[852,7],[1021,7]]},"248":{"position":[[873,7],[938,9]]},"324":{"position":[[39,8]]},"334":{"position":[[93,8],[248,7]]},"336":{"position":[[449,7],[600,7]]},"342":{"position":[[10,7],[87,7],[344,7],[414,7],[656,7],[708,8]]},"356":{"position":[[406,8]]},"358":{"position":[[451,8]]},"384":{"position":[[67,7]]},"481":{"position":[[111,7],[199,7]]},"497":{"position":[[207,7]]},"519":{"position":[[881,8]]},"569":{"position":[[176,9]]},"620":{"position":[[1912,9],[2086,9]]},"633":{"position":[[66,8]]}}}],["set",{"_index":29,"t":{"6":{"position":[[55,3]]},"30":{"position":[[7,3]]},"32":{"position":[[79,3],[289,3]]},"54":{"position":[[1618,7],[2740,3]]},"56":{"position":[[1561,7]]},"58":{"position":[[161,3]]},"62":{"position":[[3,3]]},"78":{"position":[[927,3]]},"84":{"position":[[270,3]]},"137":{"position":[[75,7]]},"139":{"position":[[372,3]]},"157":{"position":[[169,3]]},"198":{"position":[[191,7]]},"206":{"position":[[63,4]]},"214":{"position":[[325,3]]},"234":{"position":[[229,8],[270,3],[602,3],[658,3],[735,4],[858,7],[904,7],[1016,8],[1092,3]]},"262":{"position":[[36,3]]},"286":{"position":[[366,4]]},"298":{"position":[[8,3]]},"300":{"position":[[581,3],[812,7]]},"336":{"position":[[632,3]]},"350":{"position":[[16,3]]},"354":{"position":[[1644,3]]},"406":{"position":[[16,3]]},"440":{"position":[[29,8]]},"467":{"position":[[893,3]]},"491":{"position":[[136,9]]},"519":{"position":[[1025,3],[1143,3],[1625,4],[1778,3]]},"549":{"position":[[166,4]]},"577":{"position":[[888,7]]},"602":{"position":[[300,3]]},"614":{"position":[[25,3]]},"620":{"position":[[1147,4],[2565,3],[2926,3]]},"631":{"position":[[751,3]]}}}],["setinputmessag",{"_index":340,"t":{"34":{"position":[[378,16]]},"36":{"position":[[851,20]]}}}],["setinputmessage(e.target.valu",{"_index":347,"t":{"34":{"position":[[551,32]]}}}],["setmessag",{"_index":341,"t":{"34":{"position":[[428,12]]}}}],["setmessages(allmessages.map((wakumessag",{"_index":454,"t":{"40":{"position":[[652,41]]}}}],["setmessages(filtermessages.map((wakumessag",{"_index":444,"t":{"38":{"position":[[429,44]]}}}],["setup",{"_index":637,"t":{"62":{"position":[[1522,5]]},"70":{"position":[[119,5]]},"96":{"position":[[352,5]]},"184":{"position":[[47,5]]},"547":{"position":[[983,5]]}}}],["sever",{"_index":1410,"t":{"266":{"position":[[94,7]]},"454":{"position":[[0,7]]},"545":{"position":[[447,8]]},"579":{"position":[[581,9]]},"637":{"position":[[87,7]]}}}],["sh",{"_index":940,"t":{"127":{"position":[[303,2],[450,2],[598,2]]}}}],["shadow",{"_index":2197,"t":{"551":{"position":[[6,6],[871,6]]},"553":{"position":[[2212,6],[2334,6]]}}}],["shall",{"_index":2287,"t":{"561":{"position":[[1264,5]]},"571":{"position":[[4,5]]},"577":{"position":[[841,5]]}}}],["shape",{"_index":1642,"t":{"324":{"position":[[77,7]]}}}],["shard",{"_index":975,"t":{"139":{"position":[[670,7],[786,8]]},"141":{"position":[[78,9],[115,8],[216,7]]},"145":{"position":[[801,7]]},"151":{"position":[[960,7]]},"204":{"position":[[128,5],[160,6]]},"212":{"position":[[1425,5],[1460,5],[1466,5],[1518,6],[1546,6],[1599,6]]},"260":{"position":[[95,5],[401,8],[526,8],[852,8],[987,8],[1232,8]]},"356":{"position":[[317,8],[366,5]]},"376":{"position":[[248,7]]},"438":{"position":[[102,8],[116,8]]},"440":{"position":[[125,8],[142,9]]},"442":{"position":[[469,7]]},"444":{"position":[[116,7],[262,7]]},"448":{"position":[[72,8],[89,8],[281,9],[404,7],[455,9]]},"450":{"position":[[259,8],[276,8],[378,9]]},"454":{"position":[[902,7]]},"517":{"position":[[75,5]]},"519":{"position":[[418,6]]},"523":{"position":[[1230,7],[1256,6],[1277,6]]},"614":{"position":[[76,5],[304,6]]},"616":{"position":[[151,6],[389,7],[462,5],[1428,6]]},"620":{"position":[[114,6],[2801,6]]}}}],["shard:pubkey",{"_index":1152,"t":{"204":{"position":[[222,13]]}}}],["shard:public_key",{"_index":1386,"t":{"260":{"position":[[187,16]]}}}],["shard=\"4:your_public_key",{"_index":1388,"t":{"260":{"position":[[361,25]]}}}],["shardinfo",{"_index":1835,"t":{"444":{"position":[[89,10]]},"446":{"position":[[89,10]]},"450":{"position":[[125,9],[547,10]]},"452":{"position":[[168,10]]},"454":{"position":[[443,9]]}}}],["shardinfotopubsubtop",{"_index":1846,"t":{"454":{"position":[[266,23]]}}}],["shardingparam",{"_index":1841,"t":{"452":{"position":[[0,14]]}}}],["share",{"_index":573,"t":{"54":{"position":[[2654,7]]},"86":{"position":[[520,6]]},"117":{"position":[[36,6],[1388,6]]},"119":{"position":[[1421,5]]},"145":{"position":[[1096,6]]},"192":{"position":[[415,6]]},"268":{"position":[[44,5]]},"270":{"position":[[209,5]]},"356":{"position":[[22,6]]},"358":{"position":[[127,6]]},"362":{"position":[[233,6],[365,6]]},"459":{"position":[[65,8]]},"461":{"position":[[15,7],[269,5]]},"465":{"position":[[145,7]]},"469":{"position":[[98,7]]},"495":{"position":[[43,5]]},"637":{"position":[[1680,6]]},"660":{"position":[[1148,8]]}}}],["shift",{"_index":1170,"t":{"208":{"position":[[404,5],[418,5]]}}}],["shift=1",{"_index":1461,"t":{"282":{"position":[[725,7]]}}}],["short",{"_index":695,"t":{"78":{"position":[[649,6]]},"350":{"position":[[369,5]]},"354":{"position":[[992,6]]},"513":{"position":[[79,5]]},"658":{"position":[[343,6]]}}}],["shouldn't",{"_index":2556,"t":{"620":{"position":[[1928,9]]},"646":{"position":[[363,9]]}}}],["show",{"_index":27,"t":{"4":{"position":[[135,4]]},"88":{"position":[[390,4],[610,4]]},"96":{"position":[[795,4],[939,4],[1121,4]]},"553":{"position":[[21,5],[79,7],[429,4]]},"618":{"position":[[21,5]]},"633":{"position":[[759,5]]},"635":{"position":[[325,5],[1213,5]]},"637":{"position":[[161,5],[1368,5]]}}}],["shown",{"_index":2210,"t":{"551":{"position":[[599,5]]},"553":{"position":[[324,6]]},"620":{"position":[[2099,5]]}}}],["sia",{"_index":1906,"t":{"465":{"position":[[66,4]]}}}],["side",{"_index":805,"t":{"103":{"position":[[32,4]]},"230":{"position":[[97,6],[226,5]]},"467":{"position":[[434,4],[507,4]]}}}],["sign",{"_index":240,"t":{"24":{"position":[[610,4],[708,4]]},"54":{"position":[[941,4],[1111,4]]},"113":{"position":[[104,4]]},"121":{"position":[[8,7],[181,7],[478,4],[863,7],[912,7],[1139,5],[1368,7],[1439,5],[1663,7],[2396,7],[2547,5],[3035,6],[3218,6],[3280,6]]},"123":{"position":[[59,7],[1002,6]]},"278":{"position":[[355,6]]},"430":{"position":[[161,7]]}}}],["signatur",{"_index":857,"t":{"121":{"position":[[87,9],[2020,9],[2725,9],[2794,9],[2826,9],[2906,9]]},"332":{"position":[[122,11],[266,11]]},"660":{"position":[[533,9],[562,9],[593,9],[629,10]]}}}],["signaturepublickey",{"_index":877,"t":{"121":{"position":[[2049,20],[2859,18],[2947,18]]}}}],["signifi",{"_index":1703,"t":{"342":{"position":[[18,9]]},"515":{"position":[[364,10]]}}}],["signific",{"_index":212,"t":{"22":{"position":[[463,11]]},"551":{"position":[[319,11]]}}}],["significantli",{"_index":1078,"t":{"182":{"position":[[569,13]]}}}],["sigprivkey",{"_index":863,"t":{"121":{"position":[[406,10],[1320,11],[1615,11],[2644,11]]}}}],["similar",{"_index":1954,"t":{"479":{"position":[[648,8]]},"519":{"position":[[1977,7]]},"527":{"position":[[373,7]]},"553":{"position":[[1873,7]]},"559":{"position":[[324,7]]},"635":{"position":[[1629,7]]},"637":{"position":[[1883,7]]}}}],["similarli",{"_index":1678,"t":{"334":{"position":[[468,10]]}}}],["simpl",{"_index":898,"t":{"123":{"position":[[339,6]]},"184":{"position":[[161,6]]},"479":{"position":[[753,7]]}}}],["simpler",{"_index":795,"t":{"101":{"position":[[70,7]]},"479":{"position":[[1006,7]]}}}],["simplest",{"_index":578,"t":{"56":{"position":[[90,8]]},"248":{"position":[[199,8]]},"457":{"position":[[752,8]]},"473":{"position":[[248,8]]}}}],["simpli",{"_index":763,"t":{"94":{"position":[[67,6]]},"625":{"position":[[0,6]]}}}],["simplic",{"_index":813,"t":{"105":{"position":[[134,10]]}}}],["simplifi",{"_index":1793,"t":{"370":{"position":[[41,10]]},"440":{"position":[[63,11]]},"473":{"position":[[355,10],[607,10]]},"475":{"position":[[150,10]]}}}],["simul",{"_index":1999,"t":{"491":{"position":[[126,9]]},"545":{"position":[[585,10]]},"547":{"position":[[947,10]]},"549":{"position":[[2204,12]]},"551":{"position":[[13,10],[64,8],[297,10],[402,10],[738,10],[927,8]]},"553":{"position":[[66,12],[393,11],[1709,11],[2270,9]]},"555":{"position":[[31,11]]},"589":{"position":[[173,10]]},"594":{"position":[[123,8]]},"600":{"position":[[158,9],[270,10],[286,9]]},"631":{"position":[[346,8]]},"640":{"position":[[241,11],[264,10]]},"642":{"position":[[323,11]]},"644":{"position":[[100,10]]},"648":{"position":[[339,11]]},"652":{"position":[[5,10]]}}}],["simultan",{"_index":654,"t":{"66":{"position":[[70,15]]},"274":{"position":[[195,15]]},"631":{"position":[[170,14],[788,15]]}}}],["singl",{"_index":834,"t":{"117":{"position":[[28,7]]},"270":{"position":[[394,6]]},"272":{"position":[[27,6],[703,6]]},"519":{"position":[[411,6]]},"600":{"position":[[194,6]]},"616":{"position":[[455,6]]},"623":{"position":[[291,6]]},"635":{"position":[[3229,6]]},"637":{"position":[[65,6]]}}}],["site",{"_index":2147,"t":{"539":{"position":[[86,5]]},"561":{"position":[[607,5]]}}}],["site.thes",{"_index":2281,"t":{"561":{"position":[[628,10]]}}}],["sixti",{"_index":2365,"t":{"577":{"position":[[1062,5]]}}}],["size",{"_index":204,"t":{"22":{"position":[[378,5]]},"54":{"position":[[415,4]]},"214":{"position":[[286,4]]},"300":{"position":[[503,4]]},"475":{"position":[[356,4]]},"519":{"position":[[1288,5]]},"523":{"position":[[662,4],[734,4],[1125,4]]},"545":{"position":[[85,6],[270,4],[493,5]]},"549":{"position":[[1453,4],[1647,6]]},"553":{"position":[[175,6],[791,6],[1250,4]]},"582":{"position":[[187,4]]},"584":{"position":[[80,4]]},"589":{"position":[[234,5]]},"591":{"position":[[235,4]]},"644":{"position":[[62,4]]},"646":{"position":[[180,5]]}}}],["size:10gb",{"_index":1542,"t":{"300":{"position":[[570,10]]}}}],["size:512mb",{"_index":1541,"t":{"300":{"position":[[556,10]]}}}],["size:{new",{"_index":373,"t":{"34":{"position":[[1301,10]]}}}],["spawn",{"_index":2613,"t":{"635":{"position":[[564,5]]}}}],["special",{"_index":552,"t":{"54":{"position":[[1213,11]]},"78":{"position":[[919,7]]},"569":{"position":[[193,8]]}}}],["specialis",{"_index":1725,"t":{"344":{"position":[[136,11]]}}}],["specif",{"_index":455,"t":{"40":{"position":[[849,8],[953,8]]},"74":{"position":[[154,8]]},"117":{"position":[[1417,8]]},"125":{"position":[[124,8]]},"129":{"position":[[208,8]]},"141":{"position":[[27,8]]},"143":{"position":[[345,8]]},"167":{"position":[[383,8]]},"234":{"position":[[91,8]]},"262":{"position":[[230,8],[291,13]]},"264":{"position":[[351,8]]},"270":{"position":[[124,8]]},"284":{"position":[[709,8],[762,8]]},"286":{"position":[[426,13]]},"346":{"position":[[263,8]]},"354":{"position":[[913,8]]},"368":{"position":[[140,8]]},"376":{"position":[[32,13]]},"378":{"position":[[74,8]]},"428":{"position":[[135,8]]},"509":{"position":[[63,8]]},"515":{"position":[[323,8]]},"529":{"position":[[144,8]]},"535":{"position":[[429,8]]},"549":{"position":[[2085,8],[2161,8]]},"563":{"position":[[1290,9]]},"579":{"position":[[828,8]]},"589":{"position":[[613,8]]},"596":{"position":[[176,8]]},"604":{"position":[[364,8]]},"606":{"position":[[204,8]]},"616":{"position":[[1465,8]]}}}],["specifi",{"_index":459,"t":{"40":{"position":[[1155,9]]},"143":{"position":[[207,7]]},"145":{"position":[[395,7]]},"155":{"position":[[95,7]]},"159":{"position":[[241,7],[349,7]]},"161":{"position":[[60,10]]},"167":{"position":[[222,7],[591,9]]},"173":{"position":[[242,7]]},"175":{"position":[[213,7]]},"178":{"position":[[25,9]]},"180":{"position":[[18,9]]},"182":{"position":[[22,9]]},"206":{"position":[[196,9]]},"208":{"position":[[452,7]]},"222":{"position":[[397,9],[453,7]]},"314":{"position":[[185,10]]},"396":{"position":[[210,9]]},"434":{"position":[[16,9]]},"450":{"position":[[392,7]]},"471":{"position":[[232,9]]},"515":{"position":[[13,9],[454,10]]},"614":{"position":[[222,7]]}}}],["speed",{"_index":2214,"t":{"551":{"position":[[644,6]]},"620":{"position":[[2264,5],[2330,5]]}}}],["speedtest",{"_index":2503,"t":{"618":{"position":[[349,9]]}}}],["spend",{"_index":1802,"t":{"388":{"position":[[39,5]]},"644":{"position":[[292,5]]}}}],["split",{"_index":1875,"t":{"459":{"position":[[7,5]]},"471":{"position":[[202,5]]},"479":{"position":[[1019,9]]}}}],["spread",{"_index":2663,"t":{"637":{"position":[[1639,6]]}}}],["sqlalchemi",{"_index":1544,"t":{"300":{"position":[[780,10]]}}}],["sqlite",{"_index":1245,"t":{"214":{"position":[[527,6]]},"623":{"position":[[219,6],[326,6]]},"631":{"position":[[491,6],[573,6],[866,6],[1425,6]]},"633":{"position":[[189,7],[215,6],[721,6]]},"635":{"position":[[762,6],[1134,6],[1227,6],[1460,6],[1688,6],[1765,6],[2991,6],[3411,6]]}}}],["sqlite://store.sqlite3",{"_index":1243,"t":{"214":{"position":[[369,22]]},"300":{"position":[[963,23]]}}}],["src/app.css",{"_index":389,"t":{"34":{"position":[[1943,11]]}}}],["src/app.jsx",{"_index":319,"t":{"32":{"position":[[669,11]]},"34":{"position":[[132,11]]},"36":{"position":[[196,11]]},"38":{"position":[[182,11]]},"40":{"position":[[211,11]]}}}],["src/main.jsx",{"_index":308,"t":{"32":{"position":[[224,12]]}}}],["src=\"https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js\">{message.message}/ node.dial(multiaddr)); await Promise.all(promises); tip For local development using a nwaku node, use a ws address instead of wss. Remember that this setup is functional only when your web server is running locally. You can check how to get multi address of your locally run node in Find node address.","s":"Configure static peers","u":"/build/javascript/configure-discovery","h":"#configure-static-peers","p":1},{"i":8,"t":"To bootstrap a node using DNS Discovery, first install the @waku/dns-discovery package: NPM Yarn npm install @waku/dns-discovery yarn add @waku/dns-discovery Then, use the wakuDnsDiscovery() function to provide a list of URLs for DNS node list in the format enrtree://@: import { createLightNode } from \"@waku/sdk\"; import { wakuDnsDiscovery } from \"@waku/dns-discovery\"; // Define DNS node list const enrTree = \"enrtree://[PUBLIC KEY]@[DOMAIN NAME]\"; // Define node requirements const NODE_REQUIREMENTS = { store: 3, lightPush: 3, filter: 3, }; // Bootstrap node using DNS Discovery const node = await createLightNode({ libp2p: { peerDiscovery: [wakuDnsDiscovery([enrTree], NODE_REQUIREMENTS)], }, }); For example, consider a node that uses the waku v2.prod and waku v2.test ENR trees for DNS Discovery: import { enrTree } from \"@waku/dns-discovery\"; // Bootstrap node using DNS Discovery const node = await createLightNode({ libp2p: { peerDiscovery: [ wakuDnsDiscovery([enrTree[\"PROD\"], enrTree[\"TEST\"]], NODE_REQUIREMENTS), ], }, });","s":"Configure DNS discovery","u":"/build/javascript/configure-discovery","h":"#configure-dns-discovery","p":1},{"i":10,"t":"You can also bootstrap your node using DNS Discovery and Static Peers simultaneously: import { createLightNode } from \"@waku/sdk\"; import { bootstrap } from \"@libp2p/bootstrap\"; import { enrTree, wakuDnsDiscovery } from \"@waku/dns-discovery\"; // Define the list of static peers to bootstrap const peers = [ \"/ip4/0.0.0.0/tcp/60002/ws/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H\", \"/ip4/0.0.0.0/tcp/60003/ws/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ\", ]; // Define node requirements const NODE_REQUIREMENTS = { store: 3, lightPush: 3, filter: 3, }; // Bootstrap node using DNS Discovery and static peers const node = await createLightNode({ libp2p: { bootstrapPeers: peers, peerDiscovery: [wakuDnsDiscovery([enrTree[\"PROD\"]], NODE_REQUIREMENTS)], }, });","s":"Configure DNS discovery and static peers","u":"/build/javascript/configure-discovery","h":"#configure-dns-discovery-and-static-peers","p":1},{"i":12,"t":"You can retrieve the array of peers connected to a node using the libp2p.getPeers() function within the @waku/sdk package: import { createLightNode } from \"@waku/sdk\"; const node = await createLightNode({ defaultBootstrap: true }); await node.waitForPeers(); // Retrieve array of peers connected to the node console.log(node.libp2p.getPeers());","s":"Retrieving connected peers","u":"/build/javascript/configure-discovery","h":"#retrieving-connected-peers","p":1},{"i":14,"t":"This guide provides detailed steps to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages using Waku message payload encryption methods. info Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to freely use custom protocols or Waku message payload encryption methods.","s":"Encrypt, Decrypt, and Sign Your Messages","u":"/build/javascript/message-encryption","h":"","p":13},{"i":16,"t":"Install the required packages for integrating @waku/message-encryption using your preferred package manager: NPM Yarn npm install @waku/message-encryption @waku/utils yarn add @waku/message-encryption @waku/utils","s":"Installation","u":"/build/javascript/message-encryption","h":"#installation","p":13},{"i":18,"t":"Symmetric encryption uses a single, shared key for message encryption and decryption. Use the generateSymmetricKey() function to generate a random symmetric key: import { generateSymmetricKey } from \"@waku/message-encryption\"; // Generate a random symmetric key const symmetricKey = generateSymmetricKey(); To send encrypted messages, create a Symmetric message encoder and send the message as usual: Sender client import { createEncoder } from \"@waku/message-encryption/symmetric\"; // Create a symmetric message encoder const encoder = createEncoder({ contentTopic: contentTopic, // message content topic symKey: symmetricKey, // symmetric key for encrypting messages }); // Send the message using Light Push await node.lightPush.send(encoder, { payload }); To decrypt the messages you receive, create a symmetric message decoder and process the messages as usual: Receiver client import { createDecoder } from \"@waku/message-encryption/symmetric\"; // Create a symmetric message decoder const decoder = createDecoder(contentTopic, symmetricKey); // Receive messages from a Filter subscription await subscription.subscribe([decoder], callback); // Retrieve messages from Store peers await node.store.queryWithOrderedCallback([decoder], callback); tip The symmetric key exchange between users can happen through an out-of-band method. For example, where the key is embedded within the URL shared by a user to access a specific resource.","s":"Symmetric encryption","u":"/build/javascript/message-encryption","h":"#symmetric-encryption","p":13},{"i":20,"t":"ECIES encryption uses a public key for encryption and a private key for decryption. Use the generatePrivateKey() function to generate a random ECDSA private key: import { generatePrivateKey, getPublicKey } from \"@waku/message-encryption\"; // Generate a random ECDSA private key, keep secure const privateKey = generatePrivateKey(); // Generate a public key from the private key, provide to the sender const publicKey = getPublicKey(privateKey); To send encrypted messages, create an ECIES message encoder with the public key and send the message as usual: Sender client import { createEncoder } from \"@waku/message-encryption/ecies\"; // Create an ECIES message encoder const encoder = createEncoder({ contentTopic: contentTopic, // message content topic publicKey: publicKey, // ECIES public key for encrypting messages }); // Send the message using Light Push await node.lightPush.send(encoder, { payload }); To decrypt the messages you receive, create an ECIES message decoder with the private key and process the messages as usual: Receiver client import { createDecoder } from \"@waku/message-encryption/ecies\"; // Create an ECIES message decoder const decoder = createDecoder(contentTopic, privateKey); // Receive messages from a Filter subscription await subscription.subscribe([decoder], callback); // Retrieve messages from Store peers await node.store.queryWithOrderedCallback([decoder], callback); tip Users can share their public key through broadcasting or out-of-band methods, such as embedding it in a URL or sending an unencrypted message on another content topic for others to retrieve.","s":"ECIES encryption","u":"/build/javascript/message-encryption","h":"#ecies-encryption","p":13},{"i":22,"t":"Message signing helps in proving the authenticity of received messages. By attaching a signature to a message, you can verify its origin and integrity with absolute certainty. info Signing messages is only possible when encrypted, but if your application does not require encryption, you can generate a symmetric key through hardcoded or deterministic methods using information available to all users. The sigPrivKey parameter allows the Symmetric and ECIES message encoders to sign the message before encryption using an ECDSA private key: Alice (sender) client import { generatePrivateKey, getPublicKey } from \"@waku/message-encryption\"; import { createEncoder as createSymmetricEncoder } from \"@waku/message-encryption/symmetric\"; import { createEncoder as createECIESEncoder } from \"@waku/message-encryption/ecies\"; // Generate a random ECDSA private key for signing messages // ECIES encryption and message signing both use ECDSA keys // For this example, we'll call the sender of the message Alice const alicePrivateKey = generatePrivateKey(); const alicePublicKey = getPublicKey(alicePrivateKey); // Create a symmetric encoder that signs messages const symmetricEncoder = createSymmetricEncoder({ contentTopic: contentTopic, // message content topic symKey: symmetricKey, // symmetric key for encrypting messages sigPrivKey: alicePrivateKey, // private key for signing messages before encryption }); // Create an ECIES encoder that signs messages const ECIESEncoder = createECIESEncoder({ contentTopic: contentTopic, // message content topic publicKey: publicKey, // ECIES public key for encrypting messages sigPrivKey: alicePrivateKey, // private key for signing messages before encryption }); // Send and receive your messages as usual with Light Push and Filter await subscription.subscribe([symmetricEncoder], callback); await node.lightPush.send(symmetricEncoder, { payload }); await subscription.subscribe([ECIESEncoder], callback); await node.lightPush.send(ECIESEncoder, { payload }); You can extract the signature and its public key (signaturePublicKey) from the DecodedMessage and compare it with the expected public key or use the verifySignature() function to verify the message origin: Bob (receiver) client import { generatePrivateKey } from \"@waku/message-encryption\"; import { createEncoder } from \"@waku/message-encryption/symmetric\"; // Generate a random private key for signing messages // For this example, we'll call the receiver of the message Bob const bobPrivateKey = generatePrivateKey(); // Create an encoder that signs messages const encoder = createEncoder({ contentTopic: contentTopic, symKey: symmetricKey, sigPrivKey: bobPrivateKey, }); // Modify the callback function to verify message signature const callback = (wakuMessage) => { // Extract the message signature and public key of the signature // You can compare the signaturePublicKey with Alice public key const signature = wakuMessage.signature; const signaturePublicKey = wakuMessage.signaturePublicKey; // Verify the message was actually signed and sent by Alice // Alice's public key can be gotten from broadcasting or out-of-band methods if (wakuMessage.verifySignature(alicePublicKey)) { console.log(\"This message was signed by Alice\"); } else { console.log(\"This message was NOT signed by Alice\"); } }; await subscription.subscribe([encoder], callback);","s":"Signing encrypted messages","u":"/build/javascript/message-encryption","h":"#signing-encrypted-messages","p":13},{"i":24,"t":"We used randomly generated keys for encryption and message signing in the provided examples, but real-world applications require consistent keys among client restarts. Have a look at the Key Pair Handling example, which demonstrates the secure storage and retrieval of key information from local storage using Subtle Crypto. If you need a simple way to store your keys in hexadecimal format across your application, you can use the @waku/utils package: import { bytesToHex, hexToBytes } from \"@waku/utils/bytes\"; // Generate random symmetric and private keys const symmetricKey = generateSymmetricKey(); const privateKey = generatePrivateKey(); // Store the keys in hexadecimal format const symmetricKeyHex = bytesToHex(symmetricKey); const privateKeyHex = bytesToHex(privateKey); // Restore the keys from hexadecimal format const restoredSymmetricKey = hexToBytes(symmetricKeyHex); const restoredPrivateKey = hexToBytes(privateKeyHex); Congratulations! You have successfully encrypted, decrypted, and signed your messages using Symmetric and ECIES encryption methods. Have a look at the eth-pm example for a working demo.","s":"Storing encryption keys","u":"/build/javascript/message-encryption","h":"#storing-encryption-keys","p":13},{"i":26,"t":"This guide provides detailed steps to enable and use debug logs to troubleshoot your Waku DApp, whether in a NodeJS or browser environment and check your WebSocket connections in nwaku.","s":"Debug Your Waku DApp and WebSocket","u":"/build/javascript/debug-waku-dapp","h":"","p":25},{"i":28,"t":"When resolving issues in your Waku DApp, debug logs can be helpful. The @waku/sdk and libp2p packages use the debug tool to handle and show logs that help you debug effectively.","s":"Enabling debug logs","u":"/build/javascript/debug-waku-dapp","h":"#enabling-debug-logs","p":25},{"i":30,"t":"To enable debug logs for @waku/sdk on NodeJS, you must set the DEBUG environment variable. To only enable debug logs for @waku/sdk: export DEBUG=waku* To enable debug logs for both @waku/sdk and libp2p: export DEBUG=waku*,libp2p* To enable debug logs for all components: export DEBUG=*","s":"NodeJS environments","u":"/build/javascript/debug-waku-dapp","h":"#nodejs-environments","p":25},{"i":32,"t":"To view debug logs in your browser's console, modify the local storage and add the debug key. Here are guides for various modern browsers: Google Chrome Firefox JavaScript KEY VALUE DESCRIPTION debug waku* Enables @waku/sdk debug logs debug waku*,libp2p* Enables @waku/sdk and libp2p debug logs debug * Enables all debug logs","s":"Browser environments","u":"/build/javascript/debug-waku-dapp","h":"#browser-environments","p":25},{"i":34,"t":"Nwaku provides native support for WebSocket (ws) and WebSocket Secure (wss) protocols. These are the only transports supported for connecting to the Waku Network via browsers. It's important to note that browsers impose certain limitations on WebSocket usage: Secure Context Requirement: Insecure subroutines are prohibited in secure contexts. On an https:// webpage, only wss connections are permitted, while ws connections are not allowed. This restriction does not apply if the webpage is served locally, like on localhost or 127.0.0.1. Certificate Validation: Certificate validation rules are consistent for https and wss connections. Certificates must not be expired, issued by a recognized Certificate Authority (CA), and match the domain name, among other criteria. User Feedback on Errors: Web browsers do not display errors related to subroutines to the user. If a WebSocket connection encounters an issue, users won't be alerted directly; you'll need to check the browser's console for error details. If you encounter difficulties when connecting to a remote node using wss, follow these steps:","s":"Checking WebSocket setup","u":"/build/javascript/debug-waku-dapp","h":"#checking-websocket-setup","p":25},{"i":36,"t":"Attempt to connect using websocat, a tool for WebSocket interactions. Test the WebSocket port using the command: websocat -v wss://[WEBSOCKET HOST]:[WEBSOCKET PORT] For example, consider a nwaku node with the multiaddr as /dns4/nwakunode.com/tcp/1234/wss/p2p/16...: $ websocat -v wss://nwakunode.com:1234 # ... [INFO websocat::ws_client_peer] Connected to ws The connection works if the [INFO websocat::ws_client_peer] Connected to ws log entry appears. If not, check that the certificate is valid","s":"Try Websocat for connection","u":"/build/javascript/debug-waku-dapp","h":"#try-websocat-for-connection","p":25},{"i":38,"t":"Verify the certificate's validity by passing the -k or --insecure flag to handle invalid certificates in websocat: websocat -v -k wss://nwakunode.com:1234 If this works, the certificate's invalidity is the problem, and you should investigate the cause of the error if not, check if the WebSocket port is accessible.","s":"Check certificate validity","u":"/build/javascript/debug-waku-dapp","h":"#check-certificate-validity","p":25},{"i":40,"t":"Use telnet or another networking tool to verify if the WebSocket port is open and accessible. For example, if the multiaddr is /dns4/nwakunode.com/tcp/1234/wss/p2p/16..., use the command: $ telnet nwakunode.com 1234 Trying 123.123.123.123... Connected to nwakunode.com. # ... If the connection succeeds, there might be an issue with nwaku. Consider seeking support on the Waku Discord or raise an issue. If the connection fails, ensure that the WebSocket port is open.","s":"Check WebSocket port accessibility","u":"/build/javascript/debug-waku-dapp","h":"#check-websocket-port-accessibility","p":25},{"i":42,"t":"This guide provides detailed steps to manage Filter subscriptions and handle node disconnections in your application. Have a look at the Send and Receive Messages Using Light Push and Filter guide for using the Light Push and Filter protocols.","s":"Manage Your Filter Subscriptions","u":"/build/javascript/manage-filter","h":"","p":41},{"i":44,"t":"Occasionally, your Filter subscriptions might disconnect from the Waku Network, resulting in messages not being received by your application. To manage your subscriptions, periodically ping peers to check for an active connection. The error message \"peer has no subscriptions\" indicates a failed ping due to disconnection. You can stop the pings if the disconnection/unsubscription is deliberate.","s":"Overview","u":"/build/javascript/manage-filter","h":"#overview","p":41},{"i":46,"t":"The @waku/sdk package provides a Filter.ping() function to ping subscriptions and check for an active connection. To begin, create a Filter subscription: // Create a Filter subscription const { error, subscription } = await node.filter.createSubscription({ contentTopics: [contentTopic] }); if (error) { // handle errors if happens throw Error(error); } // Subscribe to content topics and process new messages await subscription.subscribe([decoder], callback); Next, create a function to ping and reinitiate the subscription: const pingAndReinitiateSubscription = async () => { try { // Ping the subscription await subscription.ping(); } catch (error) { if ( // Check if the error message includes \"peer has no subscriptions\" error instanceof Error && error.message.includes(\"peer has no subscriptions\") ) { // Reinitiate the subscription if the ping fails await subscription.subscribe([decoder], callback); } else { throw error; } } }; // Periodically ping the subscription await pingAndReinitiateSubscription(); info Pings will fail when there are temporary network degradations or reachability issues. This does not mean that the underlying connection has been closed. Congratulations! You have successfully managed your Filter subscriptions to handle node disconnections in your application.","s":"Pinging filter subscriptions","u":"/build/javascript/manage-filter","h":"#pinging-filter-subscriptions","p":41},{"i":48,"t":"caution Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future. The JavaScript Waku SDK (@waku/sdk) provides a TypeScript implementation of the Waku protocol designed for web browser environments. Developers can seamlessly integrate Waku functionalities into web applications, enabling efficient communication and collaboration among users using the @waku/sdk package.","s":"JavaScript Waku SDK","u":"/build/javascript/","h":"","p":47},{"i":51,"t":"Install the @waku/sdk package using your preferred package manager: NPM Yarn npm install @waku/sdk yarn add @waku/sdk You can also use the @waku/sdk package via a CDN without installing it on your system: import * as waku from \"https://unpkg.com/@waku/sdk@latest/bundle/index.js\";","s":"Installation","u":"/build/javascript/","h":"#installation","p":47},{"i":53,"t":"We recommend creating a message structure for your application using Protocol Buffers for the following reasons: Consistency: Ensures uniform message format for easy parsing and processing. Interoperability: Facilitates effective communication between different parts of your application. Compatibility: Allows smooth communication between older and newer app versions. Payload Size: Minimizes payload overhead, especially for byte arrays, unlike JSON which adds significant overhead. To get started, install the protobufjs package using your preferred package manager: NPM Yarn npm install protobufjs yarn add protobufjs You can also use the protobufjs package via a CDN without installing it on your system: // Import the CDN import \"https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js\"; ","s":"Message structure","u":"/build/javascript/","h":"#message-structure","p":47},{"i":55,"t":"Have a look at the quick start guide and comprehensive tutorials to learn how to build applications using @waku/sdk: Guide Description Send and Receive Messages in a Reliable Channel Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box. Send and Receive Messages Using Light Push and Filter Learn how to send and receive messages on light nodes using the Light Push and Filter protocols Retrieve Messages Using Store Protocol Learn how to retrieve and filter historical messages on light nodes using the Store protocol Encrypt, Decrypt, and Sign Your Messages Learn how to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages Build React DApps Using @waku/react Learn how to use the @waku/react package seamlessly integrate @waku/sdk into a React application Scaffold DApps Using @waku/create-app Learn how to use the @waku/create-app package to bootstrap your next @waku/sdk project from various example templates Bootstrap Nodes and Discover Peers Learn how to bootstrap your node using Static Peers and discover peers using DNS Discovery Run @waku/sdk in a NodeJS Application Learn our suggested approach for using the @waku/sdk package within a NodeJS application Debug Your Waku DApp and WebSocket Learn how to troubleshoot your Waku DApp using debug logs and check WebSocket connections in nwaku Manage Your Filter Subscriptions Learn how to manage filter subscriptions and handle node disconnections in your application tip Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.","s":"Getting started","u":"/build/javascript/","h":"#getting-started","p":47},{"i":57,"t":"To engage in general discussions, seek assistance, or stay updated with the latest news, visit the #support and #js-waku-contribute channels on the Waku Discord. If you discover bugs or want to suggest new features, do not hesitate to open an issue in the js-waku repository. Your feedback and contributions are highly valued and will help improve the @waku/sdk package.","s":"Get help and report issues","u":"/build/javascript/","h":"#get-help-and-report-issues","p":47},{"i":59,"t":"How do I install the @waku/sdk package in my project? You can add the JavaScript SDK to your project using NPM, Yarn, or a CDN. Check out the installation guide to get started. Why should I use Protocol Buffers for my application's message structure when using Waku? Protocol Buffers ensure consistent formatting, interoperability, and backward compatibility for your application's messages, with a smaller payload size than JSON. Check out the installation guide and Protobuf documentation to learn more. What are the steps to retrieve historical messages on Waku? Check out the Retrieve Messages Using Store Protocol guide to learn how to retrieve and filter historical messages using the Store protocol. How can I prevent Store peers from storing my messages? When creating your message encoder, you can configure the ephemeral option to prevent Store peers from keeping your messages on the Waku Network. How can I encrypt, decrypt, and sign messages in my Waku application? You can encrypt and decrypt your messages using symmetric, ECIES, and noise encryption methods. Check out the Encrypt, Decrypt, and Sign Your Messages guide to get started. How do I integrate Waku into a React application? Waku has a specialized SDK designed for building React applications. Check out the Build React DApps Using @waku/react guide for instructions on installation and usage. How can I bootstrap and discover peers in the Waku Network for browser nodes? The JavaScript SDK has a default bootstrap method that can be configured with Static Peers and DNS Discovery. Check out the Bootstrap Nodes and Discover Peers guide for setting up peer discovery for your node. How can I integrate Waku into a NodeJS application? Though the JavaScript SDK isn't directly usable in NodeJS due to certain limitations, we recommend running nwaku in a Docker container and consuming its REST API in a NodeJS application. How can I debug my Waku DApp and check WebSocket connections? Check out the Debug Your Waku DApp and WebSocket guide to discover how to use debug logs to troubleshoot your Waku DApp and resolve connection issues with nwaku WebSockets. How can I manage unexpected disconnections of my Filter subscription from Waku? We recommend regularly pinging peers to check for an active connection and reinitiating the subscription when it disconnects. Check out the Manage Your Filter Subscriptions guide for a detailed explanation and step-by-step instructions. How can I send images and videos on the Waku Network? While it's possible to transmit media such as images as bytes on Waku, we recommend uploading your media to a CDN or a file system like IPFS and then sharing the corresponding URL via Waku. How can I connect to my own node? To manually set your own node as a starting point use Configure static peers.","s":"JavaScript SDK FAQ","u":"/build/javascript/faq","h":"","p":58},{"i":61,"t":"This guide provides detailed steps to start using the @waku/sdk package by setting up a Light Node to send messages using the Light Push protocol, and receive messages using the Filter protocol. Have a look at the installation guide for steps on adding @waku/sdk to your project.","s":"Send and Receive Messages Using Light Push and Filter","u":"/build/javascript/light-send-receive","h":"","p":60},{"i":63,"t":"Use the createLightNode() function to create a Light Node and interact with the Waku Network: import { createLightNode } from \"@waku/sdk\"; // Create and start a Light Node const node = await createLightNode({ defaultBootstrap: true }); await node.start(); // Use the stop() function to stop a running node // await node.stop(); info When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes. A node needs to know how to route messages. By default, it will use The Waku Network configuration ({ clusterId: 1, shards: [0,1,2,3,4,5,6,7] }). For most applications, it's recommended to use autosharding: // Create node with auto sharding (recommended) const node = await createLightNode({ defaultBootstrap: true, networkConfig: { clusterId: 1, contentTopics: [\"/my-app/1/notifications/proto\"], }, });","s":"Create a light node","u":"/build/javascript/light-send-receive","h":"#create-a-light-node","p":60},{"i":65,"t":"If your project requires a specific network configuration, you can use static sharding: // Create node with static sharding const node = await createLightNode({ defaultBootstrap: true, networkConfig: { clusterId: 1, shards: [0, 1, 2, 3], }, });","s":"Alternative network configuration","u":"/build/javascript/light-send-receive","h":"#alternative-network-configuration","p":60},{"i":67,"t":"Use the node.waitForPeers() function to wait for the node to connect with peers on the Waku Network: // Wait for a successful peer connection await node.waitForPeers(); The protocols parameter allows you to specify the protocols that the remote peers should have enabled: import { Protocols } from \"@waku/sdk\"; // Wait for peer connections with specific protocols await node.waitForPeers([Protocols.LightPush, Protocols.Filter]);","s":"Connect to remote peers","u":"/build/javascript/light-send-receive","h":"#connect-to-remote-peers","p":60},{"i":69,"t":"Choose a content topic for your application and create a message encoder and decoder: import { createEncoder, createDecoder } from \"@waku/sdk\"; // Choose a content topic const contentTopic = \"/light-guide/1/message/proto\"; // Create a message encoder and decoder const encoder = createEncoder({ contentTopic }); const decoder = createDecoder(contentTopic); The ephemeral parameter allows you to specify whether messages should NOT be stored by Store peers: const encoder = createEncoder({ contentTopic: contentTopic, // message content topic ephemeral: true, // allows messages NOT be stored on the network }); The pubsubTopicShardInfo parameter allows you to configure a different network configuration for your encoder and decoder: // Create the network config const networkConfig = { clusterId: 3, shards: [1, 2] }; // Create encoder and decoder with custom network config const encoder = createEncoder({ contentTopic: contentTopic, pubsubTopicShardInfo: networkConfig, }); const decoder = createDecoder(contentTopic, networkConfig); info In this example, users send and receive messages on a shared content topic. However, real applications may have users broadcasting messages while others listen or only have 1:1 exchanges. Waku supports all these use cases.","s":"Choose a content topic","u":"/build/javascript/light-send-receive","h":"#choose-a-content-topic","p":60},{"i":71,"t":"Create your application's message structure using Protobuf's valid message fields: import protobuf from \"protobufjs\"; // Create a message structure using Protobuf const DataPacket = new protobuf.Type(\"DataPacket\") .add(new protobuf.Field(\"timestamp\", 1, \"uint64\")) .add(new protobuf.Field(\"sender\", 2, \"string\")) .add(new protobuf.Field(\"message\", 3, \"string\")); info Have a look at the Protobuf installation guide for adding the protobufjs package to your project.","s":"Create a message structure","u":"/build/javascript/light-send-receive","h":"#create-a-message-structure","p":60},{"i":73,"t":"To send messages over the Waku Network using the Light Push protocol, create a new message object and use the lightPush.send() function: // Create a new message object const protoMessage = DataPacket.create({ timestamp: Date.now(), sender: \"Alice\", message: \"Hello, World!\", }); // Serialise the message using Protobuf const serialisedMessage = DataPacket.encode(protoMessage).finish(); // Send the message using Light Push await node.lightPush.send(encoder, { payload: serialisedMessage, });","s":"Send messages using light push","u":"/build/javascript/light-send-receive","h":"#send-messages-using-light-push","p":60},{"i":75,"t":"To receive messages using the Filter protocol, create a callback function for message processing, then use the filter.subscribe() function to subscribe to a content topic: // Create the callback function const callback = (wakuMessage) => { // Check if there is a payload on the message if (!wakuMessage.payload) return; // Render the messageObj as desired in your application const messageObj = DataPacket.decode(wakuMessage.payload); console.log(messageObj); }; // Create a Filter subscription const { error, subscription } = await node.filter.createSubscription({ contentTopics: [contentTopic] }); if (error) { // handle errors if happens throw Error(error); } // Subscribe to content topics and process new messages await subscription.subscribe([decoder], callback); The pubsubTopicShardInfo parameter allows you to configure a different network configuration for your Filter subscription: // Create the network config const networkConfig = { clusterId: 3, shards: [1, 2] }; // Create Filter subscription with custom network config const subscription = await node.filter.createSubscription(networkConfig); You can use the subscription.unsubscribe() function to stop receiving messages from a content topic: await subscription.unsubscribe([contentTopic]); Congratulations! You have successfully sent and received messages over the Waku Network using the Light Push and Filter protocols. Have a look at the light-js and light-chat examples for working demos.","s":"Receive messages using filter","u":"/build/javascript/light-send-receive","h":"#receive-messages-using-filter","p":60},{"i":77,"t":"Learn how to send and receive messages with a convenient SDK that provide various reliable functionalities out-of-the-box. danger This is an experimental feature and has a number of limitations.","s":"Send and Receive Messages in a Reliable Channel","u":"/build/javascript/reliable-channels","h":"","p":76},{"i":79,"t":"npm install @waku/sdk@latest Or using a CDN, note this is an ESM package so type=\"module\" is needed. ","s":"Import Waku SDK","u":"/build/javascript/reliable-channels","h":"#import-waku-sdk","p":76},{"i":81,"t":"Use the createLightNode() function to create a Light Node and interact with the Waku Network: import { createLightNode } from \"@waku/sdk\"; // Create a Light Node const node = await createLightNode({ defaultBootstrap: true }); info When the defaultBootstrap parameter is set to true, your node will be bootstrapped using the default bootstrap method. Have a look at the Bootstrap Nodes and Discover Peers guide to learn more methods to bootstrap nodes.","s":"Create a Waku node","u":"/build/javascript/reliable-channels","h":"#create-a-waku-node","p":76},{"i":83,"t":"Choose a content topic for your application and create a message encoder and decoder: import { createEncoder, createDecoder } from \"@waku/sdk\"; // Choose a content topic const ct = \"/my-app/1/messages/proto\"; // Create a message encoder and decoder const encoder = node.createEncoder({ contentTopic: ct }); const decoder = node.createDecoder({ contentTopic: ct }); You can also use @waku/message-encryption to encrypt and decrypt messages using Waku libraries. info In this example, users send and receive messages on a shared content topic. However, real applications may have users broadcasting messages while others listen or only have 1:1 exchanges. Waku supports all these use cases.","s":"Create encoders and decoders","u":"/build/javascript/reliable-channels","h":"#create-encoders-and-decoders","p":76},{"i":85,"t":"The Waku node will emit health events to help you know whether the node is connected to the network. This can be useful to give feedback to the user, or stop some action (e.g. sending messages) when offline: import { HealthStatus } from \"@waku/sdk\"; node.events.addEventListener(\"waku:health\", (event) => { const health = event.detail; if (health === HealthStatus.SufficientlyHealthy) { // Show to the user they are connected } else if (status === HealthStatus.MinimallyHealthy) { // Maybe put some clue to the user that while we are connected, // there may be issues sending or receiving messages } else { // Show to the user they are disconnected from the network } });","s":"Listen for connection status","u":"/build/javascript/reliable-channels","h":"#listen-for-connection-status","p":76},{"i":87,"t":"You need to choose a channel name: it acts as an identifier to the conversation, participants will try to ensure they all have the same messages within a given channel. const channelName = \"channel-number-15\" Finally, each participant need to identify themselves for reliability purposes, so they can confirm others have received their messages. It is up to you how to generate an id. Every participant must have a different id. const senderId = generateRandomStringId(); You can now create a reliable channel: import { ReliableChannel } from \"@waku/sdk\"; const reliableChannel = await ReliableChannel.create(node, channelName, senderId, encoder, decoder) The channel will automatically start the Waku node and fetch messages.","s":"Create a reliable channel","u":"/build/javascript/reliable-channels","h":"#create-a-reliable-channel","p":76},{"i":89,"t":"Create your application's message structure using Protobufjs: import protobuf from \"protobufjs\"; // Create a message structure using Protobuf const DataPacket = new protobuf.Type(\"DataPacket\") .add(new protobuf.Field(\"timestamp\", 1, \"uint64\")) .add(new protobuf.Field(\"sender\", 2, \"string\")) .add(new protobuf.Field(\"message\", 3, \"string\")); info Have a look at the Protobuf installation guide for adding the protobufjs package to your project.","s":"Create a message structure","u":"/build/javascript/reliable-channels","h":"#create-a-message-structure","p":76},{"i":91,"t":"The reliable channel will emit incoming messages. To process them, simply add a listener: reliableChannel.addEventListener(\"message-received\", (event) => { const wakuMessage = event.detail; // decode your payload using the protobuf object previously created const { timestamp, sender, message } = DataPacket.decode(wakuMessage.payload); // ... process the message as you wish })","s":"Listen to incoming messages","u":"/build/javascript/reliable-channels","h":"#listen-to-incoming-messages","p":76},{"i":93,"t":"To send messages in the reliable channel, encode the message in a payload. // Create a new message object const protoMessage = DataPacket.create({ timestamp: Date.now(), sender: \"Alice\", message: \"Hello, World!\", }); // Serialise the message using Protobuf const serialisedMessage = DataPacket.encode(protoMessage).finish(); Then, send the message and setup listeners so you can know when the message: has been sent has been acknowledged by other participants in the channel has encountered an error // Send the message, and get the id to track events const messageId = reliableChannel.send(payload); reliableChannel.addEventListener(\"sending-message-irrecoverable-error\", (event) => { if (messageId === event.detail.messageId) { console.error('Failed to send message:', event.detail.error); // Show an error to the user } }) reliableChannel.addEventListener(\"message-sent\", (event) => { if (messageId === event.detail) { // Message sent, show '✔' to the user, etc } }) reliableChannel.addEventListener(\"message-acknowledged\", (event) => { if (messageId === event.detail) { // Message acknowledged by other participants, show '✔✔' to the user, etc } }) Congratulations! You have successfully sent and received messages over the Waku Network using our reliable protocols such as Scalable Data Sync (SDS) and P2P Reliability.","s":"Send messages","u":"/build/javascript/reliable-channels","h":"#send-messages","p":76},{"i":95,"t":"Content Topics are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages (Relay or Filter) and retrieving historical messages (Store) that meet specific filtering criteria. Have a look at the WAKU2-TOPICS specification to learn more.","s":"Content Topics","u":"/learn/concepts/content-topics","h":"","p":94},{"i":97,"t":"Here is the recommended format for content topics: /{application-name}/{version}/{content-topic-name}/{encoding} application-name: This is the unique name of your decentralised application (DApp) to prevent conflicts with other DApps. version: Typically starting at 1, this field helps track breaking changes in your messages. content-topic-name: The specific name of the content topic used for filtering. encoding: The message encoding or serialisation format, with Protocol Buffers (proto) being the recommended choice. For example, if your DApp is called SuperCrypto and it allows users to receive notifications and send private messages, you can consider using the following content topics: /supercrypto/1/notification/proto /supercrypto/1/private-message/proto tip While you can choose any encoding format for your Content Topic, we highly recommend using Protocol Buffers (proto) because of its efficiency. Choosing a lightweight format ensures optimal performance of your DApp.","s":"Naming format","u":"/learn/concepts/content-topics","h":"#naming-format","p":94},{"i":99,"t":"When choosing a content topic, it is essential to consider the privacy implications. Here are several factors to keep in mind:","s":"Naming considerations","u":"/learn/concepts/content-topics","h":"#naming-considerations","p":94},{"i":101,"t":"The Filter, Store, and Light Push protocols share content topics with peers, allowing them to link IP and content topic interests. The Relay protocol, using GossipSub, provides recipient anonymity, which can be compromised if the content topic exposes user information. For example, instead of using Personally Identifiable Information (PII) in the content topic (e.g., a public key), you can create buckets (e.g., based on the first 4 bytes of the public key hash). info Waku is developing privacy-preserving features like Anonymous Filter Subscription for the Filter protocol and Anonymous Query for the Store protocol to hide content topics from potential adversaries.","s":"Protocols disclose content topics to peers","u":"/learn/concepts/content-topics","h":"#protocols-disclose-content-topics-to-peers","p":94},{"i":103,"t":"You can increase k-anonymity within the network by using a unified content topic across the entire application or targeting specific features like notifications or private messages, allowing multiple users to share it. We recommend switching functionality using the Protocol Buffer (proto) message format. By doing so, applications can retain a high granularity and functionality while using a single content topic, preserving user privacy. For example: message NotificationPayload { ... } message FeatureAbcPayload { ... } // By default, all fields in protobuf are optional so only field may be encoded at a time message Payload { NotificationPayload notification = 1; FeatureAbcPayload feature_abc = 2; }","s":"Increasing k-anonymity preserves user anonymity","u":"/learn/concepts/content-topics","h":"#increasing-k-anonymity-preserves-user-anonymity","p":94},{"i":105,"t":"When an application uses a single content topic, all users using request/response protocols (Filter, Store) receive all its messages. For heavy traffic, developers can create buckets by hashing a unique identifier (e.g., recipient's ID, public key, or app domain topic) and adding its first byte to the content topic, like /my-app/0/a/proto. This approach divides traffic into multiple topics, reducing the messages users have to download. Developers can add more first bytes to the content topic over time to improve efficiency and privacy based on messages and user needs. info The k value of k-anonymity equals the number of IDs for which the first character of the hash is \"a\". For example, using a single content topic in an application with 10,000 users results in k = 10,000. However, using the hash ID's first character, k reduces to 10,000 / 16 = 625.","s":"Creating buckets help in distributing traffic","u":"/learn/concepts/content-topics","h":"#creating-buckets-help-in-distributing-traffic","p":94},{"i":107,"t":"This guide provides detailed steps to bootstrap your next @waku/sdk project from various example templates using the @waku/create-app package.","s":"Scaffold DApps Using @waku/create-app","u":"/build/javascript/use-waku-create-app","h":"","p":106},{"i":109,"t":"Initialise a new @waku/sdk template using any of the following methods: NPM Yarn npx @waku/create-app [PROJECT DIRECTORY] yarn create @waku/app [PROJECT DIRECTORY] Next, select a template to initialise your app from: tip If you have previously installed @waku/create-app globally, we recommend uninstalling the package to ensure that npx always uses the latest version.","s":"Usage","u":"/build/javascript/use-waku-create-app","h":"#usage","p":106},{"i":111,"t":"We welcome and appreciate the contributions of templates for the @waku/create-app package. To contribute a template, please follow these steps: Create the template, ensuring it is user-friendly and thoroughly tested. Place the template in the examples folder in the js-waku-examples repository's root. Commit your changes with a detailed message and push them to your forked repository. Finally, submit a pull request to the js-waku-examples repository. Our team will carefully review and merge your submission upon approval. Waku also provides bounties to encourage community members to contribute to the network and earn rewards. To participate in the bounty program, head to https://github.com/waku-org/bounties.","s":"Contributing new templates","u":"/build/javascript/use-waku-create-app","h":"#contributing-new-templates","p":106},{"i":113,"t":"Built upon the foundation of EIP-1459: Node Discovery via DNS, DNS Discovery allows the retrieval of an ENR tree from the TXT field of a domain name. This innovative approach enables the storage of essential node connection details, including IP, port, and multiaddr. This bootstrapping method allows anyone to register and publish a domain name for the network, promoting increased decentralisation. Pros​ Low latency, low resource requirements. Easy bootstrap list updates by modifying the domain name, eliminating the need for code changes. Ability to reference a larger list of nodes by including other domain names in the code or ENR tree. Cons​ Vulnerable to censorship: Domain names can be blocked or restricted. Limited scalability: The listed nodes are at risk of being overwhelmed by receiving all queries. Also, operators must provide their ENR to the domain owner for listing.","s":"DNS Discovery","u":"/learn/concepts/dns-discovery","h":"","p":112},{"i":115,"t":"DNS lookup query to retrieve TXT data stored on example.com domain. enrtree-root is returned, and the value of e is the enr-root, the root hash of the node subtree. DNS lookup query to retrieve TXT data stored on .example.com domain. enrtree-branch is returned; this tree contains hashes of node subtrees. DNS lookup query to retrieve TXT data stored on DU...VQ.example.com domain, the first leaf of enrtree-branch. enr record is returned. Returned value is decoded, and peer connection details such as IP address and port are learned.","s":"Overview","u":"/learn/concepts/dns-discovery","h":"#overview","p":112},{"i":117,"t":"Discv5 is a decentralised and efficient peer discovery mechanism for the Waku Network. It uses a Distributed Hash Table (DHT) for storing ENR records, providing resistance to censorship. Discv5 offers a global view of participating nodes, enabling random sampling for load distribution. It uses bootstrap nodes as an entry point to the network, providing randomised sets of nodes for mesh expansion. Have a look at the Discv5 specification to learn more. Pros​ Decentralised with random sampling from a global view. Continuously researched and improved. Cons​ Requires lots of connections and involves frequent churn. Relies on User Datagram Protocol (UDP), which is not supported in web browsers.","s":"Discv5","u":"/learn/concepts/discv5","h":"","p":116},{"i":119,"t":"DNS Discovery protocol is executed. Alice retrieves Bob's ENR (Ethereum Node Record) from DNS Server. Alice executes the Discv5 protocol with Bob using UDP connection details from ENR. Bob returns Carol's, David's and Erin's ENRs to Alice. Alice decodes ENRs and extracts the details of Carol, David, and Erin's TCP and UDP connections. Alice executes the Discv5 protocol with Carol using UDP connection details from ENR. Carol returns Frank's, Gwen's and Harry's ENRs to Alice. Alice decodes ENRs and extracts Frank's, Gwen's and Harry's TCP and UDP connection details. Alice selects to dial David, Frank and Gwen. Alice dials David, Frank and Gwen over libp2p using TCP connection details from ENRs.","s":"Overview","u":"/learn/concepts/discv5","h":"#overview","p":116},{"i":121,"t":"When initialising a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate other peers in the network. This process is known as bootstrapping. Once a connection is established, the node must actively seek out additional peers to have: Sufficient peers in the Relay mesh: The goal is to have at least 6 peers in the mesh. This ensures a robust network where messages can be efficiently relayed. Reserve peers for backup: It is essential to have a surplus of peers available as reserves. These reserves are backups when the current peers become overloaded or experience unexpected disconnections. Peers with specific capabilities: The node seeks out peers with specific capabilities, such as Store, Light Push, or Filter. This allows for targeted interactions and enhanced functionality based on the desired capabilities. Waku supports multiple peer discovery mechanisms, such as: Configuring Static Peers Peer Discovery via DNS Discv5 Ambient Peer Discovery Peer Exchange","s":"Peer Discovery","u":"/learn/concepts/peer-discovery","h":"","p":120},{"i":123,"t":"While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.","s":"Run @waku/sdk in a NodeJS Application","u":"/build/javascript/run-waku-nodejs","h":"","p":122},{"i":126,"t":"@waku/sdk prioritises browser compatibility, avoiding NodeJS APIs for simpler bundling. This design choice enhances browser API compatibility but sacrifices NodeJS optimisation. While many browser APIs work in NodeJS, they might need better optimisation.","s":"API compatibility","u":"/build/javascript/run-waku-nodejs","h":"#api-compatibility","p":122},{"i":128,"t":"@waku/sdk focuses on the client side of the Request/Response protocol. We'll have to replicate all the functionalities added to nwaku to implement extra features.","s":"Protocol implementation","u":"/build/javascript/run-waku-nodejs","h":"#protocol-implementation","p":122},{"i":130,"t":"@waku/sdk aims to provide optimal default for the browser, striking a balance between browser and NodeJS compatibility while ensuring simplicity will add complexity.","s":"Codebase complexity","u":"/build/javascript/run-waku-nodejs","h":"#codebase-complexity","p":122},{"i":132,"t":"Certain features in @waku/sdk are tailored for browsers and might not translate seamlessly to NodeJS. For example, only WebSocket is supported in the browser, whereas a NodeJS application can benefit from using transport methods like TCP. @waku/sdk default peer management caters to the browser's ephemeral nature, which is different for NodeJS. This is why DNS Discovery and Peer Exchange are the default discovery mechanisms for the browser but not for NodeJS and desktop applications.","s":"Browser-specific protocols","u":"/build/javascript/run-waku-nodejs","h":"#browser-specific-protocols","p":122},{"i":134,"t":"Before using @waku/sdk in a NodeJS environment, take into account these limitations. For a more optimised solution, we recommend running nwaku in a Docker container and consuming its REST API.","s":"Recommendations","u":"/build/javascript/run-waku-nodejs","h":"#recommendations","p":122},{"i":136,"t":"There are plans to release a NodeJS package based on nwaku to streamline the process of using Waku Network features in NodeJS applications. You can track the progress and updates here: https://github.com/waku-org/nwaku/issues/1332.","s":"Future developments","u":"/build/javascript/run-waku-nodejs","h":"#future-developments","p":122},{"i":138,"t":"The Waku Network is a shared p2p messaging network that is open-access, useful for generalized messaging, privacy-preserving, scalable and accessible even to resource-restricted devices. Some of the most prominent features include: DoS/spam protection with privacy-preserving Rate-Limiting Nullifiers. Scalability by sharding traffic into 8 pubsub topics. Automatic shard selection based on content topic. Services for resource-restricted nodes, including historical message storage and retrieval, filtering, etc. tip If you want to learn more about the Waku Network, The Waku Network: Technical Overview article provides an in-depth look under the hood.","s":"The Waku Network","u":"/learn/","h":"","p":137},{"i":140,"t":"Applications or projects can build decentralized communication components on this network, gaining from the fault-tolerance of shared infrastructure, the out-of-the-box censorship resistance of a p2p network and the privacy-preservation of Waku protocols. Supporters of public goods and decentralized infrastructure can run their nodes to support the network. We are also working on incentivisation vectors to encourage more node operators to provide services to the network.","s":"Why join the Waku network?","u":"/learn/","h":"#why-join-the-waku-network","p":137},{"i":142,"t":"Ethereum Sepolia HTTPS endpoint, which can be yours or from a third party. Have a look at the Access a Sepolia Node Using Infura guide for a free Infura option. This node is used to interact with the on-chain RLN membership contract. Wallet with Sepolia Ethereum (less than 0.1 Sepolia ETH). Have a look at the Create a Sepolia Ethereum Wallet and Obtain Sepolia Ethereum from Faucet guides to get a Sepolia wallet and fund it with some Sepolia Ethereum. This wallet is required to register RLN membership, which is essential for publishing on the network.","s":"Prerequisites","u":"/learn/","h":"#prerequisites","p":137},{"i":144,"t":"Have a look at the Run Nwaku with Docker Compose guide for instructions on running a nwaku node in the Waku Network. Use the Sepolia node and wallet you obtained above. info The public Waku Network replaces the previous experimental shared routing layer based on a default pubsub topic (/waku/2/default-waku/proto). If your project currently uses this or any other shared pubsub topics, we encourage you to migrate to the public Waku Network with built-in DoS protection, scalability, and reasonable bandwidth usage.","s":"Running a Waku network node","u":"/learn/","h":"#running-a-waku-network-node","p":137},{"i":146,"t":"The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices without relying on Discv5. The peer exchange protocol enables light nodes to request peers from other nodes within the network. info Peer Exchange enables requesting random peers from other network nodes without revealing information about their connectivity or neighbourhood. Pros​ Low resource requirements. Decentralised with random sampling of nodes from a global view using Discv5. Cons​ Decreased anonymity. Imposes additional load on responder nodes.","s":"Peer Exchange","u":"/learn/concepts/peer-exchange","h":"","p":145},{"i":148,"t":"DNS Discovery protocol is executed. Alice retrieves Bob's websocket multiaddr from DNS Server. Alice dials Bob using libp2p protocols. Alice executes a Peer Exchange query to Bob. Bob returns Carol's and David's ENR to Alice. Alice decodes ENRs and extracts Carol's and David's websocket multiaddrs. Alice dials Carol and David. Alice can now drop the connection with Bob (bootstrap node); Alice has 2 connections to the Waku Network.","s":"Overview","u":"/learn/concepts/peer-exchange","h":"#overview","p":145},{"i":150,"t":"This guide provides detailed steps to create a Light Node for retrieving and filtering historical messages using the Store protocol.","s":"Retrieve Messages Using Store Protocol","u":"/build/javascript/store-retrieve-messages","h":"","p":149},{"i":152,"t":"Use the createLightNode() function to create a Light Node and interact with the Waku Network: import { createLightNode } from \"@waku/sdk\"; // Create and start a Light Node const node = await createLightNode({ defaultBootstrap: true }); await node.start();","s":"Create a light node","u":"/build/javascript/store-retrieve-messages","h":"#create-a-light-node","p":149},{"i":154,"t":"Use the node.waitForPeers() method to wait for the node to connect with Store peers: import { Protocols } from \"@waku/sdk\"; // Wait for a successful peer connection await node.waitForPeers([Protocols.Store]); You can also specify a dedicated Store peer to use for queries when creating the node. This is particularly useful when running your own Store node or when you want to use a specific Store node in the network: const node = await createLightNode({ defaultBootstrap: true, store: { peer: \"/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm...\" // multiaddr or PeerId of your Store node } }); If the specified Store peer is not available, the node will fall back to using random Store peers in the network.","s":"Connect to store peers","u":"/build/javascript/store-retrieve-messages","h":"#connect-to-store-peers","p":149},{"i":156,"t":"Choose a content topic for filtering the messages to retrieve and create a message decoder: import { createDecoder } from \"@waku/sdk\"; // Choose a content topic const contentTopic = \"/store-guide/1/message/proto\"; // Create a message decoder const decoder = createDecoder(contentTopic);","s":"Choose a content topic","u":"/build/javascript/store-retrieve-messages","h":"#choose-a-content-topic","p":149},{"i":158,"t":"@waku/sdk provides the queryWithOrderedCallback() and queryGenerator() functions for querying Store nodes and retrieving historical or missed messages. The responses from Store nodes are paginated and require you to process each page sequentially.","s":"Retrieve messages","u":"/build/javascript/store-retrieve-messages","h":"#retrieve-messages","p":149},{"i":160,"t":"The store.queryWithOrderedCallback() function provides a straightforward method for querying Store nodes and processing messages in chronological order through a callback function. It accepts these parameters: decoders: List of decoders that specify the content topic to query for and their message decryption methods. callback: The callback function for processing the retrieved messages. options (optional): Query options to filter the retrieved messages. // Create the callback function const callback = (wakuMessage) => { // Render the message/payload in your application console.log(wakuMessage); }; // Query the Store peer await node.store.queryWithOrderedCallback([decoder], callback); info The queryWithOrderedCallback() function always returns the most recent messages in a page first.","s":"queryWithOrderedCallback","u":"/build/javascript/store-retrieve-messages","h":"#querywithorderedcallback","p":149},{"i":162,"t":"The store.queryGenerator() function provides more control and flexibility over processing messages retrieved from Store nodes through Async Generators. It accepts these parameters: decoders: List of decoders that specify the content topic to query for and their message decryption methods. options (optional): Query options to filter the retrieved messages. // Create the store query const storeQuery = node.store.queryGenerator([decoder]); // Process the messages for await (const messagesPromises of storeQuery) { // Fulfil the messages promises const messages = await Promise.all( messagesPromises.map(async (p) => { const msg = await p; // Render the message/payload in your application console.log(msg); }) ); } info The queryGenerator() function always returns the oldest messages in a page first.","s":"queryGenerator","u":"/build/javascript/store-retrieve-messages","h":"#querygenerator","p":149},{"i":165,"t":"The pageDirection option specifies the direction in which pages are retrieved: BACKWARD (default): Most recent page first. FORWARD: Oldest page first. import { PageDirection } from \"@waku/sdk\"; // Retrieve recent messages first const queryOptions = { pageDirection: PageDirection.BACKWARD, }; // Retrieve oldest messages first const queryOptions = { pageDirection: PageDirection.FORWARD, }; // Query the Store peer with options await node.store.queryWithOrderedCallback([decoder], callback, options); const storeQuery = node.store.queryGenerator([decoder, options]);","s":"pageDirection","u":"/build/javascript/store-retrieve-messages","h":"#pagedirection","p":149},{"i":167,"t":"The cursor option specifies the starting index for retrieving messages. For example, consider a query that retrieves the first page messages and then continues with the next page: import { waku } from \"@waku/sdk\"; // Create the callback function const messages = []; const callback = (wakuMessage) => { messages.push(wakuMessage); // Return \"true\" to stop retrieving pages // Here, it retrieves only the first page return true; }; // Retrieve the first page of messages // This retrieves all the messages if \"return true\" is not present await node.store.queryWithOrderedCallback([decoder], callback); // Create the cursor const lastMessage = messages[messages.length - 1]; const cursor = await waku.createCursor(lastMessage); // Retrieve the next page of messages // The message at the cursor index is excluded from the result await node.store.queryWithOrderedCallback([decoder], callback, { cursor: cursor, }); console.log(messages); info If you omit the cursor option, the query will start from the beginning or end of the history, depending on the page direction.","s":"cursor","u":"/build/javascript/store-retrieve-messages","h":"#cursor","p":149},{"i":169,"t":"The timeFilter option specifies a time frame to retrieve messages from. For example, consider a query that retrieves messages from the previous week: // Get the time frame const endTime = new Date(); const startTime = new Date(); startTime.setDate(endTime.getDate() - 7); // Retrieve a week of messages const queryOptions = { timeFilter: { startTime, endTime, }, }; // Query the Store peer with options await node.store.queryWithOrderedCallback([decoder], callback, options); const storeQuery = node.store.queryGenerator([decoder, options]); info The timeFilter option significantly reduces message retrieval performance. To optimise it, consider resuming message retrieval using a cursor that starts from the last seen message. Congratulations! You have successfully retrieved and filtered historical messages on a Light Node using the Store protocol. Have a look at the store-js and store-reactjs-chat examples for working demos.","s":"timeFilter","u":"/build/javascript/store-retrieve-messages","h":"#timefilter","p":149},{"i":171,"t":"caution Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future. The @waku/react package provides components and UI adapters to integrate @waku/sdk into React applications effortlessly. This guide provides detailed steps for using @waku/react in your project.","s":"Build React DApps Using @waku/react","u":"/build/javascript/use-waku-react","h":"","p":170},{"i":173,"t":"First, set up a project using any production-grade React framework or an existing React application. For this guide, we will create a boilerplate using ViteJS: NPM Yarn npm create vite@latest [PROJECT DIRECTORY] -- --template react yarn create vite [PROJECT DIRECTORY] --template react Next, install the required packages for integrating @waku/sdk using your preferred package manager: NPM Yarn npm install @waku/react @waku/sdk protobufjs yarn add @waku/react @waku/sdk protobufjs","s":"Install the dependencies","u":"/build/javascript/use-waku-react","h":"#install-the-dependencies","p":170},{"i":175,"t":"In the main.jsx file, which serves as the entry point for a React app, we will set up the LightNodeProvider context provider to wrap the entire application within the Waku provider. Import the following on top of your file: src/main.jsx import { LightNodeProvider } from \"@waku/react\"; // Set the Light Node options const NODE_OPTIONS = { defaultBootstrap: true }; ReactDOM.createRoot(document.getElementById('root')).render( // Use the Light Node context provider , ) Next, create and start a Light Node using the useWaku() function within the App.jsx file: src/App.jsx import { useWaku } from \"@waku/react\"; function App() { // Create and start a Light Node const { node, error, isLoading } = useWaku(); // \"node\" is the created Light Node // \"error\" captures any error that occurs during node creation // \"isLoading\" indicates whether the node is still being created }","s":"Initialise the Waku provider","u":"/build/javascript/use-waku-react","h":"#initialise-the-waku-provider","p":170},{"i":177,"t":"Let's build a user interface for sending messages and viewing past messages, modify the App.jsx file with the following code block: src/App.jsx import { useState, useEffect } from 'react'; import { useWaku } from \"@waku/react\"; import { createEncoder, createDecoder } from \"@waku/sdk\"; import protobuf from 'protobufjs'; import './App.css' function App() { const [inputMessage, setInputMessage] = useState(\"\"); const [messages, setMessages] = useState([]); // Update the inputMessage state as the user input changes const handleInputChange = (e) => { setInputMessage(e.target.value); }; // Create and start a Light Node const { node, error, isLoading } = useWaku(); // Create a message encoder and decoder const contentTopic = \"/waku-react-guide/1/chat/proto\"; const encoder = createEncoder({ contentTopic }); const decoder = createDecoder(contentTopic); // Create a message structure using Protobuf const DataPacket = new protobuf.Type(\"DataPacket\") .add(new protobuf.Field(\"timestamp\", 1, \"uint64\")) .add(new protobuf.Field(\"message\", 2, \"string\")); // Send the message using Light Push const sendMessage = async () => {} return ( <>

    Waku React Demo

    {messages.map((message, index) => (
    {new Date(message.timestamp).toUTCString()}
    {message.message}
    ))}
    ) } export default App info In the code above, we also created a message encoder and decoder using the createEncoder() and createDecoder() functions, along with the application message structure with Protobuf. Next, modify the App.css file with the following code block: src/App.css #root { margin: 0 auto; } .chat-interface { display: flex; flex-direction: column; height: 100vh; border: 1px solid #ccc; } .chat-body { flex-grow: 1; overflow-y: auto; padding: 10px; } .message-text { background-color: #f1f1f1; color: #000; padding: 10px; margin-bottom: 10px; } .chat-footer { display: flex; padding: 10px; background-color: #f1f1f1; align-items: center; } #message-input { flex-grow: 1; border-radius: 4px; padding: 10px; margin-right: 10px; } .send-button { background-color: #007bff; border-radius: 4px; }","s":"Build the application interface","u":"/build/javascript/use-waku-react","h":"#build-the-application-interface","p":170},{"i":179,"t":"To send messages in our application, we need to modify the sendMessage() function to serialize user input into our Protobuf structure and push it to the network using the useLightPush() function: src/App.jsx import { useLightPush } from \"@waku/react\"; function App() { // Bind push method to a node and encoder const { push } = useLightPush({ node, encoder }); // Send the message using Light Push const sendMessage = async () => { if (!push || inputMessage.length === 0) return; // Create a new message object const timestamp = Date.now(); const protoMessage = DataPacket.create({ timestamp: timestamp, message: inputMessage }); // Serialise the message and push to the network const payload = DataPacket.encode(protoMessage).finish(); const { recipients, errors } = await push({ payload, timestamp }); // Check for errors if (errors.length === 0) { setInputMessage(\"\"); console.log(\"MESSAGE PUSHED\"); } else { console.log(errors); } }; }","s":"Send messages using light push","u":"/build/javascript/use-waku-react","h":"#send-messages-using-light-push","p":170},{"i":181,"t":"To display messages in our application, we need to use the useFilterMessages() function to create a Filter subscription, receive incoming messages, and render them in our interface: src/App.jsx import { useFilterMessages } from \"@waku/react\"; function App() { // Receive messages from Filter subscription const { messages: filterMessages } = useFilterMessages({ node, decoder }); // Render the list of messages useEffect(() => { setMessages(filterMessages.map((wakuMessage) => { if (!wakuMessage.payload) return; return DataPacket.decode(wakuMessage.payload); })); }, [filterMessages]); }","s":"Receive messages using filter","u":"/build/javascript/use-waku-react","h":"#receive-messages-using-filter","p":170},{"i":183,"t":"To display messages from the past, we need to retrieve them from the Store protocol using the useStoreMessages() function when our application initialises and then render them alongside newly received messages: src/App.jsx import { useFilterMessages, useStoreMessages } from \"@waku/react\"; function App() { // Query Store peers for past messages const { messages: storeMessages } = useStoreMessages({ node, decoder }); // Receive messages from Filter subscription const { messages: filterMessages } = useFilterMessages({ node, decoder }); // Render both past and new messages useEffect(() => { const allMessages = storeMessages.concat(filterMessages); setMessages(allMessages.map((wakuMessage) => { if (!wakuMessage.payload) return; return DataPacket.decode(wakuMessage.payload); })); }, [filterMessages, storeMessages]); } You can also configure a specific Store peer when creating the node, which is useful when running your own Store node or using a specific node in the network: const node = await createLightNode({ defaultBootstrap: true, store: { peer: \"/ip4/1.2.3.4/tcp/1234/p2p/16Uiu2HAm...\" // multiaddr or PeerId of your Store node } }); If the specified Store peer is not available, the node will fall back to using random Store peers in the network. info To explore the available Store query options, have a look at the Retrieve Messages Using Store Protocol guide. tip You have successfully integrated @waku/sdk into a React application using the @waku/react package. Have a look at the web-chat example for a working demo and the Building a Tic-Tac-Toe Game with Waku tutorial to learn more.","s":"Retrieve messages using store","u":"/build/javascript/use-waku-react","h":"#retrieve-messages-using-store","p":170},{"i":185,"t":"Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialised purposes and contribute to the robust functionality of Waku, forming its foundation.","s":"Network Domains","u":"/learn/concepts/network-domains","h":"","p":184},{"i":187,"t":"Peer discovery in Waku facilitates locating other nodes within the network. As a modular protocol, Waku incorporates various discovery mechanisms, such as Discv5 and Peer Exchange. These mechanisms allow developers to choose the most suitable option(s) for their specific use cases and user environments, including mobile phones, desktop browsers, servers, and more.","s":"Discovery domain","u":"/learn/concepts/network-domains","h":"#discovery-domain","p":184},{"i":189,"t":"GossipSub derives its name from the practice within Pub/Sub networks where peers gossip about the messages they have encountered, thus establishing a message delivery network. Waku employs gossiping through Relay to distribute messages across the network. Additionally, Waku introduces RLN Relay, an experimental mechanism that combines privacy preservation and economic spam protection.","s":"Gossip domain","u":"/learn/concepts/network-domains","h":"#gossip-domain","p":184},{"i":191,"t":"Waku provides a set of protocols to optimise its performance in resource-limited environments like low bandwidth or mostly offline scenarios for multiple purposes. Store enables the retrieval of historical messages. Filter efficiently retrieves a subset of messages to conserve bandwidth. Light Push facilitates message publication for nodes with limited bandwidth and short connection windows.","s":"Request/response domain","u":"/learn/concepts/network-domains","h":"#requestresponse-domain","p":184},{"i":193,"t":"Here is a diagram illustrating the interaction between different protocols within the Waku Network. The Pub/Sub topic pubtopic1 serves as a means of routing messages (the network employs a default Pub/Sub topic) and indicates that it is subscribed to messages on that topic for a relay. Node D serves as a Store and is responsible for storing messages. Node A creates a WakuMessage msg1 with Content Topic contentTopic1. Node F requests to get messages filtered by Pub/Sub topic pubtopic1 and Content Topic contentTopic1. Node D subscribes F to this filter and will forward messages that match that filter in the future. Node A publishes msg1 on pubtopic1. The message is sent from Node A to Node B and then forwarded to Node D. Node D, upon receiving msg1, stores the message for future retrieval by other nodes and forwards it to Node C. Node D also pushes msg1 to Node F, informing it about the arrival of a new message. At a later time, Node E comes online and requests messages matching pubtopic1 and contentTopic1 from Node D. Node D responds with msg1 and potentially other messages that match the query.","s":"Overview of protocol interaction","u":"/learn/concepts/network-domains","h":"#overview-of-protocol-interaction","p":184},{"i":195,"t":"Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the Anonymity Trilemma. This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku:","s":"Protocols","u":"/learn/concepts/protocols","h":"","p":194},{"i":197,"t":"Relay protocol employs a Pub/Sub architecture to facilitate the sending and receiving of messages among peers. It extends the libp2p GossipSub protocol to create a privacy-focused peer-to-peer messaging protocol that enables secure communication channels, encryption, and protection against censorship. It also scales the Waku Network to accommodate many nodes efficiently.","s":"Relay","u":"/learn/concepts/protocols","h":"#relay","p":194},{"i":199,"t":"RLN Relay protocol extends the Relay protocol by using Rate Limit Nullifiers (RLN) to provide efficient and economic spam-prevention. It enforces a rate limit on messages over time for all peers in the network, economically preventing spam, and imposes financial penalties and network removal for spammers. You can find more details in the RLN Relay blog post.","s":"RLN relay","u":"/learn/concepts/protocols","h":"#rln-relay","p":194},{"i":201,"t":"Filter protocol allows light nodes to selectively subscribe to specific messages relayed by other peers using content topics. It is designed to be a lightweight alternative for accessing the Relay network, particularly tailored for devices with limited bandwidth. info Filter protocol helps optimise bandwidth usage, but it has fewer privacy guarantees as it must disclose the content topic to its peers to retrieve messages.","s":"Filter","u":"/learn/concepts/protocols","h":"#filter","p":194},{"i":203,"t":"Store protocol is responsible for storing messages relayed in the network, making it possible to query and retrieve them later. This functionality benefits offline peers by enabling them to retrieve missed messages upon reconnection. info Using Relay and Filter protocols is recommended when a node is online, as Store does not guarantee data availability. The Store protocol is suitable for retrieving messages when connecting to the network, like when a DApp starts.","s":"Store","u":"/learn/concepts/protocols","h":"#store","p":194},{"i":205,"t":"Light Push is a Request/Response protocol for nodes with limited bandwidth and short connection windows. It allows a client to receive an acknowledgement when sending messages, indicating that at least one peer has received them. Subsequently, the remote peer forwards these messages to the Relay network. info While the Light Push protocol acknowledges the receipt by the remote peer, it does not guarantee network-wide propagation.","s":"Light push","u":"/learn/concepts/protocols","h":"#light-push","p":194},{"i":207,"t":"Waku Message specifies the structure and format of messages in the Waku Network. It includes the following attributes: content_topic attribute for content-based filtering. payload attribute containing the message data payload to be sent. meta attribute for conveying additional details to various protocols for application-specific processing. timestamp attribute signifying the time at which the message was generated by its sender. ephemeral attribute specifying whether the network should not store the message.","s":"Waku message","u":"/learn/concepts/protocols","h":"#waku-message","p":194},{"i":209,"t":"Transports help move data packets across a network by establishing connections between peers. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery. Waku is a transport-agnostic framework that allows developers to choose and support multiple protocols according to their requirements. For Waku nodes, the following transports are recommended: TCP: By default, Waku nodes use TCP for communication. Service nodes should employ TCP for listening to and connecting with other nodes. Secure WebSocket: In browser environments, secure WebSocket is used. Service nodes are encouraged to set up SSL certificates to enable incoming connections from browsers and serve them securely. Other protocols like WebRTC, WebTransport, and QUIC have been researched and studied for potential integration. info Waku ensures compatibility and improved communication capabilities by following these recommended transports.","s":"Transports","u":"/learn/concepts/transports","h":"","p":208},{"i":211,"t":"How can I start building my application using Waku? Check out the Getting Started guide to explore our numerous SDKs and learn how to run a Waku node. Does messaging on Waku require a gas fee? No, sending and receiving messages on Waku involves no gas fee. What encryption does Waku use? Waku uses libp2p noise encryption for node-to-node connections. However, no default encryption method is applied to the data sent over the network. This design choice enhances Waku's encryption flexibility, encouraging developers to use custom protocols or Waku message payload encryption methods freely. Where does Waku store the messages? Waku's Store protocol is designed to temporarily store messages within the network. However, Waku does not guarantee the message's availability and recommends using Codex for long-term storage. Can Waku only be used for wallet-to-wallet messaging? No, Waku is flexible and imposes no specific rules on identifiers. How does Waku differ from IPFS? Waku focuses on short, ephemeral, real-time messages, while IPFS focuses on large, long-term data storage. Although there's an overlap between the two technologies, Waku does not currently support large data for privacy reasons. What are Rate Limiting Nullifiers (RLN)? Rate Limiting Nullifier is a zero-knowledge (ZK) protocol enabling spam protection in a decentralized network while preserving privacy. Each message must be accompanied by a ZK proof, which Relay nodes verify to ensure the publishers do not send more messages than they are allowed. The ZK proof does not leak any private information about message publishers - it only proves they are members of a set of users allowed to publish a certain number of messages per given time frame. How to start a Waku node? Follow the README instructions at nwaku-compose.","s":"Waku FAQ","u":"/learn/faq","h":"","p":210},{"i":213,"t":"Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can either use static peers operated by Status or run a node. Pros​ Low latency. Low resource requirements. Cons​ Vulnerable to censorship: Node IPs can be blocked or restricted. Limited scalability: The number of nodes is fixed and cannot easily be expanded. Maintenance challenges: Updating the node list requires modifying the code, which can be cumbersome and involves releasing and deploying.","s":"Static Peers","u":"/learn/concepts/static-peers","h":"","p":212},{"i":215,"t":"Alice establishes connections with Bob and Carol using their node details, which are predefined (hard-coded) into Alice's node.","s":"Overview","u":"/learn/concepts/static-peers","h":"#overview","p":212},{"i":217,"t":"Waku's protocol layers offer different services and security considerations, shaping the overall security of Waku. We document the security models in the RFCs of the protocols, aiming to provide transparent and open-source references. This empowers Waku users to understand each protocol's security guarantees and limitations. Some of Waku's security features include the following:","s":"Security Features","u":"/learn/security-features","h":"","p":216},{"i":219,"t":"Waku ensures pseudonymity across its protocol layers, using libp2p PeerID as identifiers instead of disclosing true identities. However, it is important to note that pseudonymity does not provide complete anonymity. Actions performed under the same pseudonym (PeerID) can be linked, leading to the potential re-identification of the actual actor.","s":"Pseudonymity","u":"/learn/security-features","h":"#pseudonymity","p":216},{"i":221,"t":"Anonymity means an adversary cannot connect an actor to their actions or data. To achieve anonymity, avoiding linking activities with actors or their Personally Identifiable Information (PII) is crucial. In Waku, the following anonymity features are provided: Publisher-message unlinkability: Ensures that the publisher of messages in the Relay protocol cannot be linked to their published messages. Subscriber-topic unlinkability: Ensures that the subscriber of topics in the Relay protocol cannot be linked to the topics they have subscribed to.","s":"Anonymity/unlinkability","u":"/learn/security-features","h":"#anonymityunlinkability","p":216},{"i":223,"t":"The spam protection feature in Relay ensures that no adversary can flood the system with many messages, intentionally or not, regardless of the content's validity or usefulness. This protection is achieved through the scoring mechanism of GossipSub v1.1. Peers assign scores to their connections based on their behaviour and remove peers with low scores. Ongoing research is being conducted, including developing Rate Limit Nullifiers (RLN), which can be explored further at: https://github.com/vacp2p/research/issues/148.","s":"Spam protection","u":"/learn/security-features","h":"#spam-protection","p":216},{"i":225,"t":"Confidentiality in Waku is ensured through data encryption, while integrity and authenticity are achieved through digital signatures. These security measures are available in Waku Message (version 1) and Noise protocols, which offer payload encryption and encrypted signatures. Noise protocols also facilitate secure channel negotiation within the Waku Network.","s":"Data confidentiality, integrity, and authenticity","u":"/learn/security-features","h":"#data-confidentiality-integrity-and-authenticity","p":216},{"i":227,"t":"In protocols like Store and Filter, where direct connections are required for the designated service, anonymity or unlinkability is not guaranteed. This is because nodes use their PeerID to identify each other during direct connections, making the service obtained in these protocols linkable to the beneficiary's PeerID, considered Personally Identifiable Information (PII). In Store, the queried node can link the querying node's PeerID to the topics being queried. Similarly, in Filter, a node can link the PeerID of a light node to its content filter.","s":"Security considerations","u":"/learn/security-features","h":"#security-considerations","p":216},{"i":229,"t":"Definitions and usage of the terminology used in the Waku ecosystem.","s":"Waku Docs Glossary","u":"/learn/glossary","h":"","p":228},{"i":231,"t":"Bootstrapping is the initial entry point of a node to the Waku Network. Once connected, other peer discovery methods can be employed to locate other peers in the network.","s":"Bootstrapping","u":"/learn/glossary","h":"#bootstrapping","p":228},{"i":233,"t":"A content topic is a string attached to messages to enable protocol-level features like selective message processing and retrieval based on specific criteria.","s":"Content topic","u":"/learn/glossary","h":"#content-topic","p":228},{"i":235,"t":"Dappnode is an open-source platform that simplifies the hosting and management of decentralised applications and blockchain nodes, including Waku.","s":"Dappnode","u":"/learn/glossary","h":"#dappnode","p":228},{"i":237,"t":"Discv5 is a peer discovery mechanism using a Distributed Hash Table (DHT) to store ENR records, providing censorship resistance, load distribution, and enhanced network resilience.","s":"Discv5","u":"/learn/glossary","h":"#discv5","p":228},{"i":239,"t":"DNS discovery is a peer discovery mechanism that allows the retrieval of an ENR tree from the TXT field of a domain name, enabling the storage of node connection details and promoting decentralisation.","s":"DNS discovery","u":"/learn/glossary","h":"#dns-discovery","p":228},{"i":241,"t":"Ethereum Node Record (ENR) is a specification used to represent and identify nodes, facilitating discovery and communication within the network. Besides connection details, ENR also includes node configuration information like enabled protocol and shards.","s":"ENR","u":"/learn/glossary","h":"#enr","p":228},{"i":243,"t":"Filter is a protocol that enables light nodes to selectively subscribe to specific messages transmitted by peers using content topics. It is designed to be a lightweight alternative for accessing the Relay network.","s":"Filter","u":"/learn/glossary","h":"#filter","p":228},{"i":245,"t":"GossipSub is a protocol for efficient and scalable information dissemination in decentralised networks commonly used in blockchain systems.","s":"GossipSub","u":"/learn/glossary","h":"#gossipsub","p":228},{"i":247,"t":"Libp2p is a modular network stack and protocol suite that allows developers to build decentralised, peer-to-peer applications across various network protocols.","s":"Libp2p","u":"/learn/glossary","h":"#libp2p","p":228},{"i":249,"t":"A light node is a resource-limited device or client that leverages service nodes to access the Relay network.","s":"Light node","u":"/learn/glossary","h":"#light-node","p":228},{"i":251,"t":"Light push is a protocol enabling light nodes to send messages to the Relay network and receive acknowledgements confirming that a peer has received them.","s":"Light push","u":"/learn/glossary","h":"#light-push","p":228},{"i":253,"t":"Mostly offline devices are clients who spend most of their time offline or disconnected from the internet and only occasionally to the internet and Waku Network. Examples include browsers and mobile phones.","s":"Mostly offline","u":"/learn/glossary","h":"#mostly-offline","p":228},{"i":255,"t":"A node is a device or client that implements Waku protocols and leverages the Waku Network to enable secure and private peer-to-peer web3 communication.","s":"Node","u":"/learn/glossary","h":"#node","p":228},{"i":257,"t":"A node key is a Secp256k1 (64-char hex string) private key for generating the PeerID, listening addresses, and discovery addresses of a Waku node.","s":"Node key","u":"/learn/glossary","h":"#node-key","p":228},{"i":259,"t":"Out-of-band refers to exchanging information through a separate, secure channel distinct from the main communication method to enhance security.","s":"Out-of-band","u":"/learn/glossary","h":"#out-of-band","p":228},{"i":261,"t":"The payload field in a Waku Message contains the application data, serving as the business logic message transmitted between clients over Waku. Applications can encrypt the payload or employ encryption methods specified in Waku Message Payload Encryption.","s":"Payload","u":"/learn/glossary","h":"#payload","p":228},{"i":263,"t":"A peer refers to other nodes and participants of the Waku Network with whom communication and interaction are possible.","s":"Peer","u":"/learn/glossary","h":"#peer","p":228},{"i":265,"t":"Peer discovery is when a node locates and gets information about other peers in the Waku Network.","s":"Peer discovery","u":"/learn/glossary","h":"#peer-discovery","p":228},{"i":267,"t":"Peer exchange is a peer discovery mechanism that enables light nodes to request and receive peers from other nodes in the network, allowing them to bootstrap and expand their connections without depending on Discv5.","s":"Peer exchange","u":"/learn/glossary","h":"#peer-exchange","p":228},{"i":269,"t":"PeerID is the unique identifier of a node in the Waku Network generated from the cryptographic hash of the node's public key.","s":"Peer ID","u":"/learn/glossary","h":"#peer-id","p":228},{"i":271,"t":"A protocol is a set of rules that enables nodes within the Waku Network to perform various functionalities such as message sending, relaying, filtering, storing, retrieving, and more.","s":"Protocol","u":"/learn/glossary","h":"#protocol","p":228},{"i":273,"t":"Publish/Subscribe (Pub/Sub) is an asynchronous messaging pattern where publishers send messages to topics, and subscribers receive messages from topics of interest, allowing efficient one-to-many communication.","s":"Pub/Sub","u":"/learn/glossary","h":"#pubsub","p":228},{"i":275,"t":"A Pub/Sub topic is a string that serves as an identifier for the topic of interest among GossipSub peers. Peers interested in the same topic are likely to maintain a connection and forward messages received on that topic.","s":"Pub/Sub topic","u":"/learn/glossary","h":"#pubsub-topic","p":228},{"i":277,"t":"Rate Limit Nullifiers (RLN) are a construct based on zero-knowledge proofs that enables rate limiting functionality while preserving the users's anonymity.","s":"Rate limit nullifiers","u":"/learn/glossary","h":"#rate-limit-nullifiers","p":228},{"i":279,"t":"Relay is a protocol that extends the GossipSub protocol to enable secure and censorship resistant message sending and receiving among peers while preserving privacy. It also scales the Waku Network to accommodate many nodes efficiently.","s":"Relay","u":"/learn/glossary","h":"#relay","p":228},{"i":281,"t":"Resource-limited refers to environments or devices restricting available resources, including bandwidth, CPU, memory, disk, and battery power.","s":"Resource-limited","u":"/learn/glossary","h":"#resource-limited","p":228},{"i":283,"t":"RLN Relay is an extension of the Relay protocol that uses Rate Limit Nullifiers (RLN) to prevent spam economically by enforcing a rate limit on messages over time, imposing penalties, and facilitating network removal for spammers.","s":"RLN relay","u":"/learn/glossary","h":"#rln-relay","p":228},{"i":285,"t":"SDKs are tools, libraries, and resources to integrate Waku's private, secure, and censorship-free communication features into various applications.","s":"SDK","u":"/learn/glossary","h":"#sdk","p":228},{"i":287,"t":"Store is a protocol that enables the storage of relayed messages in the network, allowing offline peers to retrieve missed messages upon reconnecting to the network.","s":"Store","u":"/learn/glossary","h":"#store","p":228},{"i":289,"t":"A transport is a network mechanism that establishes connections between peers and enables efficient transmission, routing, and delivery of data packets.","s":"Transport","u":"/learn/glossary","h":"#transport","p":228},{"i":291,"t":"Waku is a family of private, secure, decentralised, and peer-to-peer web3 communication protocols designed to operate in resource-limited environments and suitable for node or desktop application use. Additionally, these protocols collectively form the Waku Network.","s":"Waku","u":"/learn/glossary","h":"#waku","p":228},{"i":293,"t":"Waku Message defines the structure of messages in the Waku Network, including the content topic, payload, and metadata for application-specific processing.","s":"Waku message","u":"/learn/glossary","h":"#waku-message","p":228},{"i":295,"t":"Waku Message Payload Encryption provides guidelines for implementing secure and private communication in the Waku Network. It covers encryption, decryption, and signing methods for message payloads, focusing on confidentiality, authenticity, integrity, and unlinkability.","s":"Waku message payload encryption","u":"/learn/glossary","h":"#waku-message-payload-encryption","p":228},{"i":297,"t":"The Waku Network is an open-access, scalable peer-to-peer messaging network emphasizing privacy protection and accessibility to resource limited devices.","s":"Waku network","u":"/learn/glossary","h":"#waku-network","p":228},{"i":299,"t":"Waku Noise is a specified way to use the Noise Protocol Framework to build protocols that enable secure key-exchange mechanisms for encrypted communication with confidentiality, authenticity, integrity, strong forward secrecy, and identity-hiding properties.","s":"Waku noise","u":"/learn/glossary","h":"#waku-noise","p":228},{"i":302,"t":"The following features are currently experimental and under research and initial implementation:","s":"Experimental features","u":"/learn/research/","h":"#experimental-features","p":300},{"i":304,"t":"We aim to enable an incentivised spam protection technique to enhance Relay by using Rate Limit Nullifiers (RLN). In this advanced method, peers are limited to a certain messaging rate per epoch, and an immediate financial penalty is enforced for spammers who break this rate. You can find more details in the RLN Relay blog post.","s":"Economic spam resistance","u":"/learn/research/","h":"#economic-spam-resistance","p":300},{"i":306,"t":"Denial of service signifies the case where an adversarial peer exhausts another node's service capacity (e.g., by making a large number of requests) and makes it unavailable to the rest of the system. RnD on DoS attack mitigation can be tracked from here: https://github.com/vacp2p/research/issues/148. In a nutshell, peers have to pay for the service they obtain from each other. In addition to incentivising the service provider, accounting also makes DoS attacks costly for malicious peers. The accounting model can be used in Store and Filter to protect against DoS attacks. Additionally, along with RLN, this gives node operators who provide a useful service to the network an incentive to perform that service. Read more here: https://vac.dev/building-privacy-protecting-infrastructure You can also read more about the ongoing challenges the Waku team is working on here: https://github.com/waku-org/research","s":"Prevention of denial of service (DoS) and node incentivisation","u":"/learn/research/","h":"#prevention-of-denial-of-service-dos-and-node-incentivisation","p":300},{"i":308,"t":"Research and Studies: Protocol simulations and theoretical analysis to support the design of Waku protocols. The protocol definitions are on the Waku RFCs website. Benchmarks: Results of implementations and engineering-related benchmarks for Waku clients.","s":"Research resources","u":"/learn/research/","h":"#research-resources","p":300},{"i":310,"t":"Waku also has the following published research papers: WAKU-RLN-RELAY: Privacy-Preserving Peer-to-Peer Economic Spam Protection Message Latency in Waku Relay with Rate Limiting Nullifiers Waku: A Family of Modular P2P Protocols For Secure & Censorship-Resistant Communication The Waku Network as Infrastructure for dApps","s":"Research papers","u":"/learn/research/","h":"#research-papers","p":300},{"i":312,"t":"Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting.","s":"Comparing Waku and libp2p","u":"/learn/waku-vs-libp2p","h":"","p":311},{"i":314,"t":"Waku intends to incentivise mechanisms to run nodes, but it is not part of libp2p's scope. Additionally, users or developers do not have to deploy their infrastructure as a prerequisite to use Waku. It is a service network. However, you are encouraged to run a node to support and decentralise the network.","s":"Waku as a service network","u":"/learn/waku-vs-libp2p","h":"#waku-as-a-service-network","p":311},{"i":316,"t":"Waku includes various protocols covering the following domains: privacy preservation, censorship resistance, and platform agnosticism, allowing it to run on any platform or environment. Waku provides out-of-the-box protocols to enable mostly offline/resource-limited devices, Store/Light Push/Filter caters to those use cases.","s":"Waku as a turnkey solution","u":"/learn/waku-vs-libp2p","h":"#waku-as-a-turnkey-solution","p":311},{"i":318,"t":"libp2p does not have strong spam protection guarantees, RLN Relay is a protocol being developed by the Waku team towards this goal.","s":"Economic spam protection","u":"/learn/waku-vs-libp2p","h":"#economic-spam-protection","p":311},{"i":320,"t":"TLDR: This issue aims to set the maximum bandwidth in x Mbps that each waku shard should consume so that the maximum amount of people can run a full waku node. It is up to https://github.com/waku-org/research/issues/22 to specify how this maximum will be enforced. Conclusion: Limit to 10 Mbps each waku shard.","s":"Maximum Bandwidth for Global Adoption","u":"/learn/research/research-and-studies/maximum-bandwidth","h":"","p":319},{"i":322,"t":"Waku is designed in a way that everyone should be able to run a full node on an average laptop with a residential Internet connection, at least in one shard. This will enable true decentralization and give power to the users, since they won't need to rely on third parties to send/receive messages. Professional node operators running in data centers, can of course contribute to multiple shards, but we should keep the bandwidth/hardware requirements of single shard rather low. This vision opposes the federated approach, where a few nodes requiring vast amounts of resources (cpu, memory, bandwidth) run in data centres, taking the power from the user. While federated approaches are an improvement from traditional client-server architectures, waku envisions a fully peer-to-peer architecture where anyone should be able to run a node. In order to ensure that anyone can run a node in desktop, there are two main limiting factors: Bandwidth consumption in Mbps CPU/memory resources (mainly limited by RLN proof verification) This issue focuses on i) bandwidth consumption and https://github.com/waku-org/research/issues/30 on ii) CPU/memory resources. Note that on https://github.com/waku-org/research/issues/23 an analysis on the impact on RLN was already made, but wasn't focused on scalability. Said issues do. In https://github.com/waku-org/research/issues/22 we discussed why and how to limit the maximum bandwidth per shard, but we haven't come up with a specific number in Mbps. This issue i) presents data from the available bandwidth at different locations and ii) suggests a maximum bandwidth in Mbps that waku should enforce.","s":"Introduction","u":"/learn/research/research-and-studies/maximum-bandwidth","h":"#introduction","p":319},{"i":324,"t":"The following tables show: Table [1] The Q25, Q75 and average bandwidth (upload/download) in Mbps available on different continents. Raw data is available here and credits to @leobago for the summarized version. Note: The below numbers were rounded to the nearest integer. Table [2] The median global bandwidth (upload/download) in Mbps, taken from speedtest (accessed 12 Oct 2023). Table [3] Download bandwidth requirements in Mbps for Netflix video streaming, source. Table [1] Download (Mbps) Upload (Mbps) Q25 Average Q75 Q25 Average Q75 North-America 58 107 137 38 68 85 South-America 21 54 72 13 33 44 Europe 49 93 119 30 56 72 Asia 23 53 71 15 37 50 Oceania 44 84 108 27 50 63 Africa 12 26 33 7 17 22 Table [2] Median Download (Mbps) Median Upload (Mbps) Global 83 38 Table [3] Video resolution Recommended Bandwidth HD 3 Mbps Full HD 5 Mbps 4K/UHD 15 Mbps","s":"Bandwidth availability and usage","u":"/learn/research/research-and-studies/maximum-bandwidth","h":"#bandwidth-availability-and-usage","p":319},{"i":326,"t":"With the above data, we should be informed to take a decision on the maximum bandwidth that we should enforce per shard. With this number, we will apply the techniques explained in https://github.com/waku-org/research/issues/22 to ensure (with some statistical confidence) that the bandwidth won't exceed that number. The trade-off is clear: We enforce a low bandwidth: more people can run full waku nodes, overall network throughput is less, network decentralization is easier, gives power to the user as its fully sovereign. We don't enforce a low bandwidth: not possible to run full waku nodes in laptops acting as a centralization force, nodes are run by few professional operators in data centers, waku users just use light clients, network throughput can scale way easier, federated approach. So it's about where to draw this line. Points to take into account: Relay contributes to bandwidth the most: Relay is the protocol that mostly contributes to bandwidth usage, and it can't choose to allocate fewer bandwidth resources like other protocols (eg store can choose to provide less resources and it will work). In other words, the network sets the relay bandwidth requirements, and if the node can't meet them, it just wont work. Upload and download bandwidth are the same: Due to how gossipsub works, and hence relay, the bandwidth consumption is symmetric, meaning that upload and download bandwidth is the same. This is because of D and the reciprocity of the connections, meaning that one node upload is another download. Nodes not meeting requirements can use light clients. Note that nodes not meeting the bandwidth requirements can still use waku, but they will have to use light protocols, which are a great alternative, especially on mobile, but with some drawbacks (trust assumptions, less reliability, etc) Waku can't take all the bandwidth: Waku is meant to be used in conjunction with other services, so it shouldn't consume all the existing bandwidth. If Waku consumes x Mbps and someone bandwidth is x Mpbs, the UX won't be good. Compare with existing well-known services: As shown in Table [3], Netflix 4K video streaming takes 15Mbps, so that is an order of magnitude to take into account. Coming up with a number: Lowest average download speed across continents is Africa (26 Mbps) Lowest average upload speed across continents is Africa (17 Mbps) Since in waku the bandwidth consumption is symmetric, we are limited by the lowest (17 Mpbs) However waku should not consume all bandwidth, leaving some room for other applications. We could set 10 Mbps, which is between Full HD video and 4K. With 10Mbps the % of average bandwidth waku will consume is: North-America 9 % South-America 18 % Europe 11 % Asia 18 % Oceania 12 % Africa 38 % Conclusion: Limit to 10 Mbps each waku shard. How? Not trivial, see https://github.com/waku-org/research/issues/22#issuecomment-1727795042 Note: This number is not set in stone and is subject to modifications, but it will most likely stay in the same order of magnitude if changed.","s":"Selecting a maximum bandwidth","u":"/learn/research/research-and-studies/maximum-bandwidth","h":"#selecting-a-maximum-bandwidth","p":319},{"i":328,"t":"TLDR: We present the results of 1000 nwaku nodes running rln using different message sizes, in a real network with bandwidth limitations and network delays. The goal is to study the message propagation delay distribution, and how it's affected by i) rln and ii) message size in a real environment. We observe that for messages of 10kB the average end-to-end propagation delay is 508 ms. We can also observe that the message propagation delays are severely affected when increasing the message size, which indicates that it is not a good idea to use waku for messages of eg. 500kB. See simulation parameters.","s":"Message Propagation Times With Waku-RLN","u":"/learn/research/research-and-studies/message-propagation","h":"","p":327},{"i":330,"t":"Waku uses relay as a routing protocol, which is an adaptation of gossipsub. It routes messages following a publisher/subscriber architecture, where nodes can publish messages or subscribe to topics. If message m is published to topic t, all i nodes n_1...n_i subscribed to t will get m. The relay protocol ensures that every node gets the messages of the topics it is subscribed to. However, since relay works in a decentralized manner, all nodes contribute to the gossiping of a message, until it has successfully reached all the interested nodes (subscribed to it). This means that a message can travel multiple hops until it reaches all nodes. The amount of hops determines the message propagation time, which is measured as the time difference of when the node published the message and when another node received. This issue aims to go from theory to practice, by i) understanding message propagation times in theory and ii) presenting nwaku simulation results in an end-to-end setup with rln, with real message propagation times.","s":"Introduction","u":"/learn/research/research-and-studies/message-propagation","h":"#introduction","p":327},{"i":332,"t":"Let's start with message propagation times in theory. On a high level, it depends on: The gossipsub configuration, being D one of the most important parameters. This sets the hops that a message will travel to reach all nodes. Higher D, less hops, less delay. Note that a higher D implies more bandwidth consumption. The node. Different nodes will see different propagation times, because a message can travel different paths. A node connected directly to the publisher (1 hop) will see lower propagation times than other nodes further away. Individual propagation times. Since a message can travel multiple hops to reach its destination, each hop adds a contribution to the overall message propagation time. This individual propagation time depends on the characteristics on the nodes involved in the connections. In a D-regular graph, like the one formed by waku nodes around a topic, the maximum amount of hops that a message can travel to reach all nodes can be calculated as ceil(log(total_nodes)/log(D)). For example, with log(1000)/log(6) = 3.85 = 4. So in a network with 1000 nodes and D=6, no matter which node publishes the message, in 4 hops it will reach all the nodes. Notice the \"worst case\" since some nodes might be directly connected to the publisher, so they will get the message in just 1 hop. But how long does it take to jump each hop? It depends on: The latency between nodes. Can be measured as the time to respond to a ping. The size of the messages. The bigger the message, the more time it takes to transmit. Nodes bandwidth. Sender upload bandwidth and receiver download bandwidth. More important when using big message sizes. Message validation time. When each node receives a message, it applies some validation to decide if the message is further gossiped or not. In the case of waku, this is RLN (paper, rfc) Assuming a message m that travels 4 hops from node n1 (publisher) to n5 (subscriber) we can calculate the message propagation time mpt=ipt_1+ipt_2+ipt_3+ipt_4 where ipt is the individual propagation time between each node in the chain. However, specific message propagation times are useless, we need average times under specific conditions. And for this, we need simulations.","s":"Theory","u":"/learn/research/research-and-studies/message-propagation","h":"#theory","p":327},{"i":334,"t":"Using shadow simulator, we have developed a tool that allows to simulate message propagation delays of nwaku (using a slightly modified branch, mainly to instrument it with tools to measure the times + starting from an already connected mesh. Thanks @Menduist for the help. Note that running this simulation requires a significant amount of resources, done with 256 GB of RAM. The configuration of the simulation is (see config): latency=100ms. Average latency in our current waku network. Thanks @vpavlin for the measurements. See this for live data. down_bandwidth=83Mbps, up_bandwidth=38Mbps. As shown in Table 2 that's the worldwide median speed. D=6, which is the current nwaku configuration. nodes=1000. Amount of nodes used in the simulation nwaku was used with a minor modification A total of 10 messages were published, that led to 9990 received messages. Since shadow doesn't take into account CPU times (by now), we simulate it with sleepAsync as per https://github.com/waku-org/research/issues/23 findings. 0.012 seconds for proof verification and 0.15 seconds for proof generation.","s":"Simulations","u":"/learn/research/research-and-studies/message-propagation","h":"#simulations","p":327},{"i":336,"t":"The following figure shows the message propagation time with real simulations, showing the distribution in a network with the above configuration with three different message sizes: 10kB, 100kB, 500kB. Note that the whiskers indicate the best/worst values and the box contains P25 to P75 values. Average mu and P95 are also shown. Raw data here. Important note. The first messages sent in the simulations are omitted, since they show an abnormal propagation delay that doesn't reflect reality. This is due to how flow control works in TCP, where right after connection, the sender node has no idea of the \"bandwidth\" of the receiver node, so it will start sending packages at a lower rate. This translates into high transmission times, and it's more pronounced when dealing with big message sizes. In other words, in a 100Mpbs link, 100Mbits won't be sent in 1 second, or at least not a the beginning, when the node is slowly increasing the rate until based on ACK/NACK ratio. For more information about this, this is explained in here. Conclusions: Using small messages 10kB the average propagation delay is 508 ms, quite reasonable for applications using waku. The variance is acceptable, with 95% of the messages arriving in <627 ms. When using a size of 10kB we can see that the best case propagation delay is 263 ms. This corresponds to the nodes that are just 1 hop from the publisher. The proof generation time 0.15 seconds affects the most, where the rest is the inter-node latency and the transmission of the message itself. We can see that the message propagation delay increases with big messages, 100kB and 500kB. So its probably not a good idea to use waku for such big messages. Note that these simulations had 1000 nodes, so if we scale it to 10000 or beyond, propagation times would be worse. Best case propagation time (lower part of the whisker) is quite similar in all cases. This is because it corresponds to the node that is just 1 hop away from the publisher. Future work: Current waku D values (average of 6 ranging from 4 to 12) have a huge impact on the bandwidth that a node consumes. Are we willing to lower D in order to reduce bandwidth but increase message propagation times? Since shadow doesn't take CPU time into account, it's currently simulated for rln, which should be the biggest bottleneck. Once shadow has this feature times would be more accurate.","s":"Results","u":"/learn/research/research-and-studies/message-propagation","h":"#results","p":327},{"i":338,"t":"This post explains i) why The Waku Network requires a capped bandwidth per shard and ii) how to achieve it by rate limiting with RLN v2.","s":"Capped Bandwidth in Waku","u":"/learn/research/research-and-studies/capped-bandwidth","h":"","p":337},{"i":340,"t":"First of all, let's begin with the terminology. We have talked in the past about \"predictable\" bandwidth, but a better name would be \"capped\" bandwidth. This is because it is totally fine that the waku traffic is not predictable, as long as it is capped. And it has to be capped because otherwise, no one will be able to run a node. Since we aim that everyone can run a full waku node (at least subscribed to a single shard) it is of paramount importance that the bandwidth requirements (up/down) are i) reasonable to run with a residential internet connection in every country and ii) limited to an upper value, aka capped. If the required bandwidth to stay up to date with a topic is higher than what the node has available, then it will start losing messages and won't be able to stay up to date with the topic messages. And not to mention the problems this will cause to other services and applications being used by the user. The main problem is that one can't just choose the bandwidth it allocates to relay. One could set the maximum bandwidth willing to allocate to store but this is not how relay works. The required bandwidth is not set by the node, but by the network. If a pubsub topic a has a traffic of 50 Mbps (which is the sum of all messages being sent multiplied by its size, times the D_out degree), then if a node wants to stay up to date in that topic, and relay traffic in it, then it will require 50 Mbps. There is no thing such as \"partially contributing\" to the topic (with eg 25Mbps) because then you will be losing messages, becoming an unreliable peer and potentially be disconnected. The network sets the pace. So waku needs an upper boundary on the in/out bandwidth (mbps) it consumes. Just like apps have requirements on cpu and memory, we should set a requirement on bandwidth, and then guarantee that if you have that bandwidth, you will be able to run a node without any problem. And this is the tricky part. This metric is Waku's constraint, similar to the gas-per-block limit in blockchains.","s":"Problem","u":"/learn/research/research-and-studies/capped-bandwidth","h":"#problem","p":337},{"i":342,"t":"Quick summary of the evolution to solve this problem: Waku started with no rate-limiting mechanism. The network was subject to DoS attacks. RLN v1 was introduced, which allowed to rate-limit in a privacy-preserving and anonymous way. The rate limit can be configured to 1 message every y seconds. However, this didn't offer much granularity. A low y would allow too many messages and a high y would make the protocol unusable (impossible to send two messages in a row). RLN v2 was introduced, which allows to rate-limit each user to x messages every y seconds. This offers the granularity we need. It is the current solution deployed in The Waku Network.","s":"Previous Work","u":"/learn/research/research-and-studies/capped-bandwidth","h":"#previous-work","p":337},{"i":344,"t":"The current solution to this problem is the usage of RLN v2, which allows to rate-limit x messages every y seconds. On top of this, the introduction of WAKU2-RLN-CONTRACT enforces a maximum amount of messages that can be sent to the network per epoch. This is achieved by limiting the amount of memberships that can be registered. The current values are: R_{max}: 160000 mgs/epoch r_{max}: 600 msgs/epoch r_{min}: 20 msgs/epoch In other words, the contract limits the amount of memberships that can be registered from 266 to 8000 depending on which rate limit users choose. On the other hand 64/WAKU2-NETWORK states that: rlnEpochSizeSec: 600. Meaning the epoch size is 600 seconds. maxMessageSize: 150KB. Meaning the maximum message size that is allowed. Note: recommended average of 4KB. Putting this all together and assuming: Messages are sent uniformly distributed. All users totally consumes its rate-limit. We can expect the following message rate and bandwidth for the whole network: A traffic of 266 msg/second on average (160000/600) A traffic of 6 MBps on average (266 * 4KB * 6), where 4KB is the average message size and 6 is the average gossipsub D-out degree. And assuming a uniform distribution of traffic among 8 shards: 33 msg/second per shard. 0.75 MBps per shard.","s":"Current Solution (RLN v2)","u":"/learn/research/research-and-studies/capped-bandwidth","h":"#current-solution-rln-v2","p":337},{"i":347,"t":"The Nim Waku Node, nwaku, has the capability of archiving messages until a certain limit (e.g. 30 days) so that other nodes can synchronize their message history throughout the Store protocol. The nwaku originally used SQLite to archive messages but this has an impact on the node. Nwaku is single-threaded and therefore, any SQLite operation impacts the performance of other protocols, like Relay. Therefore, the Postgres adoption is needed to enhance that. https://github.com/waku-org/nwaku/issues/1888","s":"Introduction","u":"/learn/research/benchmarks/postgres-adoption","h":"#introduction","p":345},{"i":349,"t":"Simply pass the next parameter to nwaku --store-message-db-url=\"postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/postgres Notice that this only makes sense if the nwaku has the Store protocol mounted --store=true (start the nwaku node with --help parameter for more Store options)","s":"How to connect the nwaku to Postgres","u":"/learn/research/benchmarks/postgres-adoption","h":"#how-to-connect-the-nwaku-to-postgres","p":345},{"i":351,"t":"https://github.com/waku-org/nwaku-compose https://github.com/waku-org/test-waku-query","s":"Examples of nwaku using Postgres","u":"/learn/research/benchmarks/postgres-adoption","h":"#examples-of-nwaku-using-postgres","p":345},{"i":353,"t":"The following repository was created as a tool to stress and compare performance between nwaku+Postgres and nwaku+SQLite: https://github.com/waku-org/test-waku-query","s":"Stress tests","u":"/learn/research/benchmarks/postgres-adoption","h":"#stress-tests","p":345},{"i":355,"t":"Maximum insert throughput​ Scenario 1 node subscribed to pubsubtopic ‘x’ and the Store protocol mounted. ‘n’ nodes connected to the “store” node, and publishing messages simultaneously to pubsubtopic ‘x’. All nodes running locally in a Dell Latitude 7640. Each published message is fixed, 1.4 KB: publish_one_client.sh The next script is used to simulate multiple nodes publishing messages: publish_multiple_clients.sh Sought goal Find out the maximum number of concurrent inserts that both SQLite and Postgres could support, and check whether Postgres behaves better than SQLite or not. Conclusion Messages are lost after a certain threshold, and this message loss is due to limitations in the Relay protocol (GossipSub - libp2p.) For example, if we set 30 nodes publishing 300 messages simultaneously, then 8997 rows were stored and not the expected 9000, in both SQLite and Postgres databases. The reason why few messages were lost is because the message rate was higher than the relay protocol can support, and therefore a few messages were not stored. In this example, the test took 38.8’’, and therefore, the node was receiving 232 msgs/sec, which is much more than the normal rate a node will work with, which is ~10 msgs/sec (rate extracted from Grafana’s stats for the status.prod fleet.) As a conclusion, the bottleneck is within the Relay protocol itself and not the underlying databases. Or, in other words, both SQLite and Postgres can support the maximum insert rate a Waku node will operate within normal conditions.","s":"Insert test results","u":"/learn/research/benchmarks/postgres-adoption","h":"#insert-test-results","p":345},{"i":357,"t":"In this case, we are comparing Store performance by means of Rest service. Scenario node_a: one nwaku node with Store and connected to Postgres. node_b: one nwaku node with Store and using SQLite. Both Postgres and SQLite contain +1 million rows. node_c: one nwaku node with REST enabled and acting as a Store client for node_a. node_d: one nwaku node with REST enabled and acting as a Store client for node_b. With jmeter, 10 users make REST Store requests concurrently to each of the “rest” nodes (node_c and node_d.) All nwaku nodes running statusteam/nim-waku:v0.19.0 This is the jmeter project used. Results With this, the node_b brings a higher throughput than the node_a and that indicates that the node that uses SQLite performs better. The following shows the measures taken by jmeter with regard to the REST requests.","s":"Query test results (jmeter)","u":"/learn/research/benchmarks/postgres-adoption","h":"#query-test-results-jmeter","p":345},{"i":359,"t":"In this test suite, only the Store protocol is being analyzed, i.e. without REST. For that, a go-waku node is used, which acts as Store client. On the other hand, we have another go-waku app that publishes random Relay messages periodically. Therefore, this can be considered a more realistic approach. The following diagram shows the topology used: For that, the next apps were used: Waku-publisher. This app can publish Relay messages with different numbers of clients Waku-store-query-generator. This app is based on the Waku-publisher but in this case, it can spawn concurrent go-waku Store clients. That topology is defined in this docker-compose file. Notice that the two nwaku nodes run the very same version, which is compiled locally. Comparing archive SQLite & Postgres performance in nwaku-b6dd6899​ The next results were obtained by running the docker-compose-manual-binaries.yml from test-waku-query-c078075 in the sandbox machine (metal-01.he-eu-hel1.misc.wakudev.status.im.) Scenario 1 Store rate: 1 user generating 1 store-req/sec. Relay rate: 1 user generating 10msg/sec, 10KB each. In this case, we can see that the SQLite performance is better regarding the store requests. The following graph shows how the SQLite node has blocking periods whereas the Postgres always gives a steady rate. Scenario 2 Store rate: 10 users generating 1 store-req/sec. Relay rate: 1 user generating 10msg/sec, 10KB each. In this case, is more evident that the SQLite performs better. Scenario 3 Store rate: 25 users generating 1 store-req/sec. Relay rate: 1 user generating 10msg/sec, 10KB each. In this case, the performance is similar regarding the timings. The store rate is bigger in SQLite and Postgres keeps the same level as in scenario 2. Comparing archive SQLite & Postgres performance in nwaku-b452ed8​ This nwaku commit is after a few Postgres optimizations were applied. The next results were obtained by running the docker-compose-manual-binaries.yml from test-waku-query-c078075 in the sandbox machine (metal-01.he-eu-hel1.misc.wakudev.status.im.) Scenario 1 Store rate 1 user generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 1 req/sec that would be expected without pagination. Relay rate: 1 user generating 10msg/sec, 10KB each. It cannot be appreciated but the average Store time was 11ms. Scenario 2 Store rate: 10 users generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 10 req/sec that would be expected without pagination. Relay rate: 1 user generating 10msg/sec, 10KB each. Scenario 3 Store rate: 25 users generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 25 req/sec that would be expected without pagination. Relay rate: 1 user generating 10msg/sec, 10KB each. Conclusions​ After comparing both systems, SQLite performs much better than Postgres However, a benefit of using Postgres is that it performs asynchronous operations, and therefore doesn’t consume CPU time that would be better invested in Relay for example. Remember that nwaku is single-threaded and chronos performs orchestration among a bunch of async tasks, and therefore it is not a good practice to block the whole nwaku process in a query, as happens with SQLite After applying a few Postgres enhancements, it can be noticed that the use of concurrent Store queries doesn’t go below the 250ms barrier. The reason for that is that most of the time is being consumed in this point. The libpqisBusy() function indicates that the connection is still busy even the queries finished. Notice that we usually have a rate below 1100 req/minute in status.prod fleet (checked November 7, 2023.)","s":"Query test results (only Store protocol)","u":"/learn/research/benchmarks/postgres-adoption","h":"#query-test-results-only-store-protocol","p":345},{"i":361,"t":"This study aims to look for possible issues when having only one single database while several Waku nodes insert or retrieve data from it. The following diagram shows the scenery used for such analysis. There are three nim-waku nodes that are connected to the same database and all of them are trying to write messages to the same PostgreSQL instance. With that, it is very common to see errors like: ERR 2023-11-27 13:18:07.575+00:00 failed to insert message topics=\"waku archive\" tid=2921 file=archive.nim:111 err=\"error in runStmt: error in dbConnQueryPrepared calling waitQueryToFinish: error in query: ERROR: duplicate key value violates unique constraint \\\"messageindex\\\"\\nDETAIL: Key (storedat, id, pubsubtopic)=(1701091087417938405, 479c95bbf74222417abf76c7f9c480a6790e454374dc4f59bbb15ca183ce1abd, /waku/2/default-waku/proto) already exists.\\n The db-postgres-hammer is aimed to stress the database from the select point of view. It performs N concurrent select queries with a certain rate. Results​ The following results were obtained by using the sandbox machine (metal-01.he-eu-hel1.misc.wakudev) and running nim-waku nodes from https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e and using the test-waku-query project from https://github.com/waku-org/test-waku-query/tree/fef29cea182cc744c7940abc6c96d38a68739356 The following shows the results Two nwaku-postgres-additional inserting messages plus 50 db-postgres-hammer making 10 selects per second. Five nwaku-postgres-additional inserting messages plus 50 db-postgres-hammer making 10 selects per second. In this case, the insert time gets more spread because the insert operations are shared amongst five more nodes. The Store query time remains the same on average. Five nwaku-postgres-additional inserting messages plus 100 db-postgres-hammer making 10 selects per second. This case is similar to 2. but stressing more the database.","s":"Multiple nodes & one single database","u":"/learn/research/benchmarks/postgres-adoption","h":"#multiple-nodes--one-single-database","p":345},{"i":364,"t":"We can think of incentivisation tools as a two-by-two matrix: rewards vs punishment; monetary vs reputation. In other words, there are four quadrants: monetary reward: the node gets rewarded; monetary punishment: the nodes deposits funds that are taken away (slashed) if it misbehaves; reputation reward: the node's reputation increases if it behaves well; reputation punishment: the node's reputation decreases if it behaves badly. Reputation only works if high reputation brings tangible benefits. For example, if nodes chose neighbors based on reputation, low-reputation nodes miss out on potential revenue. Reputation scores may be local (a node assigns scores to its neighbors) or global (each node gets a uniform score). Global reputation in its simplest form involves a trusted third party, although decentralised approaches are also possible.","s":"Incentivisation tools","u":"/learn/research/research-and-studies/incentivisation","h":"#incentivisation-tools","p":362},{"i":366,"t":"We may split incentivized decentralised networks into early file-sharing, blockchains, and decentralised storage.","s":"Prior work","u":"/learn/research/research-and-studies/incentivisation","h":"#prior-work","p":362},{"i":368,"t":"Early P2P file-sharing networks employ reputation-based approaches and sticky defaults. For instance, the BitTorrent protocol rewards uploading peers with faster downloads. The download bandwidth available to a peer depends on how much it has uploaded. Moreover, peers share pieces of a file before having received it in whole. This non-monetary i13n policy has been proved to work in practice.","s":"Early P2P file-sharing","u":"/learn/research/research-and-studies/incentivisation","h":"#early-p2p-file-sharing","p":362},{"i":370,"t":"Bitcoin has introduced proof-of-work (PoW) for native monetary rewards in a P2P network. PoW miners are automatically assigned newly mined coins for generating blocks. Miners must expend physical resources to generate a block. If the block is invalid, these expenses are not compensated (implicit monetary punishment). Proof-of-stake (PoS), used in Ethereum and many other cryptocurrencies, introduces explicit monetary punishments. PoS validators lock up (stake) native tokens and get rewarded for validating blocks or slashed for misbehaviour.","s":"Blockchains","u":"/learn/research/research-and-studies/incentivisation","h":"#blockchains","p":362},{"i":372,"t":"Post-Bitcoin decentralised storage networks include Codex, Storj, Sia, Filecoin, IPFS. Their i13n methods combine techniques from early P2P file-sharing with blockchain-inspired reward mechanisms.","s":"Decentralised storage","u":"/learn/research/research-and-studies/incentivisation","h":"#decentralised-storage","p":362},{"i":374,"t":"On this page Waku is a family of protocols for a modular privacy-preserving censorship-resistant decentralised communication network. The backbone of Waku is the Relay protocol (and its spam-protected version RLN-Relay). Additionally, there are light protocols: Store, Filter, and Lightpush. Light protocols are also referred to as client-server protocols and request-response protocols. A server is a node running Relay and a server-side of at least one light protocol. A client is a node running a client-side of any of the light protocols. A server may sometimes be referred to as a full node, and a client as a light node. There is no strict definition of a full node vs a light node in Waku (see discussion). In light protocols, a client sends a request to a server, and a server performs some actions and returns a response: Store: the server responds with messages relayed that match a set of criteria; Filter: the server will relay (only) messages that pass a filter to the client; Lightpush: the server publishes the client's message to the Relay network.","s":"Waku background","u":"/learn/research/research-and-studies/incentivisation","h":"","p":362},{"i":376,"t":"Waku has no consensus and no native token, which brings it closer to reputation-incentivised file-sharing networks. As of late 2023, Waku only operates under reputation-based rewards and punishments. While RLN-Relay adds monetary punishments for spammers, slashing is yet to be activated. Monetary rewards and punishments should ideally be atomically linked with the node's behaviour. A benefit of blockchains in this respect is that the desired behaviour of miners or validators can be verified automatically. Enforcing atomicity in a communication network is more challenging: it is non-trivial to prove that a given piece of data has been relayed. Our goal is to combine monetary and reputation-based incentives for Waku. Monetary incentives have demonstrated their robustness in blockchains. We think they are necessary to scale the network beyond the initial phase when it's maintained altruistically.","s":"Waku i13n challenges","u":"/learn/research/research-and-studies/incentivisation","h":"#waku-i13n-challenges","p":362},{"i":378,"t":"Waku Store is a light protocol for querying historic messages that works as follows: the client sends a HistoryQuery to the server; the server sends a HistoryResponse to the client. The response may be split into multiple parts, as specified by pagination parameters in PagingInfo. We define a relevant message as a message that matches client-defined criteria (e.g., relayed within a given time frame). Upon receiving a request, a server should quickly send back a response containing all and only relevant messages.","s":"Waku Store","u":"/learn/research/research-and-studies/incentivisation","h":"#waku-store","p":362},{"i":380,"t":"On this page An incentivised Store protocol has the following extra steps: pricing: cost calculation price advertisement price negotiation payment: payment itself proof of payment reputation results cross-checking In this document, we focus on the simplest proof-of-concept (PoC) i13n for Store. Compared to the fully-fledged protocol, the PoC version is simplified in the following ways: cost calculation is based on a common-knowledge price; there is no price advertisement and no price negotiation; each query is paid for in a separate transaction, txid acts a proof of payment; the reputation system is simplified (see below); the results are not cross-checked. In the PoC protocol: the client calculates the price based on the known rate per hour of history; the client pays the appropriate amount to the server's address; the client sends a HistoryQuery to the server alongside the proof of payment (txid); the server checks that the txid corresponds to a confirmed transaction with at least the required amount; the server sends a HistoryResponse to the client. In further subsections, we list the potential direction for future work towards a fully-fledged i13n mechanism.","s":"Waku Store incentivisation","u":"/learn/research/research-and-studies/incentivisation","h":"","p":362},{"i":382,"t":"For PoC, we assume a constant price per hour of history. This price and the blockchain address of the server are assumed to be common knowledge. This simplifies the client-server interaction, avoiding the price negotiation step. In the future versions of the protocol, the price will be negotiated and will depend on multiple parameters, such as the total size of the relevant messages in the response.","s":"Pricing","u":"/learn/research/research-and-studies/incentivisation","h":"#pricing","p":362},{"i":384,"t":"DoS protection - see https://github.com/waku-org/research/issues/66 Cost calculation - see https://github.com/waku-org/research/issues/35 Price advertisement - see https://github.com/waku-org/research/issues/51 Price negotiation - see https://github.com/waku-org/research/issues/52","s":"Future work","u":"/learn/research/research-and-studies/incentivisation","h":"#future-work","p":362},{"i":386,"t":"For the PoC, each request is paid for with a separate transaction. The transaction hash (txid) acts as a proof of payment. The server verifies the payment by ensuring that: the transaction has been confirmed; the transaction is paying the proper amount to the server's account; the txid does not correspond to any prior response. The client gives proof of payment before it receives the response. Other options could be: the client pays after the fact; the client pays partly upfront and partly after the fact; a centralised third party (either trusted or semi-trusted, like a smart contract) ensures atomicity; cryptographically ensured atomicity (similar to atomic swaps, Lightning, or Hopr). Our design considerations are: the PoC protocol should be simple; servers are more \"permanent\" entities and are more likely to have long-lived identities; it is more important to protect the clients's privacy than the server's privacy. In light of these criteria, we suggest that the client pays first. This is simpler than splitting the payment, or involving an extra atomicity-enforcing mechanism. Moreover, pre-payment is arguably more privacy-preserving than post-payment, which encourages servers to deanonymise clients to prevent fraud.","s":"Payment","u":"/learn/research/research-and-studies/incentivisation","h":"#payment","p":362},{"i":388,"t":"Add more payment methods - see https://github.com/waku-org/research/issues/58 Design a subscription model with service credentials - see https://github.com/waku-org/research/issues/59 Add privacy to service credentials - see https://github.com/waku-org/research/issues/60 Consider the impact of network disruptions - see https://github.com/waku-org/research/issues/65","s":"Future work","u":"/learn/research/research-and-studies/incentivisation","h":"#future-work-1","p":362},{"i":390,"t":"We use reputation to discourage the server from taking the payment and not responding. The client keeps track of the server's reputation: all servers start with zero reputation points; if the server honours the request, it gets +n points; if the server does not respond before a timeout, it gets -m points. if the server's reputation drops below k points, the client will never query it again. n, m, and k are subject to configuration. Optionally, a client may treat a given server as trusted, assigning it a constant positive reputation. Potential issues: An attacker can establish new server identities and continue running away with clients' money. Countermeasures: a client only queries trusted servers (which however leads to centralisation); when querying a new server, a client first sends a small (i.e. cheap) request as a test; more generally, the client selects a server on a case-by-case basis, weighing the payment amount against the server's reputation. The ban mechanism can theoretically be abused. For instance, a competitor may attack the victim server and cause the clients who were awaiting the response to ban that server. Countermeasure: prevent DoS-attacks.","s":"Reputation","u":"/learn/research/research-and-studies/incentivisation","h":"#reputation","p":362},{"i":392,"t":"Design a more comprehensive reputation system: local reputation - see https://github.com/waku-org/research/issues/48 global reputation - see https://github.com/waku-org/research/issues/49","s":"Future work","u":"/learn/research/research-and-studies/incentivisation","h":"#future-work-2","p":362},{"i":394,"t":"As there is no consensus over past messages, a client may want to query multiple servers and merge their responses. Cross-checking helps ensure that servers are a) not censoring real messages; b) not injecting fake messages into history. Cross-checking is absent in PoC but may be considered later.","s":"Results cross-checking","u":"/learn/research/research-and-studies/incentivisation","h":"#results-cross-checking","p":362},{"i":396,"t":"Cross-checking the results against censorship - see https://github.com/waku-org/research/issues/57 Use RLN to limit fake message insertion - see https://github.com/waku-org/research/issues/38","s":"Future work","u":"/learn/research/research-and-studies/incentivisation","h":"#future-work-3","p":362},{"i":398,"t":"On this page We should think about what the success metrics for an incentivised protocol are, and how to measure them both in simulated settings, as well as in a live network.","s":"Evaluation","u":"/learn/research/research-and-studies/incentivisation","h":"","p":362},{"i":400,"t":"On this page Analyze privacy issues - see https://github.com/waku-org/research/issues/61 Analyze decentralised storage protocols and their relevance e.g. as back-end storage for Store servers - see https://github.com/waku-org/research/issues/34 Analyze the role of message senders, in particular, whether they should pay for sending non-ephemeral messages - see https://github.com/waku-org/research/issues/32 Generalise incentivisation protocol to other Waku light protocols (Lightpush and Filter) - see https://github.com/waku-org/research/issues/67.","s":"Longer-term future work","u":"/learn/research/research-and-studies/incentivisation","h":"","p":362},{"i":403,"t":"This page summarises key performance metrics for nwaku and provides links to detailed test reports. TL;DR​ Average Waku bandwidth usage: ~10 KB/s (minus discv5 Discovery) for 1KB message size and message injection rate of 1msg/s. Confirmed for topologies of up to 2000 Relay nodes. Average time for a message to propagate to 100% of nodes: 0.4s for topologies of up to 2000 Relay nodes. Average per-node bandwidth usage of the discv5 protocol: 8 KB/s for incoming traffic and 7.4 KB/s for outgoing traffic, in a network with 100 continuously online nodes. Future improvements: A messaging API is currently in development to streamline interactions with the Waku protocol suite. Once completed, it will enable benchmarking at the messaging API level, allowing applications to more easily compare their own performance results.","s":"Introduction","u":"/learn/research/benchmarks/test-results-summary","h":"#introduction","p":401},{"i":405,"t":"Average Waku bandwidth usage: ~10 KB/s (minus discv5 Discovery) for 1KB message size and message injection rate of 1msg/s. Confirmed for topologies of up to 2000 Relay nodes. Average time for a message to propagate to 100% of nodes: 0.4s for topologies of up to 2000 Relay nodes. Average per-node bandwidth usage of the discv5 protocol: 8 KB/s for incoming traffic and 7.4 KB/s for outgoing traffic, in a network with 100 continuously online nodes. Future improvements: A messaging API is currently in development to streamline interactions with the Waku protocol suite. Once completed, it will enable benchmarking at the messaging API level, allowing applications to more easily compare their own performance results.","s":"TL;DR","u":"/learn/research/benchmarks/test-results-summary","h":"#tldr","p":401},{"i":408,"t":"The average per-node libp2p bandwidth usage in a 1000-node Relay network with 1KB messages at varying injection rates. Message Injection Rate Average libp2p incoming bandwidth (KB/s) Average libp2p outgoing bandwidth (KB/s) 1 msg/s ~10.1 ~10.3 1 msg/10s ~1.8 ~1.9","s":"Relay Bandwidth Usage: nwaku v0.34.0","u":"/learn/research/benchmarks/test-results-summary","h":"#relay-bandwidth-usage-nwaku-v0340","p":401},{"i":410,"t":"The message propagation latency is measured as the total time for a message to reach all nodes. We compare the latency in different network configurations for the following simulation parameters: Total messages published: 600 Message size: 1KB Message injection rate: 1msg/s The different network configurations tested are: Relay Config: 1000 nodes with relay enabled Mixed Config: 210 nodes, consisting of bootstrap nodes, filter clients and servers, lightpush clients and servers, store nodes Non-persistent Relay Config: 500 persistent relay nodes, 10 store nodes and 100 non-persistent relay nodes Click on a specific config to see the detailed test report. Config Average Message Propagation Latency (s) Max Message Propagation Latency (s) Relay (1000 nodes) 0.05 1.6 Mixed (210 nodes) 0.0125 0.007 Non-persistent Relay (510 nodes) 0.0125 0.25","s":"Message Propagation Latency: nwaku v0.34.0-rc1","u":"/learn/research/benchmarks/test-results-summary","h":"#message-propagation-latency-nwaku-v0340-rc1","p":401},{"i":412,"t":"The average bandwidth usage of discv5 for a network of 100 nodes and message injection rate of 0 or 1msg/s. The measurements are based on a stable network where all nodes have already connected to peers to form a healthy mesh. Message size Average discv5 incoming bandwidth (KB/s) Average discv5 outgoing bandwidth (KB/s) no message injection 7.88 6.70 1KB 8.04 7.40 10KB 8.03 7.45","s":"Discv5 Bandwidth Usage: nwaku v0.34.0","u":"/learn/research/benchmarks/test-results-summary","h":"#discv5-bandwidth-usage-nwaku-v0340","p":401},{"i":415,"t":"The VAC DST team performs regression testing on all new nwaku releases, comparing performance with previous versions. They simulate large Waku networks with a variety of network and protocol configurations that are representative of real-world usage. Test Reports: DST Reports","s":"DST","u":"/learn/research/benchmarks/test-results-summary","h":"#dst","p":401},{"i":417,"t":"The VAC QA team performs interoperability tests for nwaku and go-waku using the latest main branch builds. These tests run daily and verify protocol functionality by targeting specific features of each protocol. Test Reports: QA Reports","s":"QA","u":"/learn/research/benchmarks/test-results-summary","h":"#qa","p":401},{"i":419,"t":"The nwaku team follows a structured release procedure for all release candidates. This involves deploying RCs to status.staging fleet for validation and performing sanity checks. Release Process: nwaku Release Procedure","s":"nwaku","u":"/learn/research/benchmarks/test-results-summary","h":"#nwaku","p":401},{"i":421,"t":"The Waku Research team conducts a variety of benchmarking, performance testing, proof-of-concept validations and debugging efforts. They also maintain a Waku simulator designed for small-scale, single-purpose, on-demand testing. Test Reports: Waku Research Reports Waku Simulator: Waku Simulator Book","s":"Research","u":"/learn/research/benchmarks/test-results-summary","h":"#research","p":401},{"i":423,"t":"Waku is a nascent technology and the Waku community is still growing. Hence, the Waku team is keen to work closely with projects to help leverage Waku technology to drive the success of their own applications. We describe below the expected flow for working with Waku and some rules of engagement to set expectations for project teams interacting with the Waku team.","s":"Rules of Engagement","u":"/rules-of-engagement","h":"","p":422},{"i":425,"t":"We encourage the initial discussion to happen over a video call. However, in-person event or online discussions are also an option. During this initial interaction, the project team should present their product and the needs they have in relation to peer-to-peer communication and real time interaction. The Waku team will provide an overview of Waku and point to specific protocol and software that should help fulfil such needs. Benefits and caveats are highlighted and further documentation and examples will be provided.","s":"1. Initial discussion","u":"/rules-of-engagement","h":"#1-initial-discussion","p":422},{"i":427,"t":"Projects should review Waku documentations and libraries in their own time; start building a PoC using Waku. Projects should start designing over Waku and come up with skeleton design or user flows about specific friction points or complex area (e.g. user experience, scaling). Project should appoint one or two Waku SME (Subject Matter Expert) to drive most discussions with Waku team to start acquire expertise on Waku behaviour. Project's Waku SMEs should present unresolved design issues to Waku team. The Waku team will then review and provide skeleton design solutions on how to overcome said unresolved or complex issues.","s":"2. Solution design","u":"/rules-of-engagement","h":"#2-solution-design","p":422},{"i":429,"t":"The project should finalise a design, solution or protocol they will build using Waku. If they wish to, they can present this solution to the Waku team to get feedback and identify technical gaps. The Waku team can provide feedback, highlight potential caveats, and communicate on delivery timeline for gaps, if any. note While the Waku team can provide feedback or even design potential solution on how Waku could be integrated in an application. It is the responsibility of the project team to understand the potential caveats and limitations that may incur with such a design. The Waku team can provide options, but it is up to the project team to decide on the final solution.","s":"3. Commitment","u":"/rules-of-engagement","h":"#3-commitment","p":422},{"i":431,"t":"The project then start building their MVP using Waku. The Waku team can provide support regarding API usage, bugs encountered, documentation gaps. Waku team will use feedback raised by project to improve APIs, fix bugs and enhance documentation. Waku team continues R&D to deliver any committed technical gaps. Project delivers their MVP. note The Waku team is keen to help any usage of Waku library. Please note that code snippets are necessary for preliminary investigations of issues. Sometimes, a code snippet is not enough; in this case, a minimal reproduction repo is necessary to allow us to do further investigation. If the project is open-source, then the Waku team might try to further investigate using it, as long as the reproduction steps are easy. If no code is provided to help with the investigation, then there is nothing the Waku team can do. For any unresolved issue, the project must open an issue on the related GitHub repository under the waku-org organisation.","s":"4. Building","u":"/rules-of-engagement","h":"#4-building","p":422},{"i":433,"t":"Once the project application is live, the Waku team is keen to maintain regular contact. This can include discussion around performance, bugs found by users, etc. The Waku team is keen to regularly present new and upcoming development to project team, highlight items that are particularly relevant. If a project wishes to take onboard any new Waku protocol, or decide to extend their product with a new functionality using Waku, the circle can resume from step 1.","s":"5. Ongoing relation","u":"/rules-of-engagement","h":"#5-ongoing-relation","p":422},{"i":436,"t":"Since RLN has been chosen as the spamming protection mechanism for waku, we must understand the practical implications of using it. This issue explains the main differences between relay and rln-relay and gives some benchmarks after running simulations using waku-simulator, in a network with the following characteristics: 100 nwaku nodes, each one with a valid rln membership and publishing a message every 10 seconds to a common topic. rln contract deployed in Ethereum Sepolia 10.000 memberships registered in the contract pure relay (store and light protocols disabled) The main deltas rln vs rln-relay are: New proof field in WakuMessage containing 384 extra bytes. This field must be generated and attached to each message. New validator, that uses proof to Accept or Reject the message. The proof has to be verified. New dependency on a blockchain, Ethereum, or any EVM chain, to keep track of the members allowed to publish. But what are the practical implications of these?","s":"Introduction","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#introduction","p":434},{"i":438,"t":"Proof generation is constant-ish. 0.15 second for each proof Proof verification is constant-ish, 0.012 seconds. In a network with 10k nodes and D=6 this would add an overhead delay of 0.06 seconds. Gossipsub scoring drops connections from spammer peers, which acts as the punishment (instead of slashing). Validated in the simulation. Rln doesn't have any impact on memory consumption.","s":"TLDR:","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#tldr","p":434},{"i":440,"t":"Seems that proof generation times stay constant no matter the size of the message. In the following simulation it was increased from: 1kB, 10kB, 50kB, 150kB. On average it takes 0.15 seconds to calculate the message proof. This means that when a node wants to send a message, it will need to spend this time generating the proof. It seems very reasonable and it actually acts as a mini proof of work, where a consumer computer won't be able to publish a really high number of messages per second.","s":"Proof generation times","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#proof-generation-times","p":434},{"i":442,"t":"On the other hand, rln also adds an overhead in the gossipsub validation process. On average it takes 0.012 seconds to verify the proof. It seems that when we increase the message size, validation time seems to increase a bit, which can be for any other reason besides rln itself (eg deserializing the message might take longer). This number seems reasonable and shouldn't affect that much the average delay of a message. Assuming a d-regular graph, with 10k nodes and D=6, we can have up to log(total_nodes)/log(D)=5 hops. So in the worst case, rln will add a network latency of 0.012*5 = 0.06 seconds","s":"Proof verification times","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#proof-verification-times","p":434},{"i":444,"t":"For the initial release of RLN, slashing won't be implemented and it still remains unclear if it will be implemented in the future. Luckily, even if slashing is not implemented rln can be used to detect spam and punish the sender off-chain (instead of slashing an onchain collateral). This is done with gossipsub scoring. In the following simulation, we can see 100 nwaku interconnected nodes, where one of them suddenly starts spamming the network with multiple valid rln messages 3000 messages/minute. Since its rate limited to 1msg/10 seconds, we can see that in almost no time, every node in the network disconnects from the spammer peer (see red node), leaving it with 0 peers, which disincentivise such attacks and without requiring a financial slashing.","s":"Spam protection","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#spam-protection","p":434},{"i":446,"t":"Using RLN implies that waku should now piggyback on a blockchain (the case study uses Ethereum Sepolia) and has to stay up to date with the latest events emitted by the rln smart contract. These events are used to locally construct a tree that contains all members allowed to create valid proofs to send messages. Some numbers: A tree with 10k members takes 2Mbytes of space. Negligible. A tree with 10k members takes <4 minutes to synchronize. Assumable since it's done just once. With a block range of 5000 blocks for each request, we would need 520 requests to synchronize 1 year of historical data from the tree. Assumable since most of the free endpoints out there allow 100k/day.","s":"RLN tree sync","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#rln-tree-sync","p":434},{"i":448,"t":"Same simulation with 100 nodes was executed with rln and without rln: Memory consumption is almost identical with rln without rln Couldn't capture cpu metrics Minor differences in messages per seconds is due to injection technique, nothing related to rln itself.","s":"Performance relay vs. rln-relay","u":"/learn/research/research-and-studies/rln-key-benchmarks","h":"#performance-relay-vs-rln-relay","p":434},{"i":450,"t":"Last updated: 9 February 2024 This Privacy Policy is intended to inform users of our approach to privacy in respect of this website (\"Website\"). In this regard, if you are visiting our Website, this Privacy Policy applies to you.","s":"Privacy Policy","u":"/privacy-policy","h":"","p":449},{"i":452,"t":"For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at Logos Collective Association c/o PST Consulting GmbH Baarerstrasse 10 6300 Zug Switzerland Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association.","s":"1) Who we are","u":"/privacy-policy","h":"#1-who-we-are","p":449},{"i":454,"t":"We aim to limit the collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose. In this regard, we collect and process the following personal data from your use of the Website: IP address: As part of such use of the Website we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time.","s":"2) We limit the collection and processing of personal data from your use of the Website","u":"/privacy-policy","h":"#2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website","p":449},{"i":456,"t":"In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply.","s":"3) Third party processing of personal data","u":"/privacy-policy","h":"#3-third-party-processing-of-personal-data","p":449},{"i":458,"t":"As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us.","s":"4) Security measures we take in respect of the Website","u":"/privacy-policy","h":"#4-security-measures-we-take-in-respect-of-the-website","p":449},{"i":460,"t":"We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation.","s":"5) Exporting data outside the European Union and Switzerland","u":"/privacy-policy","h":"#5-exporting-data-outside-the-european-union-and-switzerland","p":449},{"i":462,"t":"As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to: Ask us to correct or update your personal data (where reasonably possible); Ask us to remove your personal data from our systems; Ask us for a copy of your personal data, which may also be transferred to another data controller at your request; Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent; Object to the processing of your personal data; and File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully.","s":"6) Your choices and rights","u":"/privacy-policy","h":"#6-your-choices-and-rights","p":449},{"i":464,"t":"On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites.","s":"7) Third party links","u":"/privacy-policy","h":"#7-third-party-links","p":449},{"i":466,"t":"We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.","s":"8) This Privacy Policy might change","u":"/privacy-policy","h":"#8-this-privacy-policy-might-change","p":449},{"i":468,"t":"To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology. This document is licensed under CC-BY-SA.","s":"9) Contact information","u":"/privacy-policy","h":"#9-contact-information","p":449},{"i":470,"t":"Nwaku is a lightweight and robust Nim client for running a Waku node, equipped with tools to monitor and maintain a running node. Nwaku is highly configurable, enabling operators to select the protocols they want to support based on their needs, motivations, and available resources.","s":"Run a Waku Node","u":"/run-node/","h":"","p":469},{"i":473,"t":"The easiest way to run a Waku node is using Docker Compose. This setup automatically configures: A nwaku node with Relay, Store, and RLN protocols A simple web interface to send and receive messages Grafana dashboard for monitoring your node","s":"Quick Start with Docker Compose (Recommended)","u":"/run-node/","h":"#quick-start-with-docker-compose-recommended","p":469},{"i":475,"t":"Git Docker and Docker Compose Linea Sepolia RPC endpoint: You can get a free endpoint from Infura or any other Linea Sepolia RPC provider. System Requirements We recommend at least 2GB of RAM, especially if WSS is enabled. For a Relay-only node, 0.5GB of RAM is sufficient.","s":"Prerequisites","u":"/run-node/","h":"#prerequisites","p":469},{"i":477,"t":"# Clone the repository git clone https://github.com/waku-org/nwaku-compose cd nwaku-compose # Configure your node cp .env.example .env # Edit .env with your settings # Start your node docker-compose up -d For detailed setup instructions, see Run Nwaku with Docker Compose.","s":"Get Started","u":"/run-node/","h":"#get-started","p":469},{"i":479,"t":"While Docker Compose is recommended, you can also: Run in Docker Container - For custom Docker deployments Build from Source - Compile the latest nwaku code Download Binary - Use precompiled releases","s":"Alternative Installation Methods","u":"/run-node/","h":"#alternative-installation-methods","p":469},{"i":481,"t":"Once your node is running, you can: Configure Discovery - Set up peer discovery mechanisms Configure Your Node - Customize protocols and settings Find Node Addresses - Locate your node's network addresses","s":"Node Configuration","u":"/run-node/","h":"#node-configuration","p":469},{"i":483,"t":"Access the Grafana dashboard at http://localhost:3000 (if using Docker Compose) Use the REST API to interact with your node Check node health at http://localhost:8645/health tip Download the Waku Node Operator Cheatsheet for quick reference on operating your node.","s":"Monitoring and Maintenance","u":"/run-node/","h":"#monitoring-and-maintenance","p":469},{"i":485,"t":"If you encounter issues or need assistance: Visit the #help-desk channel on Discord Check the FAQ for common questions Review the upgrade instructions when updating your node","s":"Get Help","u":"/run-node/","h":"#get-help","p":469},{"i":487,"t":"info When starting the node, nwaku will display all the public listening and discovery addresses at the INFO log level. You can find the addresses of a running node through its logs or by calling the Get node info endpoint of the REST API.","s":"Find Your Node Address","u":"/run-node/find-node-address","h":"","p":486},{"i":489,"t":"Look for the log entry that begins with Listening on, for example: Nwaku Log Output INF 2023-06-15 16:09:54.448+01:00 Listening on topics=\"waku node\" tid=1623445 file=waku_node.nim:922 full=[/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn][/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn] # Listening TCP transport address /ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn # Listening WebSocket address /ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn","s":"Listening addresses","u":"/run-node/find-node-address","h":"#listening-addresses","p":486},{"i":491,"t":"A nwaku node can encode its addressing information in an Ethereum Node Record (ENR).","s":"Discoverable ENR addresses","u":"/run-node/find-node-address","h":"#discoverable-enr-addresses","p":486},{"i":493,"t":"Look for the log entry that begins with DNS: discoverable ENR, for example: Nwaku Log Output INF 2023-06-15 16:09:54.448+01:00 DNS: discoverable ENR topics=\"waku node\" tid=1623445 file=waku_node.nim:923 enr=enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB # ENR the node addresses are encoded in enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB","s":"ENR for DNS discovery","u":"/run-node/find-node-address","h":"#enr-for-dns-discovery","p":486},{"i":495,"t":"Look for the log entry that begins with Discv5: discoverable ENR, for example: Nwaku Log Output INF 2023-06-15 16:09:54.448+01:00 Discv5: discoverable ENR topics=\"waku node\" tid=1623445 file=waku_node.nim:924 enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw # ENR the node addresses are encoded in enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw Congratulations! You have successfully found the listening and discoverable addresses for your nwaku node. Have a look at the Configure Peer Discovery guide to learn how to discover and connect with peers in the network.","s":"ENR for Discv5","u":"/run-node/find-node-address","h":"#enr-for-discv5","p":486},{"i":497,"t":"Waku nodes can be configured using a combination of the following methods: Command line options and flags Environment variables TOML configuration files (currently the only supported format) Default values info Take note of the precedence order: Each configuration method overrides the one below it (e.g., command line options override environment variables and configuration files).","s":"Node Configuration Methods","u":"/run-node/config-methods","h":"","p":496},{"i":499,"t":"Node configuration is primarily done using command line options, which override other methods. Specify configuration options by providing them in this format after the binary name: ./build/wakunode2 --tcp-port=65000 When running your node with Docker, provide the command line options after the image name in this format: docker run wakuorg/nwaku --tcp-port=65000","s":"Command line options","u":"/run-node/config-methods","h":"#command-line-options","p":496},{"i":501,"t":"Nodes can be configured using environment variables by prefixing the variable name with WAKUNODE2_ and using the configuration option in SCREAMING_SNAKE_CASE format. To set the tcp-port configuration, the wakunode2 binary should be called in this format: WAKUNODE2_TCP_PORT=65000 ./build/wakunode2 When running your node with Docker, start the node using the -e command option: docker run -e \"WAKUNODE2_TCP_PORT=65000\" wakuorg/nwaku info This is the second configuration method in order of precedence. Command Line Options override environment variables.","s":"Environment variables","u":"/run-node/config-methods","h":"#environment-variables","p":496},{"i":503,"t":"Nodes can be configured using a configuration file following the TOML format: TOML Config File log-level = \"DEBUG\" tcp-port = 65000 topic = [\"/waku/2/default-waku/proto\"] metrics-logging = false The config-file configuration option lets you specify the configuration file path: ./build/wakunode2 --config-file=[TOML CONFIGURATION FILE] You can also specify the configuration file via environment variables: # Using environment variables WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE] ./build/wakunode2 # Using environment variables with Docker docker run -e \"WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE]\" wakuorg/nwaku info This is the third configuration method in order of precedence. Command Line Options and Environment Variables override configuration files.","s":"Configuration files","u":"/run-node/config-methods","h":"#configuration-files","p":496},{"i":505,"t":"The default configuration is used when no other options are specified. By default, a nwaku node does the following: Generate a new Node Key and PeerID. Listen for incoming libp2p connections on the default TCP port (60000). Subscribe to the default Pub/Sub topic (/waku/2/default-waku/proto). Enable the Relay protocol for relaying messages. Enable the Store protocol as a client, allowing it to query peers for historical messages but not store any message itself. To see the default values of all configuration options, run wakunode2 --help: ./build/wakunode2 --help tip To explore the available node configuration options, have a look at the Node Configuration Options guide.","s":"Default configuration values","u":"/run-node/config-methods","h":"#default-configuration-values","p":496},{"i":507,"t":"nwaku-compose is a ready-to-use Docker Compose setup that configures the following automatically: nwaku node running Relay and Store protocols with RLN enabled. Simple frontend to interact with the node and Waku network to send and receive messages. Grafana metrics dashboard for advanced users and node operators to monitor the node.","s":"Run Nwaku with Docker Compose","u":"/run-node/run-docker-compose","h":"","p":506},{"i":509,"t":"tip Check out the Waku Node Operator Cheatsheet to learn how to easily run, monitor, and interact with a node.","s":"Video tutorial","u":"/run-node/run-docker-compose","h":"#video-tutorial","p":506},{"i":511,"t":"Git or GitHub Desktop Docker and Docker Compose Linea Sepolia RPC endpoint: You can get a free endpoint from Infura or any other Linea Sepolia RPC provider. info We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.","s":"Prerequisites","u":"/run-node/run-docker-compose","h":"#prerequisites","p":506},{"i":513,"t":"git clone https://github.com/waku-org/nwaku-compose cd nwaku-compose","s":"Clone the repository","u":"/run-node/run-docker-compose","h":"#clone-the-repository","p":506},{"i":515,"t":"Docker Compose reads the .env file from the filesystem. You can use .env.example as a template to provide the configuration values. The recommended process for working with .env files is to duplicate .env.example, rename it as .env, and then make the necessary value edits. cp .env.example .env ${EDITOR} .env caution Ensure that you do NOT include any secrets in the .env.example file, as it could accidentally be shared in your Git repository.","s":"Configure the setup","u":"/run-node/run-docker-compose","h":"#configure-the-setup","p":506},{"i":517,"t":"Launch all the processes: nwaku node, database for storing messages, and Grafana for metrics with the following command. Your RLN membership is loaded into nwaku under the hood: docker-compose up -d View the logs of the node to confirm that it is running correctly: docker-compose logs -f nwaku","s":"Run the node","u":"/run-node/run-docker-compose","h":"#run-the-node","p":506},{"i":519,"t":"Visit http://localhost:3000/d/yns_4vFVk/nwaku-monitoring to view your node metrics in real time. tip To access Grafana from outside your machine, remove 127.0.0.1 and open the port. Consider setting up a password for Grafana to ensure security.","s":"Monitor the node","u":"/run-node/run-docker-compose","h":"#monitor-the-node","p":506},{"i":521,"t":"Your nwaku node provides a REST API on port 8645 for interacting with it: # Get nwaku version curl --location 'http://127.0.0.1:8645/debug/v1/version' # Get nwaku info curl --location 'http://127.0.0.1:8645/debug/v1/info' Retrieve messages sent to a contentTopic. Please note that this query can be made to any Store node within the network: curl --location 'http://127.0.0.1:8645/store/v1/messages?contentTopics=%2Fmy-app%2F2%2Fchatroom-1%2Fproto&pageSize=50&ascending=true' \\ --header 'Accept: application/json' tip If you encounter issues running your node or require assistance with anything, please visit the - Visit the #help-desk channel on Discord. Congratulations! You have successfully started a nwaku node with RLN enabled using Docker Compose. Have a look at the Node Configuration Examples and Advanced Configuration guides to learn how to configure nwaku for different use cases.","s":"Interact with the node","u":"/run-node/run-docker-compose","h":"#interact-with-the-node","p":506},{"i":523,"t":"This guide provides detailed steps to build a nwaku node from the source code to access the latest development version or a specific commit or release of nwaku. For your convenience, you may want to download a pre-compiled binary instead. info A minimum of 2GB of RAM is required to build nwaku. Nwaku is available for Linux and macOS, with experimental Windows support.","s":"Build Nwaku from Source","u":"/run-node/build-source","h":"","p":522},{"i":525,"t":"To build nwaku, you need the standard developer tools, including a C compiler, GNU Make, Bash, Git, Rustup, and PostgreSQL client library. Debian and Ubuntu Fedora Arch Linux MacOS (Homebrew) sudo apt-get install build-essential git libpq5 jq curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source \"$HOME/.cargo/env\" sudo dnf install @development-tools git libpq-devel which curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Using your favoured AUR helper sudo [AUR HELPER] -S base-devel git postgresql-libs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh brew install cmake git postgresql@15 rustup-init # Create a symbolic link to libpq.5.dylib in /usr/local/lib/ sudo mkdir -p /usr/local/lib/ sudo ln -s /opt/homebrew/opt/postgresql@15/lib/libpq.5.dylib /usr/local/lib/libpq.dylib","s":"Prerequisites","u":"/run-node/build-source","h":"#prerequisites","p":522},{"i":527,"t":"Get the source code from the GitHub repository. The default branch is master, the release candidate for major updates. git clone https://github.com/waku-org/nwaku cd nwaku tip You can use git tag -l to check specific version tags.","s":"Clone the repository","u":"/run-node/build-source","h":"#clone-the-repository","p":522},{"i":529,"t":"Build the nwaku binary: make wakunode2 The first make invocation updates to all Git submodules. After each git pull, run make update to keep the submodules updated in the future. make update","s":"Build the binary","u":"/run-node/build-source","h":"#build-the-binary","p":522},{"i":531,"t":"Nwaku will create the wakunode2 binary in the ./build/ directory. # Run with default configuration ./build/wakunode2 # See available command line options ./build/wakunode2 --help To learn more about running nwaku, have a look at these guides: Run a Nwaku Node Run Nwaku in a Docker Container Run Nwaku with Docker Compose Node Configuration Methods","s":"Run the binary","u":"/run-node/build-source","h":"#run-the-binary","p":522},{"i":533,"t":"Run the tests for Waku: make test Congratulations! You have successfully built the nwaku binary from the source code. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.","s":"Run test suite","u":"/run-node/build-source","h":"#run-test-suite","p":522},{"i":535,"t":"This guide provides detailed steps to build and run a nwaku node in a Docker container. If you prefer a pre-configured setup with a monitoring dashboard, see the Run Nwaku with Docker Compose guide.","s":"Run Nwaku in a Docker Container","u":"/run-node/run-docker","h":"","p":534},{"i":537,"t":"Ensure Docker is installed on your system using the appropriate instructions provided in the Docker documentation. info We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient.","s":"Prerequisites","u":"/run-node/run-docker","h":"#prerequisites","p":534},{"i":539,"t":"The Nwaku Docker images are available on the Docker Hub public registry under the wakuorg/nwaku repository. Please visit wakuorg/nwaku/tags for images of specific releases.","s":"Get Docker image","u":"/run-node/run-docker","h":"#get-docker-image","p":534},{"i":541,"t":"You can also build the Docker image locally: # Clone the repository git clone --recurse-submodules https://github.com/waku-org/nwaku cd nwaku # Build docker image make docker-image","s":"Build Docker image","u":"/run-node/run-docker","h":"#build-docker-image","p":534},{"i":543,"t":"Run nwaku in a new Docker container: docker run [OPTIONS] [IMAGE] [ARG...] OPTIONS are your selected Docker options IMAGE is the image and tag you pulled from the registry or built locally ARG... is the list of arguments for your node configuration options Run nwaku using the most typical configuration: docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.32.0 \\ --dns-discovery=true \\ --dns-discovery-url=enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im \\ --discv5-discovery=true \\ --nat=extip:[YOUR PUBLIC IP] # or, if you are behind a nat: --nat=any To find your public IP, use: dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{ print $2}' For more detailed information about all possible configurations, please run docker run -t wakuorg/nwaku:v0.32.0 --help info Note that running a node in The Waku Network (--cluster-id=1) requires a special set of configurations and therefore, it is recommended to run in this case with docker compose info We recommend using explicit port mappings (-p) when exposing ports accessible from outside the host (listening and discovery ports, API servers). tip If you encounter issues running your node or require assistance with anything, please visit the - Visit the #help-desk channel on Discord. Congratulations! You have successfully built and started a nwaku node in a Docker container. Have a look at the Node Configuration Examples guide to learn how to configure nwaku for different use cases.","s":"Run Docker container","u":"/run-node/run-docker","h":"#run-docker-container","p":534},{"i":545,"t":"Waku is a family of robust, censorship-resistant, peer-to-peer communication protocols that enable privacy-focused messaging for Web3 applications, allowing you to integrate decentralised communication features into your dApp without compromising security or privacy. Start BuildingRun a NodeLearn More tip Check out our Learn section, YouTube channel, and Blog to dive into how Waku works behind the scenes!","s":"Introduction to Waku","u":"/","h":"","p":544},{"i":547,"t":"Waku is not a blockchain but a network composed of protocols designed for Web3 communication, operating without the need for gas fees. Waku is not just for messaging applications; it supports the development of complex applications that require secure and private data transmission. Waku is not a long-term data storage network; it focuses on short, ephemeral, real-time messaging.","s":"What isn’t Waku?","u":"/","h":"#what-isnt-waku","p":544},{"i":549,"t":"Chat Messengers: Waku can be used to build private, decentralised chat apps resistant to censorship. Voting and Proposals: Exchange votes on proposals off-chain via Waku to save gas fees, then submit aggregated results to the blockchain. NFT Marketplaces: Use Waku to handle off-chain NFT bids and offers for gas savings, and to integrate social interactions like likes and comments. State Channels: Establish and maintain state channels with Waku, facilitating seamless message exchanges and updates without blockchain interaction. Signature Exchange for Multi-Signature Wallets: Allow multi-signature wallet owners to exchange signatures privately and securely through Waku. Game Mechanics Communication: Implement Waku as a communication layer for decentralised, peer-to-peer gaming, avoiding centralised infrastructure. Layer 2 Coordination (Open Market, Spam Protected Mempool): Broadcast and aggregate Layer 2 transactions via Waku to enhance privacy and scalability, reducing network load. Social Media Platforms: Beyond chat messengers, use Waku for decentralised, censorship-resistant social media platforms like news feeds and multimedia sharing. tip Looking for what to build with Waku? Discover a collection of sample ideas and use cases for inspiration, curated by our community at: https://ideas.waku.org/ and Awesome Waku.","s":"What can Waku be used for?","u":"/","h":"#what-can-waku-be-used-for","p":544},{"i":552,"t":"This guide provides detailed steps to configure a nwaku node to discover and connect with peers in the Waku Network. info You can configure a nwaku node to use multiple peer discovery mechanisms simultaneously.","s":"Configure Peer Discovery","u":"/run-node/configure-discovery","h":"","p":551},{"i":554,"t":"You can provide static peers to a nwaku node during startup using the staticnode configuration option. To connect to multiple peers on startup, repeat the staticnode option: ./build/wakunode2 \\ --staticnode=[PEER MULTIADDR 1] \\ --staticnode=[PEER MULTIADDR 2] For example, consider a nwaku node that connects to two static peers on the same local host (IP: 0.0.0.0) using TCP ports 60002 and 60003: ./build/wakunode2 \\ --staticnode=/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \\ --staticnode=/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ","s":"Configure static peers","u":"/run-node/configure-discovery","h":"#configure-static-peers","p":551},{"i":556,"t":"To enable DNS Discovery in a nwaku node, use the following configuration options: dns-discovery: Enables DNS Discovery on the node (disabled by default). dns-discovery-url: URL for DNS node list in the format enrtree://@ where is the fully qualified domain name and is the base32 encoding of the compressed 32-byte public key that signed the list at that location. dns-discovery-name-server (optional): DNS name server IPs to query. You can repeat this option to provide multiple DNS name servers. ./build/wakunode2 \\ --dns-discovery=true \\ --dns-discovery-url=enrtree://[PUBLIC KEY]@[DOMAIN NAME] \\ --dns-discovery-name-server=[DNS NAME SERVER IP] info If you omit the dns-discovery-name-server option, nwaku will attempt to use the CloudFlare servers 1.1.1.1 and 1.0.0.1. For example, consider a nwaku node that enables DNS Discovery, connects to a DNS node list, and queries the IPs 8.8.8.8 and 8.8.4.4: ./build/wakunode2 \\ --dns-discovery=true \\ --dns-discovery-url=enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im \\ --dns-discovery-name-server=8.8.8.8 \\ --dns-discovery-name-server=8.8.4.4","s":"Configure DNS discovery","u":"/run-node/configure-discovery","h":"#configure-dns-discovery","p":551},{"i":558,"t":"To enable Discv5 in a nwaku node, use the following configuration options: discv5-discovery: Enables Discv5 on the node (disabled by default). discv5-bootstrap-node: ENR for Discv5 routing table bootstrap node. You can repeat this option to provide multiple bootstrap entries. ./build/wakunode2 \\ --discv5-discovery=true \\ --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 1] \\ --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 2] For example, consider a nwaku node that enables Discv5 and bootstraps its routing table using a static ENR: ./build/wakunode2 \\ --discv5-discovery=true \\ --discv5-bootstrap-node=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw info When Discv5 is enabled and used with DNS Discovery, the nwaku node will attempt to bootstrap the Discv5 routing table by extracting ENRs from peers discovered through DNS.","s":"Configure Discv5","u":"/run-node/configure-discovery","h":"#configure-discv5","p":551},{"i":560,"t":"To enable Peer Exchange in a nwaku node, use the following configuration options: peer-exchange: Enables Peer Exchange on the node as a responder (disabled by default). peer-exchange-node (optional): Multiaddr for bootstrap node with the peer exchange protocol enabled. ./build/wakunode2 \\ --peer-exchange=true \\ --peer-exchange-node=[PEER MULTIADDR WITH EXCHANGE ENABLED] For example, consider two nwaku nodes configured as a server (peer exchange responder node) and client (node using peer exchange) on the same local host (IP: 0.0.0.0): Server: Nwaku Node with Peer Exchange Enabled ./build/wakunode2 --peer-exchange=true Client: Nwaku Node Bootstrapping with Peer Exchange ./build/wakunode2 \\ --tcp-port=30305 \\ --ports-shift=1 \\ --peer-exchange-node=/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmLCe6zVqCS6KMqqRbbhyoJjfYZGr1Q3thTSbyKzibQkFR info nwaku provides a relay-peer-exchange option via libp2p for peer exchange, allowing network growth through neighbouring nodes. However, this feature can compromise security and network robustness, so we recommend only using it in high-trust environments.","s":"Configure peer exchange","u":"/run-node/configure-discovery","h":"#configure-peer-exchange","p":551},{"i":562,"t":"Last updated: 14 February 2024 These website terms of use ('Website Terms of Use') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website. It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use. If you do not agree with these Website Terms of Use, you must not access or use the Website.","s":"Terms of Use","u":"/terms","h":"","p":561},{"i":564,"t":"For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at: Logos Collective Association c/o PST Consulting GmbH Baarerstrasse 10 6300 Zug Switzerland Whenever we refer to “Logos”, “we”, “us” or any other similar references, we are referring to the Logos Collective Association.","s":"1) Who we are","u":"/terms","h":"#1-who-we-are","p":561},{"i":566,"t":"The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk. We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law. We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws. The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein. The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such. Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security.","s":"2) Disclaimers","u":"/terms","h":"#2-disclaimers","p":561},{"i":568,"t":"The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general. The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website. While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion.","s":"3) Forward looking statements","u":"/terms","h":"#3-forward-looking-statements","p":561},{"i":570,"t":"The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: https://creativecommons.org/licenses/by/4.0/.","s":"4) Intellectual property rights","u":"/terms","h":"#4-intellectual-property-rights","p":561},{"i":572,"t":"To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites.","s":"5) Third-party website links","u":"/terms","h":"#5-third-party-website-links","p":561},{"i":574,"t":"We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.","s":"6) Limitation of liability","u":"/terms","h":"#6-limitation-of-liability","p":561},{"i":576,"t":"You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.","s":"7) Indemnity","u":"/terms","h":"#7-indemnity","p":561},{"i":578,"t":"We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.","s":"8) Modifications","u":"/terms","h":"#8-modifications","p":561},{"i":580,"t":"Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.","s":"9) Governing law","u":"/terms","h":"#9-governing-law","p":561},{"i":582,"t":"In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website. We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions. If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking. If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration. Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.","s":"10) Disputes","u":"/terms","h":"#10-disputes","p":561},{"i":584,"t":"These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website. The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use. If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them. If you have any specific questions about these Website Terms of Use, please contact us at legal@free.technology. This document is licensed under CC-BY-SA.","s":"11) About these Website Terms of Use","u":"/terms","h":"#11-about-these-website-terms-of-use","p":561},{"i":586,"t":"We take security seriously at Waku and across the Institute of Free Technology and its affiliates. Please report any security incidents via security@free.technology. Please report any discovered vulnerabilities in our bounty programme at HackenProof to help ensure our protocols and software remain secure.","s":"Security","u":"/security","h":"","p":585},{"i":588,"t":"How can I run a Waku node? Check out the Run Nwaku with Docker Compose guide to learn the simplest and fastest way to run a node. You can also check the comprehensive Run a Nwaku Node guide to explore other options like downloading binaries and building from source. What are the system requirements for running a node? We recommend running a nwaku node with at least 2GB of RAM, especially if WSS is enabled. If running just a Relay node, 0.5GB of RAM is sufficient. How can I interact with my running nwaku node? You can interact with a running nwaku node using the REST API interface or the JavaScript Waku SDK. How can I view the logs of a nwaku node running in Docker? To check your node logs in Docker, use the command: \"docker-compose logs -f nwaku\" What configuration methods are available for nwaku nodes? You can configure Nwaku nodes using command line options and flags, environment variables, and TOML configuration files. Check out the Node Configuration Methods guide to understand their usage and priority. How can I configure my nwaku node before running? Check out the Node Configuration Options guide for available node configuration options, their default values and descriptions. For examples of common configuration use cases, visit the Node Configuration Examples guide. What peer discovery mechanisms are available for nwaku nodes, and how can I configure them? You can configure peer discovery for nwaku nodes through options like Static Peers, DNS Discovery, DiscV5, and Peer Exchange. Check out the Configure Peer Discovery guide for setting up your node. How do I find my nwaku node's addresses for peer discovery? The node listening and ENR addresses can be found through the node's logs and REST API. Check out the Find the node addresses section to understand how to locate your node addresses.","s":"Nwaku FAQ","u":"/run-node/faq","h":"","p":587},{"i":590,"t":"This guide provides detailed steps to configure a nwaku node for different use cases.","s":"Node Configuration Examples","u":"/run-node/configure-nwaku","h":"","p":589},{"i":592,"t":"To join the Waku Network, nodes must bootstrap for an entry point before discovering more peers. Nwaku provides multiple peer discovery mechanisms: Configure Static Peers Configure DNS Discovery Configure Discv5 Configure Peer Exchange","s":"Connect to other peers","u":"/run-node/configure-nwaku","h":"#connect-to-other-peers","p":589},{"i":594,"t":"You can set up an IPv4 DNS domain name that resolves to the public IPv4 address of a node using the dns4-domain-name option. This allows the node's publicly announced multiaddrs to use the /dns4 scheme. ./build/wakunode2 --dns4-domain-name=[DOMAIN NAME] For example, consider the domain name nwakunode.com, which resolves to a nwaku node: ./build/wakunode2 --dns4-domain-name=nwakunode.com Browser nodes can only connect to nodes with a domain name and secure WebSocket (wss) configured. These nodes will generate a discoverable ENR with /wss as the multiaddr and /dns4 as the domain name. This configuration is essential for verifying domain certificates when establishing a secure connection. info This example describes configuring a domain name that resolves to your node's IP address and is unrelated to DNS Discovery. tip You can use the domain name provided by your cloud provider to configure the domain name for your node.","s":"Configure a domain name","u":"/run-node/configure-nwaku","h":"#configure-a-domain-name","p":589},{"i":596,"t":"To enable message caching and serve them to network peers, enable the Store protocol using the following configuration options: store: Enables storing messages to serve them to peers (disabled by default). store-message-retention-policy: Retention policy of the store node (how long messages will be stored). Three different retention policies are supported: Time retention policy: time: (e.g., time:14400) Capacity retention policy: capacity: (e.g, capacity:25000) Size retention policy: size: (e.g, size:512MB or size:10GB) Set this option to none to disable the retention policy. If you omit this option, it will default to time:172800 (48 hours). store-message-db-url: Database connection URL for storing messages in the SQLAlchemy database URL format. Setting this option to an empty string will instruct the node to use the fallback in-memory message store. If you omit this option, it will default to sqlite://store.sqlite3. ./build/wakunode2 \\ --store=true \\ --store-message-retention-policy=[MESSAGE RETENTION POLICY] \\ --store-message-db-url=[DATABASE CONNECTION URL] For example, consider a nwaku node that is configured to be a Store protocol and retain messages received in the last 21600 seconds (6 hours): ./build/wakunode2 \\ --store=true \\ --store-message-retention-policy=time:21600 \\ --store-message-db-url=sqlite://store.sqlite3 You can configure nwaku as a Store client using the storenode option. This allows the node to query peers for historical messages but not store any message itself. ./build/wakunode2 --storenode=[STORE PEER MULTIADDR] For example, consider a nwaku node that does not store messages but can query peers for historical messages: ./build/wakunode2 --storenode=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV","s":"Configure store protocol and message store","u":"/run-node/configure-nwaku","h":"#configure-store-protocol-and-message-store","p":589},{"i":598,"t":"To enable synchronization between stores, enable the protocol via the configuration options below; store-sync: Enable store sync protocol (disable by default). store-sync-interval: Interval between store synchronization attempts, in seconds (300s default). store-sync-range: Amount of time to sync, in seconds (3600s default). store-sync-relay-jitter: Sync range offset to account for relay's message propagation jitter, in seconds (20s default). Configuration example. ./build/wakunode2 \\ --store-sync=true \\ --store-sync-interval=300 \\ --store-sync-range=3600 \\ --store-sync-relay-jitter=20","s":"Configure store sync","u":"/run-node/configure-nwaku","h":"#configure-store-sync","p":589},{"i":600,"t":"Nodes generate new random key pairs at each boot, leading to different multiaddrs. To maintain consistency, you can use a pre-generated private key with the nodekey option: ./build/wakunode2 --nodekey=[NODE PRIVATE KEY] This option takes a Secp256k1 private key (64-char hex string). On Linux, you can use the OpenSSL rand command for a pseudo-random 32-byte hex string: openssl rand -hex 32 # 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 On Linux, you can create a reusable key file using OpenSSL. To get the 32-byte private key in hex format, use the ecparam command and some standard utilities: # Generate key file openssl ecparam -genkey -name secp256k1 -out my_private_key.pem # Extract 32-byte private key openssl ec -in my_private_key.pem -outform DER | tail -c +8 | head -c 32| xxd -p -c 32 # read EC key # writing EC key # 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 You can use the output 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 as a Node Key for nwaku: ./build/wakunode2 --nodekey=286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8","s":"Generate and configure a node key","u":"/run-node/configure-nwaku","h":"#generate-and-configure-a-node-key","p":589},{"i":602,"t":"WebSocket is the only transport method browser nodes support using @waku/sdk. To enable WebSocket in nwaku to serve browser peers, use the following configuration options: websocket-support: Enables WebSocket (ws) on the node (disabled by default). websocket-port (optional): WebSocket listening port. If you omit this option, it will default to 8000. websocket-secure-support: Enables Secure WebSocket (wss) on the node (disabled by default). websocket-secure-key-path: Secure WebSocket key path. websocket-secure-cert-path: Secure WebSocket Certificate path. ./build/wakunode2 \\ --websocket-support=true \\ --websocket-port=[WEBSOCKET LISTENING PORT] \\ --websocket-secure-support=true \\ --websocket-secure-key-path=[SECURE WEBSOCKET KEY PATH] \\ --websocket-secure-cert-path=[SECURE WEBSOCKET CERTIFICATE PATH] For example, consider a nwaku node that enabled WebSocket (unencrypted) for local testing on port 8001: ./build/wakunode2 \\ --websocket-support=true \\ --websocket-port=8001 Consider a nwaku node that enabled Secure WebSocket (encrypted) using its key and certificate (privkey.pem and fullchain.pem) on port 8002: ./build/wakunode2 \\ --websocket-secure-support=true \\ --websocket-secure-key-path=privkey.pem \\ --websocket-secure-cert-path=fullchain.pem \\ --websocket-port=8002 tip You can use Let's Encrypt or Certbot to generate a valid certificate for your nwaku node: sudo certbot certonly -d ","s":"Configure WebSocket transport","u":"/run-node/configure-nwaku","h":"#configure-websocket-transport","p":589},{"i":604,"t":"Nwaku provides a REST API to interact with the node and Waku Network. To enable the REST API, use the following configuration options: rest: Enables the REST API server on the node (disabled by default). rest-address (optional): Listening address of the REST API server. If you omit this option, it will default to 127.0.0.1. rest-port (optional): Listening port of the REST API server. If you omit this option, it will default to 8645. rest-relay-cache-capacity (optional): Capacity of the Relay REST API message cache. If you omit this option, it will default to 30. rest-admin (optional): Enables access to REST admin API (disabled by default). rest-private (optional): Enables access to REST private API (disabled by default). ./build/wakunode2 \\ --rest=true \\ --rest-address=[REST SERVER LISTENING ADDRESS] \\ --rest-port=[REST SERVER LISTENING PORT] \\ --rest-relay-cache-capacity=[MESSAGE CACHE CAPACITY] \\ --rest-admin=[true|false] \\ --rest-private=[true|false] For example, consider a nwaku node that enabled the REST API server on port 9000: ./build/wakunode2 \\ --rest=true \\ --rest-port=9000 \\ --rest-address=127.0.0.1 Consider a nwaku node that enabled the REST admin and private API with a message cache capacity of 100: ./build/wakunode2 \\ --rest=true \\ --rest-admin=true \\ --rest-private=true \\ --rest-relay-cache-capacity=100","s":"Configure REST API server","u":"/run-node/configure-nwaku","h":"#configure-rest-api-server","p":589},{"i":606,"t":"To enable nwaku to serve light clients, enable the Filter protocol using filter option: ./build/wakunode2 --filter=true You can configure nwaku as a Filter client using the filternode and filter-timeout options. This allows the node to request content filtering of messages from peers. ./build/wakunode2 \\ --filternode=[FILTER PEER MULTIADDR] \\ --filter-timeout=[FILTER PEER TIMEOUT] For example, consider a nwaku node that requests content filtering of messages from peers with a timeout of 21600 seconds (6 hours): ./build/wakunode2 \\ --filternode=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV \\ --filter-timeout=21600 info If you omit the filter-timeout option, it will default to 14400 seconds (4 hours).","s":"Configure filter protocol","u":"/run-node/configure-nwaku","h":"#configure-filter-protocol","p":589},{"i":608,"t":"To enable nwaku to serve light clients, enable the Light Push protocol using the lightpush option: ./build/wakunode2 --lightpush=true You can configure nwaku as a Light Push client using the lightpushnode option. This allows the node to request lightpush of published messages from peers. ./build/wakunode2 --lightpushnode=[LIGHT PUSH PEER MULTIADDR] For example, consider a nwaku node that requests lightpush of published messages from peers: ./build/wakunode2 --lightpushnode=/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV","s":"Configure light push protocol","u":"/run-node/configure-nwaku","h":"#configure-light-push-protocol","p":589},{"i":610,"t":"When using a reverse proxy server for SSL/TLS encryption, you only want to announce the proxy server's IP or domain. Nwaku provides the ext-multiaddr-only and ext-multiaddr options for specifying published multiaddr: ./build/wakunode2 \\ --ext-multiaddr-only=true \\ --ext-multiaddr=[MULTIADDR TO PUBLISH] info The ext-multiaddr-only option takes precedence over the nat and dns4-domain-name options, using the values provided by the ext-multiaddr option instead.","s":"Run nwaku behind a reverse proxy","u":"/run-node/configure-nwaku","h":"#run-nwaku-behind-a-reverse-proxy","p":589},{"i":612,"t":"Here are the available node configuration options, along with their default values and descriptions:","s":"Node Configuration Options","u":"/run-node/config-options","h":"","p":611},{"i":614,"t":"Name Default Value Description config-file Loads configuration from a TOML file (cmd-line parameters take precedence) protected-shard newSeq[ProtectedShard](0) Shards and its public keys to be used for message validation, shard:pubkey. Argument may be repeated","s":"Application-level config","u":"/run-node/config-options","h":"#application-level-config","p":611},{"i":616,"t":"Name Default Value Description log-level logging.LogLevel.INFO Sets the log level for process. Supported levels: TRACE, DEBUG, INFO, NOTICE, WARN, ERROR or FATAL log-format logging.LogFormat.TEXT Specifies what kind of logs should be written to stdout. Supported formats: TEXT, JSON","s":"Log config","u":"/run-node/config-options","h":"#log-config","p":611},{"i":618,"t":"Name Default Value Description cluster-id 0 Cluster id that the node is running in. Node in a different cluster id is disconnected agent-string nwaku Node agent string which is used as identifier in network nodekey P2P node private key as 64-char hex string listen-address defaultListenAddress() Listening address for LibP2P (and Discovery v5, if enabled) traffic tcp-port 60000 TCP listening port ports-shift 0 Add a shift to all port numbers nat any Specify method to use for determining public address. Must be one of: any, none, upnp, pmp, extip:IP ext-multiaddr External multiaddresses to advertise to the network. Argument may be repeated ext-multiaddr-only false Only announce external multiaddresses max-connections 50 Maximum allowed number of libp2p connections relay-service-ratio \"60:40\" This percentage ratio represents the relay peers to service peers. For example, 60:40, tells that 60% of the max-connections will be used for relay protocol and the other 40% of max-connections will be reserved for other service protocols (e.g., filter, lightpush, store, metadata, etc.) peer-store-capacity Maximum stored peers in the peerstore peer-persistence false Enable peer persistence","s":"General node config","u":"/run-node/config-options","h":"#general-node-config","p":611},{"i":620,"t":"Name Default Value Description dns-addrs true Enable resolution of dnsaddr, dns4 or dns6 multiaddrs dns-addrs-name-server [\"1.1.1.1\", \"1.0.0.1\"] DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated dns4-domain-name The domain name resolving to the node's public IPv4 address","s":"DNS addrs config","u":"/run-node/config-options","h":"#dns-addrs-config","p":611},{"i":622,"t":"Name Default Value Description relay true Enable relay protocol: true|false relay-peer-exchange false Enable gossipsub peer exchange in relay protocol: true|false rln-relay false Enable spam protection through rln-relay: true|false rln-relay-cred-path The path for persisting rln-relay credential rln-relay-membership-index The index of the onchain commitment to use rln-relay-dynamic false Enable waku-rln-relay with on-chain dynamic group management: true|false rln-relay-id-key Rln relay identity secret key as a Hex string rln-relay-id-commitment-key Rln relay identity commitment key as a Hex string rln-relay-eth-client-address ws://localhost:8540/ WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/ rln-relay-eth-contract-address Address of membership contract on an Ethereum testnet rln-relay-eth-private-key Private key for broadcasting transactions execute false Runs the registration function on-chain. By default, a dry-run will occur rln-relay-cred-password Password for encrypting RLN credentials rln-relay-bandwidth-threshold 0 # to maintain backwards compatibility Message rate in bytes/sec after which verification of proofs should happen staticnode Peer multiaddr to directly connect with. Argument may be repeated keep-alive false Enable keep-alive for idle connections: true|false pubsub-topic Default pubsub topic to subscribe to. Argument may be repeated. Deprecated! Please use shard and/or content-topic instead shard Shard to subscribe to. Argument may be repeated num-shards-in-network Number of shards in the network. Used to map content topics to shards when using autosharding content-topic Default content topic to subscribe to. Argument may be repeated reliability false Enable experimental reliability protocol true|false","s":"Relay config","u":"/run-node/config-options","h":"#relay-config","p":611},{"i":624,"t":"Name Default Value Description store false Enable/disable waku store protocol storenode Peer multiaddress to query for storage store-message-retention-policy time:172800 Message store retention policy. Time retention policy: time:. Capacity retention policy: capacity:. Size retention policy: size:. Set to none to disable store-message-db-url sqlite://store.sqlite3 The database connection URL for persistent storage store-message-db-vacuum false Enable database vacuuming at start. Only supported by SQLite database engine store-message-db-migration true Enable database migration at start","s":"Store and message store config","u":"/run-node/config-options","h":"#store-and-message-store-config","p":611},{"i":626,"t":"Name Default Value Description store-sync false Enable/disable waku store sync protocol store-sync-interval 300 5 minutes Interval between store synchronization attempts store-sync-range 3600 1 hour Amount of time to sync store-sync-relay-jitter 20 seconds Sync range offset to account for relay's message propagation jitter","s":"Store Sync","u":"/run-node/config-options","h":"#store-sync","p":611},{"i":628,"t":"Name Default Value Description filter false Enable filter protocol: true|false filternode Peer multiaddr to request content filtering of messages filter-subscription-timeout 300 # 5 minutes Timeout for filter subscription without ping or refresh it, in seconds. Only for v2 filter protocol filter-max-peers-to-serve 1000 Maximum number of peers to serve at a time. Only for v2 filter protocol filter-max-criteria 1000 Maximum number of pubsub and content topic combinations per peer at a time. Only for v2 filter protocol","s":"Filter config","u":"/run-node/config-options","h":"#filter-config","p":611},{"i":630,"t":"| Name | Default Value | Description | | --------------- | ------------- | --------------------------------------------------------- | ----- | | lightpush | false | Enable lightpush protocol: true | false | | lightpushnode | | Peer multiaddr to request lightpush of published messages |","s":"Light push config","u":"/run-node/config-options","h":"#light-push-config","p":611},{"i":632,"t":"Name Default Value Description rest false Enable Waku REST HTTP server: true|false rest-address 127.0.0.1 Listening address of the REST HTTP server rest-port 8645 Listening port of the REST HTTP server rest-relay-cache-capacity 30 Capacity of the Relay REST API message cache rest-admin false Enable access to REST HTTP Admin API: true|false rest-allow-origin Allow cross-origin requests from the specified origin. When using the REST API in a browser, specify the origin host to get a valid response from the node REST HTTP server. This option may be repeated and can contain wildcards (?,*) for defining URLs and ports such as localhost:*, 127.0.0.1:8080, or allow any website with *","s":"REST HTTP config","u":"/run-node/config-options","h":"#rest-http-config","p":611},{"i":634,"t":"Name Default Value Description metrics-server false Enable the metrics server: true|false metrics-server-address 127.0.0.1 Listening address of the metrics server metrics-server-port 8008 Listening HTTP port of the metrics server metrics-logging true Enable metrics logging: true|false","s":"Metrics config","u":"/run-node/config-options","h":"#metrics-config","p":611},{"i":636,"t":"Name Default Value Description dns-discovery false Enable discovering nodes via DNS dns-discovery-url URL for DNS node list in format 'enrtree://@' dns-discovery-name-server [\"1.1.1.1\", \"1.0.0.1\"] DNS name server IPs to query. Argument may be repeated rendezvous true Enable waku rendezvous discovery server","s":"DNS discovery config","u":"/run-node/config-options","h":"#dns-discovery-config","p":611},{"i":638,"t":"Name Default Value Description discv5-discovery false Enable discovering nodes via Node Discovery v5 discv5-udp-port 9000 Listening UDP port for Node Discovery v5 discv5-bootstrap-node Text-encoded ENR for bootstrap node. Used when connecting to the network. Argument may be repeated discv5-enr-auto-update false Discovery can automatically update its ENR with the IP address discv5-table-ip-limit 10 Maximum amount of nodes with the same IP in discv5 routing tables discv5-bucket-ip-limit 2 Maximum amount of nodes with the same IP in discv5 routing table buckets discv5-bits-per-hop 1 Kademlia's b variable, increase for less hops per lookup","s":"Discv5 config","u":"/run-node/config-options","h":"#discv5-config","p":611},{"i":640,"t":"Name Default Value Description peer-exchange false Enable waku peer exchange protocol (responder side): true|false peer-exchange-node Peer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side)","s":"Waku peer exchange config","u":"/run-node/config-options","h":"#waku-peer-exchange-config","p":611},{"i":642,"t":"Name Default Value Description websocket-support false Enable websocket: true|false websocket-port 8000 WebSocket listening port websocket-secure-support false Enable secure websocket: true|false websocket-secure-key-path Secure websocket key path: '/path/to/key.txt' websocket-secure-cert-path Secure websocket Certificate path: '/path/to/cert.txt'","s":"WebSocket config","u":"/run-node/config-options","h":"#websocket-config","p":611},{"i":644,"t":"Name Default Value Description rate-limit This is a repeatable option. Each can describe a specific rate limit configuration for a particular protocol. Formatted as::volume/period - if protocol is not given, settings will be taken as default for un-set protocols. Ex: 80/2s -Supported protocols are: lightpush|filter|px|store|storev2|storev3 -volume must be an integer value, representing number of requests over the period of time allowed. -period must be an integer with defined unit as one of h|m|s|ms - storev2 and storev3 takes precedence over store which can easy set both store protocols at once. - In case of multiple set of the same protocol limit, last one will take place. - if config is not set, - which is the default - means unlimited requests are allowed. -filter has a bit different approach. It has a default setting applied if not overridden. Rate limit setting for filter will be applied per subscriber-peers, not globally - it must be considered when changing the setting. Examples: --rate-limit=\"100/1s\" - default for all protocols if not set otherwise. --rate-limit=\"lightpush:0/0s\" - lightpush protocol will not be rate-limited. --rate-limit=\"store:130/1500ms\" - both store-v3 and store-v2 will apply 130 request per each 1500ms separately. --rate-limit=\"px:10/1h\" PeerExchange will serve only 10 requests every hour. --rate-limit=\"filter:8/5m\" - will allow 8 subs/unsubs/ping requests for each subscriber within every 5 min. tip To configure your node using the provided configuration options, have a look at the Node Configuration Methods guide.","s":"Non-relay, request-response protocol DOS protection configuration","u":"/run-node/config-options","h":"#non-relay-request-response-protocol-dos-protection-configuration","p":611},{"i":646,"t":"If you are currently using Nwaku, running an old version and want to upgrade your node, please follow the below migration instructions for each target release newer than your current running version in ascending order. For example, if you are interested in the version v0.32.0 and are currently running v0.30.0, follow the instructions for v0.31.0 and then the ones for v0.32.0","s":"Upgrade Instructions","u":"/run-node/upgrade-instructions","h":"","p":645},{"i":648,"t":"v0.32.0 The --protected-topic CLI config was deprecated and is replaced by the new --protected-shard configuration. Instead of configuring topic:public_key you will now need to configure shard:public_key For example, if you used to run your node with --protected-topic=\"waku/2/rs/3/4:your_public_key\" you will need to replace this configuration for --protected-shard=\"4:your_public_key\" v0.31.0 Named sharding was deprecated in this version. This means that pubsub topics will only be supported if they comply with the static sharding format: /waku/2/rs// In order to migrate your existing application, you need to: Make sure that your clients are sending messages to pubsub topics in the required format. Check that in your interactions with Nwaku's REST API or when using js-waku, the configured pubsub topics follow the static sharding format defined above. When running a node with the --pubsub-topic CLI flag, the values provided should comply with the static sharding format. If your application relies on nodes or clients that may not be updated immediately, keep your node on an older version while subscribing to both the current pubsub topic and the new pubsub topic that will comply with the static sharding format. In that case, you can keep backward compatibility for a migration period.","s":"Target Releases","u":"/run-node/upgrade-instructions","h":"#target-releases","p":645}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,2.347,1,2.154,2,2.48,3,2.911,4,3.749,5,1.376,6,1.034,7,4.471,8,2.266,9,3.22,10,1.362,11,1.644,12,3.749,13,3.524,14,2.099,15,2.287,16,2.673,17,2.673,18,2.327,19,4.438,20,2.809,21,4.229,22,3.461,23,4.055,24,2.911,25,4.055,26,4.438,27,2.859,28,1.84,29,2.762,30,1.84,31,3.374]],["t/4",[1,1.836,4,4.574,5,1.129,6,1.003,8,1.586,10,1.022,12,3.194,13,2.645,32,3.175,33,2.952,34,4.69,35,3.463,36,4.112,37,5.841,38,3.497,39,4.69,40,2.579,41,2.671,42,5.043,43,2.346,44,2.611,45,2.997,46,4.233,47,3.366]],["t/6",[4,3.785,5,1.32,6,0.977,7,4.795,8,2.28,15,1.303,18,0.977,20,1.601,28,1.652,30,1.049,32,1.211,40,1.271,41,2.829,42,4.911,44,3.439,45,3.551,48,3.747,49,2.521,50,2.529,51,5.608,52,1.758,53,1.953,54,1.106,55,1.5,56,2.026,57,1.877,58,3.968,59,2.311,60,2.827,61,2.678,62,1.877,63,1.601,64,2.878,65,2.878,66,1.758,67,0.931,68,3.106,69,4.533,70,4.533,71,2.529,72,2.678,73,2.529,74,1.548,75,3.368,76,3.984,77,0.651,78,2.226,79,1.477,80,1.629,81,3.181,82,1.835,83,2.678,84,3.181,85,3.181,86,3.181,87,1.574,88,0.896,89,2.086,90,2.152,91,2.878,92,2.226,93,2.311,94,1.548,95,1.455,96,2.878,97,2.086]],["t/8",[1,1.054,4,3.379,5,1.284,6,0.987,10,0.894,12,4.279,13,3.889,32,1.411,33,1.696,37,3.354,38,2.008,39,2.693,40,2.728,41,2.854,42,4.127,44,3.087,45,2.619,48,4.127,53,1.445,54,1.289,55,1.748,68,3.498,80,2.889,98,2.092,99,3.329,100,7.429,101,3.816,102,3.948,103,1.97,104,5.104,105,2.431,106,1.933,107,3.354,108,4.75,109,3.708,110,3.354,111,1.602,112,1.539,113,6.178,114,1.162,115,4.35,116,2.431,117,1.411,118,5.104,119,3.708,120,3.708,121,3.354,122,3.708]],["t/10",[4,4.299,5,1.175,6,0.827,7,4.714,8,2.253,12,3.403,13,3.273,32,1.848,40,3.191,41,2.895,42,4.158,44,3.231,45,2.254,48,2.935,51,4.393,68,4.265,69,4.393,70,4.393,80,2.487,100,4.393,104,4.393,108,4.089,112,2.015,113,6.224,114,1.521,115,5.088,116,3.184,117,1.848,118,4.393,121,4.393,123,4.089,124,4.856]],["t/12",[5,1.26,6,0.789,8,2.072,18,2.59,32,3.209,33,3.002,40,2.622,41,2.685,42,5.097,44,2.655,45,3.915,46,4.303,47,3.423,53,2.558,125,3.594,126,7.63,127,6.564,128,3.423,129,5.526,130,6.564]],["t/14",[0,2.381,1,1.61,2,2.516,3,2.953,5,1.035,6,1.115,10,1.372,11,1.083,14,2.13,18,1.739,33,2.59,35,3.596,43,2.058,77,1.159,80,2.9,87,2.802,131,3.963,132,5.426,133,3.607,134,3.963,135,1.534,136,4.065,137,4.29,138,3.511,139,2.629,140,3.511,141,2.953,142,2.953,143,4.114,144,3.423,145,4.29,146,4.29,147,3.713,148,5.123,149,4.114]],["t/16",[6,0.869,33,4.099,99,5.289,101,6.063,102,6.272,103,3.841,112,3,131,6.817,132,5.176,150,3.995,151,5.252,152,4.37,153,8.109]],["t/18",[6,0.769,8,0.822,20,1.683,35,1.388,40,2.557,41,2.764,44,2.589,45,2.972,53,1.303,54,1.163,105,2.192,114,1.048,117,1.272,125,1.425,128,1.744,131,4.479,132,4.162,133,3.319,135,1.769,136,1.777,154,6.975,155,2.192,156,2.768,157,4.176,158,5.791,159,2.456,160,3.319,161,5.389,162,2.525,163,2.656,164,3.467,165,4.142,166,2.073,167,2.22,168,3.785,169,4.714,170,3.23,171,1.353,172,1.353,173,3.025,174,1.353,175,1.777,176,2.815,177,2.407,178,3.612,179,1.552,180,2.429,181,2.533,182,1.973,183,2.659,184,3.416,185,2.429,186,1.811,187,1.744,188,2.162,189,2.429,190,1.744,191,1.683,192,2.659,193,3.025,194,1.713,195,1.425,196,1.848]],["t/20",[1,0.869,6,0.726,8,0.751,20,1.538,35,1.269,40,2.412,41,2.755,44,2.782,45,2.804,53,1.191,105,2.004,114,0.958,117,1.163,125,2.069,131,4.226,132,3.986,133,3.093,135,1.734,136,1.624,156,1.624,157,4.615,159,2.847,160,3.093,162,2.714,163,2.528,164,3.271,165,3.86,166,3.01,167,2.069,168,3.527,170,3.01,171,1.964,172,1.964,174,1.237,175,1.624,176,2.574,177,2.271,178,3.408,179,1.419,180,2.221,181,2.316,182,1.804,183,2.431,184,3.183,185,2.221,188,1.269,190,1.594,191,1.538,192,2.431,193,2.766,197,6.351,198,4.147,199,4.064,200,5.085,201,4.393,202,2.766,203,1.895,204,1.398,205,4.393,206,5.464,207,3.057,208,4.393,209,2.221,210,1.419,211,2.766,212,2.139,213,2.431]],["t/22",[6,0.614,14,0.711,31,1.143,35,1.353,40,2.301,41,2.833,44,3.016,45,2.674,52,1.045,53,1.271,54,1.133,112,0.785,117,0.72,131,4.031,132,4.112,134,6.006,135,1.749,136,1.732,140,1.173,150,1.045,154,3.87,157,4.319,159,2.025,160,2.077,161,2.745,162,0.746,163,1.579,164,3.12,165,1.504,166,2.021,167,1.389,168,3.711,169,2.95,170,3.905,171,1.319,172,1.319,173,2.95,174,0.765,175,1.005,177,1.921,184,3.777,188,0.785,190,0.986,191,0.952,192,1.504,197,4.061,198,3.48,199,3.12,200,4.301,201,3.887,202,1.711,206,2.95,208,1.711,209,1.374,214,0.986,215,1.504,216,1.504,217,1.593,218,5.302,219,3.254,220,2.745,221,1.892,222,1.892,223,1.173,224,0.617,225,1.892,226,1.892,227,0.936,228,0.952,229,5.108,230,0.711,231,2.817,232,4.575,233,3.26,234,3.26,235,2.95,236,2.368,237,4.296,238,1.892,239,1.892,240,1.892,241,1.892,242,1.892,243,1.892,244,1.892,245,1.892,246,2.368,247,4.296,248,1.892,249,2.077,250,1.324,251,1.892,252,2.592,253,3.26,254,1.173,255,1.324,256,1.892,257,1.892,258,1.504,259,1.711,260,1.892,261,1.892,262,3.26,263,1.892]],["t/24",[1,1.152,6,0.959,33,1.853,35,1.682,40,1.619,41,2.652,44,3.618,54,2.505,58,2.287,79,1.881,106,3.757,112,1.682,114,1.89,125,1.727,132,3.828,133,2.581,134,4.221,135,1.068,153,3.667,154,4.57,157,4.79,158,3.667,159,2.844,160,2.581,161,3.412,167,1.727,197,3.222,199,2.195,200,3.412,204,1.853,205,3.667,224,1.968,227,2.005,264,4.053,265,2.45,266,3.222,267,2.836,268,4.053,269,2.718,270,3.667,271,2.741,272,3.667,273,3.646,274,4.053,275,4.053,276,3.222,277,2.581,278,7.205,279,4.053,280,4.053,281,4.053,282,4.053,283,4.053,284,4.053,285,4.053,286,4.053,287,4.053,288,4.053,289,4.053,290,4.053,291,2.657,292,2.513,293,3.412,294,4.053,295,1.972,296,3.222]],["t/26",[0,3.127,1,2.114,2,3.303,3,3.877,6,0.894,10,1.178,18,2.284,66,4.109,67,2.175,88,2.094,95,3.4,297,4.875,298,4.109,299,6.26,300,5.029,301,4.875,302,4.736,303,4.109,304,3.95]],["t/28",[6,0.894,10,1.178,32,2.829,33,3.4,80,3.808,214,4.756,271,5.029,297,6.468,298,5.04,300,5.029,305,5.633,306,3.877,307,4.875,308,5.029,309,5.401]],["t/30",[15,2.782,31,4.105,32,3.603,67,2.913,80,3.478,297,6.886,298,5.503,302,4.326,304,3.608,310,4.933,311,7.971,312,6.792,313,6.792,314,5.718]],["t/32",[0,2.587,10,0.974,32,3.077,41,1.624,58,3.471,67,2.642,80,3.15,103,3.268,157,4.069,254,3.814,273,3.718,297,6.936,298,5.301,303,3.4,315,4.161,316,5.179,317,5.566,318,3.718,319,3.918,320,6.152,321,6.152,322,6.152,323,6.152,324,4.661,325,2.657,326,3.096,327,6.152]],["t/34",[1,1.177,2,1.838,3,2.158,5,0.56,6,0.497,10,0.655,11,0.791,18,2.768,19,3.29,40,1.653,58,2.335,66,4.456,76,4.871,77,0.847,79,1.921,88,1.166,90,5.454,93,3.006,95,1.893,111,1.788,112,1.717,138,2.566,188,3.027,204,3.336,230,1.556,267,2.896,303,4.031,306,3.195,316,3.484,317,3.744,328,3.135,329,2.721,330,3.006,331,2.387,332,2.799,333,2.242,334,3.135,335,2.442,336,1.454,337,2.387,338,5.543,339,3.744,340,6.127,341,4.138,342,4.641,343,6.127,344,3.484,345,3.135,346,2.442,347,3.744,348,3.135,349,5.642,350,3.195,351,3.006,352,4.138,353,4.138,354,4.138,355,4.138,356,3.29,357,2.566,358,2.896,359,3.135,360,4.523,361,3.135,362,2.636,363,4.287,364,2.896,365,4.138,366,3.135,367,4.138,368,4.138,369,1.487]],["t/36",[5,0.807,6,0.952,14,2.979,18,2.911,41,2.348,49,3.002,54,2.074,55,2.812,63,3.987,66,4.378,76,6.298,88,1.68,95,2.728,295,2.903,298,3.296,307,3.911,349,4.174,350,3.11,370,4.519,371,8.047,372,2.903,373,3.519,374,3.799,375,7.167,376,5.965,377,5.965,378,5.396,379,5.396,380,7.922,381,3.911,382,5.965]],["t/38",[50,5.544,63,3.509,66,3.853,95,3.189,194,3.571,219,4.441,271,4.716,295,3.393,339,6.308,349,4.879,350,3.636,360,4.323,371,7.928,375,6.308,379,6.308,383,8.763,384,6.967,385,5.544,386,7.378,387,5.544,388,6.308,389,5.87]],["t/40",[6,0.967,10,0.967,11,1.167,18,2.763,41,2.375,49,3.072,54,2.122,55,2.877,63,4.048,66,4.445,88,1.719,194,3.126,212,4.271,219,3.888,306,4.194,307,4.002,329,2.711,374,3.888,378,5.522,390,8.044,391,5.274,392,7.277,393,6.104,394,4.624,395,6.104,396,6.104,397,4.853,398,4.624,399,5.522,400,4.624,401,2.834]],["t/42",[0,3.706,1,2,2,3.125,3,3.669,5,0.952,6,1.059,77,1.44,117,3.662,135,1.246,152,4.252,162,2.776,174,3.564,175,4.682,177,2.646,182,4.151,224,2.296,269,3.17,271,4.758,402,4.362]],["t/44",[8,2.083,10,1.048,11,1.265,18,2.033,95,3.027,117,2.519,135,1.501,152,4.001,177,2.489,182,5.52,224,2.16,360,4.104,400,5.015,402,5.257,403,5.989,404,3.585,405,4.104,406,4.632,407,7.087,408,4.34,409,4.34,410,4.809,411,5.015,412,6.62,413,6.62]],["t/46",[1,1.03,5,0.49,8,0.89,11,0.692,14,1.362,18,1.702,32,1.378,33,1.656,41,2.888,44,2.242,45,3.772,53,2.16,95,2.534,117,2.561,135,0.981,152,2.189,163,2.474,170,3.436,171,1.465,172,1.465,179,1.681,182,5.774,183,4.406,184,3.633,189,2.631,224,1.182,271,3.748,291,2.375,292,2.246,306,1.889,360,5.703,394,2.744,400,4.198,402,2.246,406,2.535,407,6.493,408,2.375,414,3.622,415,2.535,416,3.277,417,5.014,418,3.277,419,2.044,420,1.734,421,2.246,422,5.014,423,5.542,424,2.744,425,3.622,426,3.622,427,1.707,428,3.622,429,3.622,430,3.622,431,3.622,432,3.622,433,2.089,434,3.277,435,3.277]],["t/48",[1,1.722,6,0.728,10,1.51,32,3.411,33,2.77,53,2.361,67,1.772,77,1.24,87,2.997,93,5.813,103,3.218,142,3.158,150,3.347,188,2.514,224,1.976,303,3.347,304,3.218,324,6.063,328,6.063,329,2.69,436,5.099,437,3.281,438,5.413,439,3.971,440,5.413,441,5.099,442,3.755,443,6.057,444,3.971,445,5.099,446,3.574,447,2.855,448,6.057]],["t/51",[6,1.047,10,1.095,32,3.814,33,4.365,40,2.761,41,1.825,99,5.632,101,5.894,102,6.098,103,3.672,151,5.02,152,4.177,331,3.986,449,5.495,450,3.672,451,4.078,452,6.253]],["t/53",[6,0.932,29,2.276,33,3.545,40,2.643,41,2.046,77,0.942,99,4.574,101,4.476,102,4.631,103,3.516,106,2.399,126,4.161,135,1.172,136,3.516,151,3.341,152,2.78,163,1.69,179,2.135,187,3.451,224,2.159,230,1.73,267,3.219,309,3.341,331,2.653,369,1.653,401,2.135,427,2.168,439,3.016,447,3.12,449,5.261,450,2.444,451,2.714,453,3.016,454,3.657,455,2.852,456,3.873,457,3.657,458,4.6,459,3.873,460,2.93,461,2.104,462,3.016,463,4.6,464,4.161,465,4.161,466,2.653,467,2.596,468,2.542,469,4.161,470,5.572,471,3.341,472,3.219,473,4.161,474,3.873,475,4.161,476,1.987,477,6.805,478,4.6,479,5.572,480,4.6]],["t/55",[0,1.934,1,1.308,4,2.856,5,1.184,6,1.173,7,2.714,8,1.626,9,2.652,10,1.048,11,0.879,12,2.275,13,1.884,18,1.413,20,1.438,21,2.164,22,1.771,23,2.075,24,1.49,25,2.075,26,2.271,27,1.463,28,1.516,29,1.413,30,0.942,31,1.727,32,2.76,33,3.026,53,1.113,54,0.993,66,2.541,77,1.182,88,0.805,95,1.306,114,1.441,117,2.76,125,1.96,128,1.49,131,1.999,132,3.067,133,2.929,134,3.218,135,1.501,150,1.579,152,2.78,162,2.611,174,2.677,175,2.443,177,2.489,182,2.714,191,1.438,224,2.367,269,1.287,271,1.932,297,3.015,298,1.579,299,2.405,300,4.476,302,2.929,319,2.929,326,1.438,402,1.771,421,1.771,438,1.932,440,3.111,445,2.405,466,2.652,476,1.234,481,2.405,482,2.271,483,2.584,484,4.787,485,2.314,486,3.015,487,1.686,488,2.405,489,2.164,490,1.727,491,3.015,492,2.857,493,3.656,494,1.413,495,2.075,496,2.271,497,1.727]],["t/57",[9,3.663,10,1.453,32,2.417,33,2.904,159,2.994,214,3.312,306,3.312,325,2.744,329,2.821,359,4.812,391,4.164,397,5.049,398,4.812,420,3.953,487,3.748,496,5.049,498,5.746,499,4.614,500,5.049,501,4.812,502,3.584,503,4.614,504,4.296,505,6.254,506,5.584,507,5.347,508,4.296,509,3.196,510,6.351,511,4.164,512,5.347,513,4.296]],["t/59",[0,3.201,2,0.972,3,2.496,4,2.368,5,0.849,6,0.953,7,2.177,8,1.87,9,2.76,10,1.445,11,0.915,12,1.082,13,1.512,15,1.512,16,1.047,18,1.726,28,0.721,29,2.368,30,1.578,32,0.832,33,1,35,1.531,43,0.795,66,2.645,77,1.15,88,1.039,95,3.747,99,3.317,101,1.479,102,1.53,103,1.162,105,1.434,106,1.14,114,1.967,117,1.821,125,2.039,132,2.986,133,3.048,134,2.582,135,1.492,136,1.162,137,1.657,142,1.14,150,2.039,152,2.23,154,1.657,156,1.162,162,0.863,163,0.804,164,1.185,182,2.824,191,3.831,197,1.739,203,1.356,210,1.015,223,1.356,224,2.048,267,1.53,297,3.138,298,1.209,299,1.841,300,3.802,302,3.048,303,1.209,305,1.657,306,1.14,324,3.626,331,1.261,332,1.479,335,1.291,336,0.769,337,1.261,366,1.657,401,1.015,402,2.288,407,1.657,408,1.434,410,1.589,422,1.979,438,3.802,439,1.434,440,3.237,449,2.934,451,1.291,453,1.434,454,2.934,459,1.841,468,1.209,472,1.53,474,1.841,476,2.067,484,1.924,485,1.857,490,2.23,491,1.434,494,1.826,514,3.107,515,1.739,516,2.187,517,1.434,518,1.434,519,0.896,520,2.68,521,1.53,522,0.852,523,1.841,524,2.496,525,2.187,526,2.187,527,2.187,528,1.047,529,1.162,530,1.434,531,1.291,532,1.261,533,1.979,534,1.841,535,2.187,536,2.795,537,1.657,538,1.739,539,3.338,540,1.657,541,1.209,542,1.841,543,1.739,544,1.979,545,1.356]],["t/61",[0,3.604,1,1.914,2,2.991,3,4.47,5,0.911,6,1.133,15,2.758,16,3.224,32,3.262,33,3.079,77,1.754,99,3.973,117,2.562,135,1.518,162,2.656,174,3.467,175,3.577,177,2.532,269,3.034,476,2.908,494,3.331,546,5.101]],["t/63",[0,1.74,4,3.989,5,1.346,6,1.035,8,1.017,9,2.387,10,0.97,11,1.171,14,1.556,15,1.695,28,1.364,29,3.031,30,1.364,32,1.575,35,2.542,40,1.653,41,2.75,42,4.874,43,2.226,44,2.478,45,3.743,46,4.783,47,3.804,52,2.287,53,2.388,79,1.921,135,0.733,163,2.681,170,2.566,174,2.478,224,1.35,269,1.865,332,2.799,372,2.014,411,4.641,476,1.788,484,2.158,519,1.695,547,3.744,548,4.138,549,3.484,550,2.799,551,4.871,552,2.888,553,3.457,554,4.138,555,3.744,556,3.484,557,3.29,558,4.138]],["t/65",[5,1.153,6,0.802,7,5.03,11,1.276,30,2.201,41,2.699,42,4.035,44,2.7,45,3.099,46,4.377,47,3.481,112,2.77,115,4.252,163,2.453,195,2.845,494,3.303,551,5.307,552,4.019,553,5.3,557,5.307,559,4.671,560,3.616]],["t/67",[5,0.852,6,0.757,8,2.378,10,0.998,11,1.204,18,2.806,19,5.009,32,2.397,40,2.517,41,2.556,45,3.812,52,3.482,53,2.455,67,1.843,77,1.982,129,6.914,195,2.685,230,2.369,561,8.266,562,5.009,563,3.17,564,6.3,565,6.3]],["t/69",[6,0.433,8,0.886,10,0.571,11,1.438,14,1.356,30,1.821,32,1.372,40,1.44,41,2.795,44,3.601,47,1.88,52,3.052,54,1.253,74,1.755,114,2.103,115,2.296,135,1.576,149,2.619,156,1.915,162,1.422,163,2.764,164,4.822,168,5.464,170,5.303,171,3.042,172,3.042,174,1.458,177,1.356,178,4.827,180,2.619,181,4.184,186,1.953,188,2.292,209,2.619,213,2.866,224,1.802,230,2.524,265,2.179,301,2.364,329,1.602,461,1.649,521,3.864,551,2.866,552,1.7,553,2.035,557,5.336,560,1.953,563,1.814,566,3.424,567,3.262,568,4.996,569,3.735,570,1.88,571,3.262]],["t/71",[0,2.527,6,0.957,14,2.26,33,2.749,40,2.401,41,2.102,44,2.431,99,3.546,115,3.828,135,1.581,163,2.926,269,2.709,350,3.134,420,2.878,453,5.22,477,6.032,494,2.974,514,5.06,517,5.854,546,4.553,552,2.833,560,3.255,572,6.01,573,4.206,574,5.06,575,5.06,576,7.517,577,5.06,578,5.06,579,5.438,580,4.936,581,5.06]],["t/73",[6,1.109,10,0.884,11,1.067,41,2.733,44,3.065,45,2.591,53,2.176,77,1.143,135,1.761,136,2.966,141,2.911,162,2.989,163,2.785,166,3.461,174,3.065,175,4.026,176,4.7,232,4.055,266,4.438,420,3.629,517,3.66,582,5.504,583,5.582,584,4.7,585,4.7,586,4.229,587,4.7,588,5.05,589,4.438,590,6.855,591,4.7]],["t/75",[6,0.879,10,0.541,11,1.398,30,1.747,41,2.813,44,3.201,45,3.394,52,1.888,53,2.85,54,1.188,77,1.085,95,1.563,115,2.176,117,3.011,135,1.482,136,1.815,140,2.118,141,1.782,149,2.482,163,2.908,170,3.285,171,2.625,172,2.625,174,2.625,175,1.815,177,2.441,179,2.46,182,4.669,183,2.717,184,4.794,189,2.482,224,1.115,230,1.285,255,2.391,269,1.54,271,2.311,291,2.24,292,2.118,295,1.663,296,2.717,360,4.023,411,2.589,416,3.091,417,3.091,418,3.091,419,2.99,420,1.636,461,1.563,505,2.589,551,2.717,552,1.611,553,1.928,557,2.717,560,1.851,568,3.091,569,3.584,592,3.417,593,2.877,594,2.065,595,2.589,596,5.298,597,2.717,598,2.717,599,3.417,600,3.417,601,3.417,602,3.417,603,2.589]],["t/77",[1,2.155,53,2.954,135,1.342,162,2.99,177,2.85,191,3.814,319,4.828,336,2.664,438,5.126,484,3.952,486,4.969,488,6.381,489,5.742,509,3.814,604,7.579,605,5.506,606,4.027]],["t/79",[6,0.869,33,3.306,40,2.888,41,2.572,42,4.37,79,3.356,99,4.266,101,4.89,318,4.37,333,3.916,449,5.748,452,6.541,479,7.547,607,7.23,608,7.23,609,8.964,610,6.541,611,4.605]],["t/81",[0,2.452,4,4.647,5,1.363,6,0.938,8,1.433,9,3.363,10,0.924,11,1.115,14,2.193,15,2.389,32,2.219,35,3.238,40,2.329,41,2.585,42,5.316,43,2.119,44,2.359,45,2.707,46,5.116,47,4.069,52,3.223,53,2.273,163,2.868,174,3.156,269,2.628,372,2.838,484,3.041,519,2.389]],["t/83",[6,0.97,10,1.104,14,1.861,32,1.883,40,1.976,41,2.698,44,3.264,54,1.72,74,2.408,131,3.462,132,3.703,133,3.152,135,1.635,156,2.629,162,1.952,163,2.562,164,4.371,168,3.594,170,4.322,171,3.264,172,3.264,177,1.861,178,4.554,180,3.594,186,2.68,188,2.893,209,3.594,213,3.934,224,2.275,265,2.991,329,2.198,566,4.322,570,2.58,571,4.477,612,8.071,613,4.948,614,4.948,615,4.948,616,3.749]],["t/85",[5,0.964,6,0.614,10,0.809,11,1.363,18,2.522,32,1.944,40,2.041,41,2.902,44,2.067,135,1.262,162,2.813,177,1.922,188,3.688,214,2.664,301,3.35,306,2.664,308,4.822,359,3.871,402,3.168,411,3.871,549,4.302,617,4.302,618,7.429,619,4.989,620,3.575,621,3.871,622,3.088,623,3.871,624,5.109,625,5.109,626,4.302,627,5.109,628,4.302,629,5.109,630,5.109,631,4.623,632,5.109]],["t/87",[5,0.687,10,0.804,16,2.431,32,1.932,40,2.028,41,2.462,44,3.31,45,2.357,57,2.995,79,3.295,111,2.193,128,2.647,135,1.449,159,2.393,163,1.866,164,2.75,177,1.909,178,2.864,213,4.036,394,3.846,401,2.357,461,2.321,476,2.193,486,4.653,487,5.502,566,3.147,606,2.697,610,6.421,633,3.433,634,4.093,635,5.076,636,5.944,637,3.688,638,7.097,639,3.846,640,4.036,641,2.357,642,5.076,643,3.328,644,3.552,645,5.156,646,7.097,647,5.076,648,3.846,649,5.076,650,3.552,651,5.076]],["t/89",[0,2.587,6,0.972,14,2.314,33,2.813,40,2.457,41,2.134,44,2.488,99,3.63,115,3.918,135,1.432,163,2.971,269,2.772,420,2.946,453,5.301,477,6.842,494,3.044,514,5.179,517,5.921,546,4.661,552,2.9,560,3.332,574,5.179,575,5.179,576,7.604,577,5.179,578,5.179,579,5.566,580,5.013,581,5.179]],["t/91",[6,0.745,41,2.855,44,3.287,103,3.294,135,1.605,136,3.294,163,2.279,166,3.844,177,2.332,178,3.499,179,3.773,255,4.339,486,4.065,487,3.659,517,4.065,570,3.233,582,4.504,586,4.698,598,4.93,617,5.22,619,4.339,626,5.22,652,4.065,653,5.61,654,5.61,655,5.61,656,5.22]],["t/93",[6,0.664,10,0.571,11,0.689,41,2.894,44,2.715,77,0.738,92,2.523,135,1.777,136,1.915,139,1.674,140,4.663,141,1.88,162,2.968,163,1.325,164,1.953,166,2.235,177,1.356,188,2.785,210,1.674,232,2.619,266,2.866,291,2.364,292,2.235,308,4.54,360,4.161,363,2.523,420,1.727,486,4.4,487,3.259,517,2.364,549,3.036,570,1.88,582,2.619,584,3.036,585,3.036,586,2.731,587,3.036,588,3.262,589,2.866,590,3.262,591,3.036,619,5.263,626,4.649,636,4.012,645,2.619,654,4.996,657,5.651,658,2.619,659,7.522,660,3.606,661,3.606,662,3.606,663,3.606,664,3.606,665,3.606,666,4.184,667,2.296,668,3.036,669,3.606,670,2.439]],["t/95",[15,2.712,77,1.355,87,3.275,114,2.074,117,3.226,125,2.821,135,1.656,171,2.677,172,3.43,179,3.073,195,3.613,269,2.983,358,4.632,460,4.216,484,3.452,490,4.001,509,3.331,519,2.712,580,4.104,652,4.34,671,5.573,672,5.015,673,4.216,674,4.104,675,2.252,676,5.573,677,5.989]],["t/97",[6,0.92,20,2.262,29,3.785,54,1.562,55,2.119,77,1.332,106,4.373,111,3.623,117,1.71,135,1.355,143,3.265,162,1.773,164,4.144,171,3.6,172,3.754,177,1.69,188,1.865,195,1.915,199,2.434,214,2.344,224,2.496,230,1.69,236,3.265,300,5.673,318,2.716,369,1.615,401,2.086,405,2.786,446,2.652,454,5.174,467,2.536,476,1.941,512,3.784,520,3.265,552,2.119,566,4.035,573,3.145,589,3.573,658,3.265,678,4.494,679,4.494,680,3.573,681,2.434,682,4.066,683,4.066,684,4.066,685,2.947,686,5.479,687,4.494,688,4.066,689,4.494,690,4.494,691,4.494,692,3.573,693,3.784,694,2.344]],["t/99",[55,3.754,171,3.221,172,3.221,203,4.938,318,4.814,566,4.938,695,5.786,696,3.394,697,7.205,698,6.332,699,7.205,700,7.205]],["t/101",[1,1.425,6,0.845,8,1.231,10,0.794,14,1.885,54,1.742,60,2.828,77,1.804,87,2.479,89,3.286,98,2.828,114,2.204,117,3.092,156,2.662,157,3.539,163,1.842,171,3.754,172,3.754,174,2.027,175,2.662,182,2.957,188,2.08,198,3.887,227,3.48,230,1.885,472,3.507,509,2.522,622,4.251,634,2.89,675,1.705,696,2.136,701,3.107,702,3.64,703,2.769,704,4.534,705,5.176,706,4.219,707,4.534,708,3.192,709,4.219,710,4.219,711,2.522,712,3.797,713,3.507,714,2.957,715,2.195,716,4.534,717,3.192,718,3.984]],["t/103",[6,0.963,11,0.934,29,2.418,41,2.758,43,1.776,53,2.693,54,1.699,77,1,106,2.548,128,2.548,135,1.628,136,2.596,155,3.204,156,2.596,164,2.647,171,2.795,172,2.795,188,2.867,195,2.082,199,2.647,224,2.255,230,1.838,384,3.885,454,3.885,509,2.459,517,3.204,522,1.904,552,2.303,560,2.647,573,4.835,686,4.114,688,6.251,696,2.082,705,3.112,714,2.883,719,3.305,720,4.421,721,4.114,722,3.885,723,2.548,724,4.887,725,3.55,726,4.421,727,3.305,728,4.421,729,6.91,730,6.91,731,1.928,732,4.887]],["t/105",[6,0.99,14,1.625,41,1.975,54,1.502,77,0.884,79,2.006,87,3.129,98,4.646,103,2.296,114,1.354,117,1.644,135,1.324,141,2.253,155,4.146,157,2.174,163,1.588,171,3.33,172,3.702,177,1.625,188,3.417,198,2.388,224,2.064,325,1.866,357,2.679,384,6.545,404,2.34,446,2.55,466,2.492,472,4.425,497,2.612,513,2.923,519,1.77,546,3.273,606,2.296,622,2.612,634,2.492,645,4.594,680,3.435,696,1.841,705,2.752,710,3.638,711,2.174,713,5.234,723,2.253,731,1.705,733,3.638,734,4.321,735,4.425,736,4.321,737,4.321,738,4.321,739,5.028,740,2.833,741,4.321,742,6.324,743,7.48,744,4.321,745,4.321,746,4.321]],["t/107",[0,3.25,1,2.197,2,3.433,3,4.03,4,3.824,6,0.929,32,2.941,33,3.534,54,2.687,319,4.923,421,4.792,466,4.457,493,6.145,494,3.824,495,5.614]],["t/109",[6,0.982,20,3.145,29,3.092,32,2.378,33,2.858,35,2.594,99,3.688,101,4.227,102,5.717,163,2.297,369,2.246,401,2.901,420,2.993,421,3.875,466,5.249,467,3.527,493,6.495,494,4.042,495,5.935,503,4.54,655,5.654,674,3.875,747,6.878,748,8.17,749,6.878,750,6.25,751,4.373,752,6.25,753,4.735]],["t/111",[1,1.462,2,2.285,3,2.682,10,1.305,11,0.983,23,3.736,33,2.352,54,2.865,135,0.911,147,3.372,163,1.89,175,2.732,188,2.134,369,1.848,373,3.035,401,2.387,447,2.424,466,2.966,493,4.089,495,6.473,505,5.426,506,5.574,511,4.696,636,3.736,640,4.089,685,3.372,754,5.143,755,4.653,756,3.035,757,5.143,758,5.143,759,5.143,760,5.143,761,4.33,762,3.736,763,5.143,764,4.089,765,4.33,766,2.634,767,3.035,768,4.653,769,4.089,770,4.653,771,5.143,772,3.372,773,5.143,774,6.48,775,4.089,776,5.143,777,3.736,778,5.143,779,4.33,780,2.634,781,5.143]],["t/113",[1,1.242,2,1.941,4,3.154,5,1.12,11,0.835,12,3.154,13,2.612,18,1.342,24,2.278,34,3.174,35,1.813,38,4.078,39,4.631,48,5.002,49,2.199,60,2.465,63,2.199,67,1.278,79,2.028,111,3.802,112,1.813,125,1.862,177,1.643,196,2.414,230,2.398,254,2.709,273,2.641,331,2.52,336,1.535,345,3.31,357,5.697,405,2.709,427,3.005,457,3.474,497,2.641,502,2.465,573,3.057,611,4.061,667,2.783,681,2.366,685,2.864,695,3.174,715,1.914,719,2.955,772,2.864,782,3.953,783,4.369,784,4.369,785,3.474,786,4.369,787,3.953,788,3.174,789,2.237,790,3.953,791,3.474,792,4.18,793,2.864,794,4.369,795,4.369,796,2.641,797,4.369,798,3.474,799,3.678,800,2.52,801,3.057,802,3.474,803,4.369,804,3.953]],["t/115",[2,2.3,5,0.973,8,1.272,12,4.091,18,1.59,38,4.479,39,3.761,60,2.921,63,2.605,75,2.479,98,2.921,108,6.962,114,2.591,125,3.524,139,3.839,178,2.921,210,2.403,325,3.108,357,5.127,484,2.699,529,2.75,594,5.401,713,5.034,715,3.622,761,6.962,785,6.574,805,7.481,806,5.177,807,3.922,808,7.195,809,5.177,810,5.72,811,5.177,812,5.177,813,3.761]],["t/117",[1,1.991,4,2.464,5,1.095,6,0.842,8,1.223,10,0.789,11,1.339,13,2.04,15,2.04,17,2.385,18,1.529,38,2.697,67,1.457,77,1.019,93,3.617,112,2.067,114,1.56,160,4.46,188,2.067,195,2.122,269,2.244,303,2.752,315,4.736,329,2.212,381,3.265,446,2.938,484,2.597,513,3.368,519,2.04,545,3.087,636,3.617,681,3.793,713,3.484,751,4.9,791,3.959,798,3.959,800,2.872,813,3.617,814,4.475,815,4.9,816,3.484,817,4.505,818,3.265,819,3.484,820,5.895,821,3.617,822,4.98,823,3.959,824,4.98,825,3.617,826,3.484,827,4.505,828,3.368,829,4.98,830,4.98,831,3.773,832,4.98,833,4.192]],["t/119",[2,3.963,5,0.611,6,0.923,12,3.233,13,1.852,18,2.74,38,5.317,62,4.529,72,5.502,77,1.571,80,2.315,94,2.2,125,1.926,141,2.357,178,3.688,232,7.267,246,4.747,252,5.196,594,3.95,674,2.802,813,3.284,814,3.611,833,7.08,834,6.102,835,4.089,836,3.057,837,4.089,838,4.089,839,6.535,840,6.462,841,6.944,842,6.535,843,6.535,844,6.535,845,6.535,846,6.535]],["t/121",[4,2.058,5,0.99,7,2.455,8,2.581,10,0.974,11,1.176,12,2.058,13,3.312,17,2.945,18,1.889,30,1.372,36,2.65,53,1.621,67,1.217,78,2.911,114,1.303,117,1.583,125,1.773,135,1.089,144,2.515,162,1.641,174,1.683,175,2.21,177,1.565,179,1.931,186,2.253,191,3.095,195,2.621,210,2.855,228,2.094,230,1.565,329,1.848,331,2.399,372,2.025,397,4.89,401,1.931,402,2.579,408,2.728,437,2.253,446,2.455,533,3.764,597,3.308,675,2.093,695,3.022,711,2.094,722,3.308,723,2.169,747,3.503,814,2.299,823,4.89,847,3.022,848,2.814,849,3.308,850,2.728,851,2.814,852,3.152,853,3.152,854,3.152,855,3.022,856,6.62,857,6.151,858,4.16,859,3.764,860,4.16,861,3.764,862,6.161,863,4.16]],["t/123",[0,3.068,1,2.075,6,1.084,32,3.431,33,3.337,142,3.805,203,4.524,224,2.381,302,5.742,303,4.033,304,3.877,335,4.306,336,2.565,482,5.802,700,6.602,864,6.602,865,6.144,866,6.144]],["t/126",[32,2.653,79,3.237,142,3.636,143,5.065,144,4.214,295,3.393,302,6.104,303,5.296,439,5.745,532,5.527,867,6.973,868,5.544,869,6.308,870,6.973,871,6.973,872,6.639,873,4.879,874,5.282]],["t/128",[25,5.67,32,2.97,53,3.042,77,1.598,88,2.199,167,3.326,235,7.062,444,5.118,509,3.928,546,5.914,733,6.572,875,5.462,876,6.572,877,7.806]],["t/130",[1,2.176,32,2.912,43,2.781,103,4.066,187,3.991,302,4.875,303,5.129,401,3.553,439,5.018,693,6.444,878,5.018,879,7.653,880,6.924,881,7.653,882,6.444]],["t/132",[6,0.739,8,1.986,12,3.044,13,3.312,17,2.946,32,3.077,35,2.553,43,2.938,54,2.139,62,3.63,66,3.4,152,3.718,186,3.332,224,2.638,302,6.11,303,4.991,316,5.179,329,2.733,330,4.469,335,3.63,445,5.179,461,2.813,509,3.096,521,4.305,883,5.566,884,5.566,885,5.566,886,4.469,887,5.566,888,5.566,889,4.661]],["t/134",[6,0.894,28,2.451,29,3.679,32,2.829,88,2.094,231,4.875,302,4.736,304,3.95,336,2.613,519,3.046,528,3.561,529,3.95,530,4.875,531,4.387,532,4.288,872,5.633,890,3.877,891,5.029,892,5.633]],["t/136",[6,0.885,10,1.167,11,1.408,33,3.368,88,2.075,179,3.419,224,2.403,302,5.775,318,4.452,441,6.201,502,4.156,509,3.707,658,5.351,711,3.707,780,3.772,893,4.692,894,6.201,895,7.366,896,7.366]],["t/138",[1,1.443,5,0.687,6,0.61,10,1.296,11,1.694,20,2.555,117,1.932,125,2.163,135,1.449,156,2.697,159,2.393,171,2.053,172,2.871,194,3.635,196,3.922,269,2.288,273,3.068,336,1.784,345,5.377,391,3.328,427,3.346,484,2.647,490,3.068,508,3.433,509,2.555,519,2.08,553,4.005,650,3.552,666,3.846,667,4.521,670,3.433,674,3.147,696,3.024,711,2.555,714,4.188,735,3.552,866,4.274,897,3.846,898,3.328,899,5.076,900,5.076,901,2.555,902,2.431,903,3.433,904,3.688,905,3.688,906,2.928,907,3.846,908,5.076,909,5.076,910,2.995,911,4.593]],["t/140",[1,1.749,5,1.094,10,0.974,11,1.834,22,3.814,24,3.208,28,2.028,77,1.259,147,4.033,156,3.268,191,3.096,198,3.4,224,2.007,295,2.994,314,5.179,329,3.592,447,2.9,485,3.096,489,4.661,494,3.044,519,2.52,670,4.161,696,2.622,714,3.63,800,3.548,818,4.033,906,3.548,912,6.125,913,6.152,914,6.152,915,6.152,916,6.125,917,4.661,918,6.152]],["t/142",[0,3.186,5,1.025,6,0.911,11,1.067,112,2.317,163,2.052,194,2.859,269,3.415,293,4.7,342,4.229,372,2.717,522,2.176,695,4.055,788,4.055,789,2.859,836,6.524,919,7.52,920,4.229,921,5.582,922,3.776,923,3.66,924,6.38,925,4.055,926,4.055,927,3.186,928,5.741,929,3.776,930,7.335,931,4.438,932,5.582,933,4.055,934,5.582,935,5.05]],["t/144",[0,2.381,5,1.035,6,0.92,10,1.372,11,1.657,14,2.13,28,2.523,34,4.114,43,2.058,88,2.155,147,3.713,156,4.065,172,3.095,198,4.228,269,2.552,337,3.266,437,3.067,455,3.511,494,2.802,524,3.83,528,2.712,550,3.83,605,4.114,667,3.607,711,2.85,725,4.114,901,2.85,905,5.558,919,4.114,930,4.502,933,4.114,936,2.9,937,4.114,938,4.502,939,4.768,940,4.502,941,4.502,942,4.502,943,4.502,944,2.85]],["t/146",[5,1.295,6,0.657,8,2.352,11,1.428,14,2.056,18,2.294,67,2.185,77,1.529,78,3.824,112,2.268,128,2.85,160,4.757,174,2.211,186,4.046,196,4.128,227,2.704,315,3.697,334,4.141,336,1.921,450,3.968,460,3.481,582,3.97,681,2.96,705,3.481,751,3.824,766,3.825,791,4.345,792,3.583,798,4.345,814,4.128,820,4.602,821,3.97,831,4.141,898,3.583,945,5.466,946,5.466,947,5.466,948,4.945,949,3.824]],["t/148",[4,2.782,5,0.761,6,0.676,8,1.381,10,0.89,11,1.075,12,3.767,13,2.303,18,2.339,38,4.124,49,3.832,66,4.208,72,6.411,77,1.559,80,2.879,94,2.736,125,2.396,178,3.173,186,3.045,232,7.532,246,4.084,252,7.357,560,3.045,594,3.398,648,4.26,715,2.463,834,6.054,835,5.087,837,6.889,838,6.889,840,4.734,841,5.087,950,4.734]],["t/150",[0,3.282,1,2.219,2,3.467,3,4.07,5,1.056,6,0.938,77,1.598,114,2.446,117,2.97,125,3.326,135,1.382,163,2.869,174,3.157,490,4.718]],["t/152",[5,1.281,6,0.816,10,1.076,11,1.298,32,2.584,40,2.713,41,2.713,42,5.723,44,2.747,45,4.001,46,4.453,47,3.541,53,2.647,163,3.167,174,3.486,372,3.305,476,2.934,547,6.144]],["t/154",[5,1.339,6,1.118,8,2.369,11,1.351,18,2.17,28,1.663,32,1.919,35,2.093,40,2.015,41,2.667,42,3.048,44,2.04,45,3.28,46,3.307,47,2.63,49,2.538,77,1.032,114,3.165,129,4.246,160,3.213,163,1.854,195,2.149,228,2.538,508,3.411,561,6.392,562,4.01,563,3.555,715,2.209,951,5.044,952,5.044,953,4.246,954,4.563,955,3.529,956,4.563,957,4.01]],["t/156",[32,2.54,40,2.667,41,2.76,44,3.448,114,2.092,117,2.54,125,2.845,135,1.663,163,3.133,170,4.139,171,3.448,172,3.448,178,5.3,180,4.849,181,5.058,566,5.285,567,6.04]],["t/158",[1,2.075,5,1.219,32,2.777,53,2.844,112,3.028,114,2.825,125,3.11,135,1.292,179,3.387,490,4.411,641,3.387,715,3.196,958,6.602,959,6.602,960,5.802,961,3.952,962,6.144,963,4.648,964,7.297]],["t/160",[1,1.407,5,0.669,8,1.216,14,1.861,35,2.893,41,2.599,44,2.001,45,2.297,48,2.991,52,2.734,53,3.6,98,2.792,114,2.184,117,1.883,125,2.971,133,3.152,135,1.635,163,1.818,171,2.001,172,2.001,178,3.934,179,3.236,184,6.283,185,3.594,190,2.58,224,1.615,255,3.462,522,3.146,563,2.49,594,2.991,595,3.749,715,3.838,753,3.749,958,4.477,963,3.152,965,4.948,966,4.948,967,4.948,968,3.152,969,3.749,970,4.477,971,4.948,972,4.477]],["t/162",[1,1.3,5,0.619,14,1.72,35,1.898,41,2.776,44,3.42,45,3.587,48,2.764,52,2.527,53,2.568,83,3.85,98,2.58,114,2.065,117,1.74,125,2.808,133,2.913,135,1.704,141,2.385,146,3.464,159,2.156,163,1.681,171,1.85,172,1.85,178,3.719,179,3.059,190,2.385,224,1.492,424,3.464,519,1.873,522,3.011,563,2.301,594,2.764,595,3.464,715,3.384,753,3.464,959,4.137,963,2.913,969,3.464,970,4.137,973,4.573,974,3.322,975,5.548,976,3.85,977,4.573,978,4.137,979,4.573,980,4.573,981,5.239,982,4.573,983,4.573,984,4.137]],["t/165",[8,1.333,32,2.065,40,2.168,41,2.836,43,1.972,44,3.429,45,2.52,98,5.145,114,1.701,125,3.613,135,1.316,184,3.559,185,3.943,515,4.315,522,3.554,563,2.731,715,2.377,963,5.4,972,6.725,975,4.57,976,4.57,984,6.725,985,9.119,986,4.112,987,3.943,988,6.725,989,5.428,990,5.428]],["t/167",[10,0.635,14,1.509,32,1.526,40,1.602,41,2.838,44,3.212,45,3.324,47,3.734,53,1.563,54,1.394,55,1.891,98,4.041,125,3.935,135,1.635,163,2.2,184,5.206,185,4.349,255,2.807,318,2.425,404,2.173,411,3.039,415,2.807,421,3.711,476,2.586,522,2.333,552,1.891,563,2.019,594,4.328,715,2.622,825,2.914,963,5.881,986,3.039,991,8.353,992,5.04,993,4.011,994,2.555,995,4.011,996,4.011,997,4.011,998,4.011,999,4.011,1000,2.807,1001,3.189,1002,3.039,1003,2.807]],["t/169",[5,0.581,6,0.757,8,1.056,14,1.616,41,2.687,44,3.321,45,1.995,54,2.19,55,2.969,77,0.88,114,2.573,117,1.635,125,3.893,135,1.671,174,1.738,184,2.817,185,3.122,269,1.937,291,2.817,292,2.664,295,2.091,296,3.416,420,3.016,476,1.856,490,2.597,505,3.256,522,3.407,563,2.162,603,3.256,694,2.241,715,2.759,731,2.485,739,3.416,872,3.256,939,3.618,975,3.618,976,3.618,988,3.888,991,3.888,1004,7.457,1005,5.303,1006,6.299,1007,6.299,1008,5.303,1009,6.299,1010,4.297,1011,3.618,1012,4.297,1013,3.888,1014,3.256,1015,4.297,1016,4.297]],["t/171",[0,2.76,1,2.398,2,2.916,3,3.423,6,0.789,10,1.04,32,3.209,33,3.002,103,3.487,150,3.627,224,2.142,314,5.526,324,4.973,328,6.389,329,2.916,436,5.526,437,3.555,438,4.44,439,4.303,440,6.302,441,5.526,442,4.069,491,5.529,494,3.248,1017,6.564,1018,5.938,1019,6.564]],["t/173",[0,2.331,6,1.03,15,2.271,16,2.654,32,3.261,33,3.449,98,3.128,99,4.45,101,6.222,102,6.437,103,2.945,112,2.3,150,3.063,151,4.027,152,3.35,163,3.15,224,1.809,421,3.436,440,6.222,477,5.713,491,4.944,494,4.24,495,5.478,749,6.349,1020,4.667,1021,5.543,1022,4.667,1023,4.667,1024,5.543,1025,5.543,1026,5.543,1027,5.543]],["t/175",[1,2.03,5,1.31,6,0.717,10,0.632,15,2.443,16,1.911,40,2.852,41,2.836,44,2.412,46,2.617,47,2.081,53,2.324,128,3.11,163,2.911,174,3.429,224,1.302,301,2.617,338,5.395,346,2.355,360,4.426,369,1.434,381,2.617,405,2.474,409,2.617,421,2.474,440,2.699,466,4.118,476,2.576,491,3.91,522,1.555,541,3.946,545,2.474,721,3.36,1028,3.991,1029,7.921,1030,3.991,1031,3.36,1032,3.991,1033,3.991,1034,3.991,1035,5.964,1036,3.991,1037,6.459,1038,3.611,1039,3.024,1040,5.395,1041,3.611,1042,3.36,1043,3.173,1044,3.991,1045,2.899]],["t/177",[5,0.475,6,0.551,10,0.326,14,0.775,32,0.784,40,2.422,41,2.858,43,0.749,44,3.128,53,1.367,135,1.498,162,1.807,163,1.987,164,2.481,168,3.328,170,2.175,174,1.419,175,1.095,178,2.585,180,2.548,181,1.561,188,1.456,224,0.672,254,2.175,311,1.735,315,1.394,360,1.278,361,2.658,369,1.261,420,0.987,421,1.278,424,1.561,440,3.098,453,2.3,466,2.023,476,0.89,477,1.561,485,1.037,491,1.351,502,1.163,517,3.003,541,1.939,552,2.159,556,2.954,559,1.442,560,1.116,574,1.735,575,1.735,576,2.954,577,1.735,578,1.735,580,1.278,581,1.735,594,1.246,603,3.47,611,2.918,685,1.351,761,1.735,801,2.455,807,1.561,937,1.497,986,1.561,992,1.735,1037,3.174,1038,1.864,1039,1.561,1040,1.864,1046,1.638,1047,3.642,1048,1.561,1049,4.581,1050,1.735,1051,3.508,1052,3.174,1053,1.864,1054,2.061,1055,1.735,1056,4.892,1057,2.061,1058,2.061,1059,2.061,1060,1.864,1061,7.734,1062,5.408,1063,2.061,1064,2.061,1065,3.508,1066,2.061,1067,2.061,1068,2.061,1069,2.061,1070,2.061,1071,2.061,1072,3.508,1073,2.061,1074,2.061,1075,2.061,1076,2.061,1077,2.061,1078,4.581,1079,2.061,1080,2.061,1081,1.735,1082,2.061,1083,4.581,1084,6.064,1085,2.061,1086,2.061,1087,2.061,1088,4.581,1089,2.061,1090,2.061,1091,2.061,1092,3.174,1093,2.061,1094,1.735,1095,5.408,1096,6.598,1097,1.735,1098,4.581,1099,5.408,1100,3.508,1101,2.061,1102,2.061,1103,2.061,1104,1.864,1105,1.735,1106,3.508,1107,3.508,1108,1.497,1109,2.061]],["t/179",[5,0.795,6,0.706,11,1.123,35,1.623,40,1.562,41,2.934,44,3.57,45,1.816,53,2.749,79,1.816,95,1.789,135,1.488,136,3.121,162,2.317,163,1.437,164,3.182,174,1.582,175,5.004,188,1.623,224,1.276,254,2.425,360,3.642,420,1.873,424,2.963,453,2.564,466,2.256,491,2.564,517,2.564,559,4.11,582,2.841,584,3.293,585,3.293,586,5.941,587,3.293,589,3.11,591,3.293,594,2.364,704,3.539,1039,2.963,1052,3.539,1053,3.539,1056,3.539,1060,5.314,1110,3.911,1111,7.054,1112,3.539,1113,3.911,1114,3.911,1115,3.911,1116,3.911]],["t/181",[5,0.739,6,0.657,40,2.183,41,2.903,44,2.211,48,3.304,53,2.911,79,2.537,117,2.842,135,1.695,163,2.009,177,2.809,178,3.084,182,4.407,224,1.783,361,4.141,466,3.152,491,3.583,593,4.602,594,4.514,595,5.659,598,4.345,652,3.583,1039,4.141,1047,4.345,1050,4.602,1117,7.698,1118,6.757,1119,5.466]],["t/183",[0,1.316,5,1.185,6,0.97,8,1.865,10,0.496,11,0.946,14,1.177,20,1.575,26,2.489,28,1.032,30,1.032,31,1.892,32,1.191,33,1.432,40,1.25,41,2.823,42,1.892,44,2.819,45,1.453,46,2.052,47,1.632,49,1.575,53,1.928,54,1.088,77,1.013,79,1.453,93,2.274,114,2.894,117,1.191,125,2.108,135,1.551,150,1.73,160,1.994,163,1.15,177,1.861,178,2.792,182,1.847,195,2.108,224,1.614,228,2.49,269,2.229,292,1.941,295,1.523,296,2.489,361,2.372,420,1.499,440,2.117,466,1.805,483,2.832,484,1.632,485,1.575,491,3.244,519,1.282,522,1.22,563,1.575,593,2.636,594,2.99,595,3.748,598,2.489,603,2.372,715,2.167,747,2.636,954,2.832,955,2.19,956,2.832,957,2.489,1039,2.372,1048,4.647,1050,2.636,1117,4.476,1118,4.476,1120,6.134,1121,2.832,1122,4.947,1123,3.13,1124,3.13,1125,3.13,1126,2.372,1127,3.13,1128,3.13,1129,3.13,1130,2.832]],["t/185",[10,1.42,11,1.382,53,2.818,346,4.266,357,5.557,372,3.518,506,4.89,643,4.74,720,6.541,782,6.541,819,5.059,855,5.252,1131,7.23,1132,5.748,1133,7.23,1134,6.541,1135,5.748,1136,6.541,1137,7.23,1138,5.059]],["t/187",[5,0.859,6,0.763,8,2.028,10,1.308,11,1.214,13,3.382,17,3.953,36,4.045,74,3.091,77,1.3,87,3.142,94,3.091,128,3.312,186,3.44,188,2.636,195,2.707,210,2.948,230,2.389,303,3.51,304,3.374,319,4.045,427,2.994,460,4.045,519,2.602,566,3.938,814,3.51,889,4.812,1139,4.812,1140,5.746,1141,5.049,1142,6.351,1143,5.347,1144,5.746]],["t/189",[8,1.56,10,1.308,11,1.754,17,3.041,111,2.744,128,3.312,135,1.624,190,3.312,363,4.444,605,4.614,675,2.809,696,2.707,703,3.51,714,3.748,815,4.444,848,4.296,851,4.296,901,3.196,927,2.671,1145,6.351,1146,4.812,1147,4.614,1148,6.951,1149,6.351,1150,5.049,1151,4.812,1152,5.347,1153,4.812,1154,5.049,1155,3.748]],["t/191",[1,1.777,5,0.845,10,0.99,15,2.56,18,1.92,67,1.828,77,1.279,114,1.958,117,2.378,125,3.481,135,1.611,174,2.528,175,3.32,196,3.454,198,3.454,304,3.32,336,2.871,446,3.688,460,3.981,490,3.778,623,4.735,643,4.098,694,3.259,723,3.259,792,4.098,872,4.735,944,4.58,1156,4.969,1157,4.969,1158,6.25,1159,6.25,1160,4.735,1161,5.262]],["t/193",[5,1.412,10,0.607,11,1.106,43,1.393,77,0.785,114,2.184,117,2.652,125,1.634,128,2,135,1.729,140,2.377,163,1.409,171,2.341,172,3.544,175,2.037,177,1.442,187,2,227,1.897,255,2.683,318,2.318,346,3.415,356,5.542,372,1.866,409,2.514,419,3.266,420,1.836,433,2.212,442,3.588,461,1.754,550,2.594,675,1.305,715,1.68,717,2.443,731,1.513,766,2.964,772,2.514,789,1.964,807,2.905,848,2.594,949,2.683,961,2.077,987,5.063,1147,5.063,1162,3.229,1163,3.835,1164,7.764,1165,5.963,1166,8.333,1167,6.971,1168,5.542,1169,3.229,1170,3.229,1171,3.469,1172,3.229,1173,2.905,1174,2.905]],["t/195",[1,2.398,10,1.336,67,1.92,77,1.726,143,4.768,146,4.973,187,3.423,224,2.752,227,3.248,318,3.967,497,3.967,597,5.219,667,4.181,705,5.372,793,4.303,828,4.44,880,5.938,890,3.423,974,4.768,1139,4.973,1175,4.973,1176,5.938,1177,6.564,1178,6.564,1179,5.938,1180,3.555,1181,4.44,1182,4.768]],["t/197",[5,0.866,8,2.262,10,1.014,11,1.224,67,1.873,77,1.885,80,3.279,132,3.402,135,1.469,162,2.526,163,2.353,177,2.408,204,2.928,446,3.778,447,3.018,460,4.078,487,3.778,675,2.179,696,2.729,703,3.538,800,3.693,848,4.331,873,4.48,875,4.48,901,3.222,1147,4.651,1183,5.391,1184,5.091,1185,4.651,1186,4.48,1187,5.793]],["t/199",[1,1.763,2,2.754,6,0.745,8,1.523,11,1.554,77,1.664,97,4.065,135,1.098,141,3.233,334,4.698,336,2.856,446,3.659,519,2.54,520,5.904,675,3.085,731,2.446,902,3.892,903,4.194,927,3.812,1154,6.461,1155,4.796,1184,4.93,1188,3.844,1189,4.93,1190,5.22,1191,4.698,1192,4.504,1193,5.22,1194,4.339]],["t/201",[5,0.832,6,0.739,8,1.986,11,1.176,14,2.314,71,4.891,77,1.655,117,3.077,125,2.622,135,1.432,142,3.208,171,3.27,172,3.27,174,2.488,194,3.15,195,2.622,214,3.208,230,2.314,336,2.162,337,3.548,419,3.471,674,3.814,675,2.751,692,4.891,696,2.622,872,4.661,883,5.566,898,4.033,944,4.069,953,5.179,1195,5.566,1196,4.033,1197,5.566]],["t/203",[5,0.819,6,0.728,8,1.488,11,1.53,14,2.278,18,1.86,29,2.997,53,2.361,67,1.772,77,1.835,114,2.987,117,2.305,125,3.819,135,1.587,139,2.812,223,3.755,228,3.048,300,4.097,476,2.616,623,4.589,675,2.723,715,2.653,772,3.971,886,4.4,960,4.815,961,3.281,1141,4.815,1172,5.099,1174,4.589,1180,3.281,1196,3.971,1198,5.48]],["t/205",[5,0.845,8,2.236,11,1.562,14,2.351,18,1.92,19,6.495,27,3.201,77,1.672,135,1.446,162,2.466,167,2.663,174,3.304,175,4.34,177,3.072,230,2.351,336,2.197,409,4.098,657,6.878,675,2.127,733,5.262,944,3.145,987,4.54,1160,4.735,1161,5.262,1196,4.098,1199,5.654,1200,6.25,1201,6.25,1202,3.875]],["t/207",[2,2.61,10,1.242,11,1.499,77,1.203,78,4.111,106,3.064,114,1.841,117,2.236,135,1.738,136,4.167,139,2.727,140,3.643,159,2.77,166,3.643,171,2.376,179,2.727,195,2.504,224,1.917,301,3.852,319,3.742,369,2.111,427,2.77,453,3.852,521,4.111,529,3.121,563,3.947,586,4.451,711,2.957,731,2.318,1203,9.135,1204,5.875,1205,5.875,1206,5.875,1207,5.315]],["t/209",[5,1.201,6,0.779,8,1.098,10,1.325,11,1.239,14,1.681,15,1.831,16,2.14,18,2.342,29,3.207,43,1.624,62,4.5,66,3.582,67,1.307,68,2.77,77,1.561,87,2.211,112,1.854,139,3.009,147,2.93,150,2.469,187,2.33,204,3.487,214,2.33,230,1.681,303,3.582,304,2.374,329,1.985,330,6.076,346,2.637,349,3.127,351,3.246,369,2.329,401,3.009,439,2.93,446,2.637,447,3.055,513,3.022,550,3.022,566,2.77,570,2.33,652,2.93,717,2.846,723,2.33,826,3.127,848,3.022,851,3.022,862,3.762,906,3.738,1022,3.762,1150,3.553,1208,4.469,1209,4.043,1210,3.385,1211,4.469,1212,4.043,1213,4.469,1214,4.469,1215,4.469,1216,4.469,1217,3.385]],["t/211",[0,1.201,5,0.981,6,0.932,10,1.545,11,1.104,15,1.17,18,0.877,28,0.942,29,1.413,35,1.909,43,1.038,56,1.82,67,0.836,77,1.182,80,1.463,87,1.413,88,0.805,95,1.306,112,1.185,114,1.809,128,1.49,132,3.854,135,1.626,136,1.518,137,2.164,138,1.771,139,2.68,140,1.771,141,1.49,142,2.398,143,2.075,144,1.727,145,3.484,146,3.484,147,1.873,148,2.584,149,2.075,162,1.814,177,1.074,187,1.49,188,1.185,191,1.438,195,1.217,199,1.547,215,2.271,219,1.82,224,0.932,227,1.413,228,1.438,230,1.73,265,1.727,273,2.78,329,1.269,334,2.164,335,1.686,336,1.616,351,2.075,369,1.026,401,1.326,437,1.547,438,1.932,455,1.771,461,1.306,476,2.494,484,1.49,485,1.438,519,1.17,521,1.999,524,1.932,542,3.872,606,1.518,634,1.647,637,2.075,641,1.326,675,0.972,696,1.96,714,1.686,731,1.814,775,2.271,789,2.956,828,1.932,875,3.218,901,1.438,902,2.202,903,3.111,912,2.164,927,1.201,930,3.656,936,1.463,1005,2.405,1126,2.164,1155,1.686,1160,2.164,1196,1.873,1218,2.075,1219,2.857,1220,3.656,1221,3.484,1222,2.857,1223,2.857,1224,2.584,1225,3.218,1226,2.78,1227,3.872,1228,2.584,1229,2.857,1230,2.857,1231,2.271,1232,2.405,1233,2.271,1234,5.773,1235,2.857,1236,2.595,1237,2.857,1238,1.49,1239,2.857]],["t/213",[4,2.864,5,1.321,6,0.696,7,3.416,8,1.422,10,0.917,24,3.018,28,1.908,48,3.499,60,3.266,75,2.772,87,2.864,112,3.222,146,4.385,196,3.199,224,1.889,254,3.589,336,2.034,345,4.385,366,4.385,502,3.266,606,3.075,611,3.687,628,4.873,667,3.687,791,4.602,792,5.091,793,3.795,798,4.602,799,4.873,800,3.338,801,4.05,828,3.915,893,3.687,1240,5.789,1241,5.789,1242,4.873,1243,4.602,1244,4.873,1245,5.789,1246,4.873,1247,5.789,1248,4.205]],["t/215",[2,3.502,5,1.278,6,0.948,18,2.422,232,5.727,252,6.268,259,7.133,611,5.022,840,6.638,851,5.333,1249,7.884,1250,7.884]],["t/217",[1,1.806,10,1.308,77,1.69,145,6.254,188,2.636,204,4.604,336,2.232,369,2.282,391,4.164,427,2.994,461,2.904,509,3.196,518,4.164,641,2.948,796,3.839,819,4.444,865,5.347,878,4.164,906,3.663,940,5.049,1179,5.746,1196,4.164,1251,6.351,1252,5.347,1253,5.347,1254,5.347,1255,6.351,1256,4.045,1257,4.614,1258,6.351]],["t/219",[1,1.882,6,0.796,10,1.048,40,2.644,47,3.452,57,3.906,77,1.355,80,3.39,89,4.34,258,5.263,333,3.585,401,3.073,621,5.015,634,3.818,694,3.452,701,4.104,705,4.216,717,4.216,910,3.906,940,5.263,955,5.933,1197,5.989,1259,9.355,1260,4.809,1261,5.015,1262,5.573,1263,6.62,1264,6.62,1265,5.989]],["t/221",[1,1.696,10,0.945,18,1.832,77,1.622,135,1.575,139,2.769,172,3.598,227,2.951,369,2.143,401,3.678,408,3.911,419,5.019,433,3.44,509,3.002,621,4.519,634,3.44,675,2.695,701,5.515,705,5.666,708,3.799,709,5.022,718,4.742,789,4.555,847,4.333,868,4.742,1265,7.167,1266,5.965,1267,6.67]],["t/223",[6,0.717,8,1.946,17,2.856,18,1.832,87,2.951,135,1.056,190,3.11,336,2.096,350,3.11,401,2.769,405,3.698,427,2.812,451,3.519,509,3.002,675,2.029,703,3.296,711,3.002,718,4.742,792,3.911,826,4.174,847,4.333,873,4.174,901,3.987,902,2.856,903,4.034,927,2.508,1126,4.519,1155,3.519,1191,4.519,1268,5.965,1269,5.965,1270,5.396,1271,5.965,1272,7.072,1273,5.965,1274,4.742,1275,5.022,1276,5.396,1277,5.022,1278,4.333,1279,5.396]],["t/225",[10,1.464,11,1.234,77,1.708,128,3.366,132,4.911,135,1.143,136,3.43,137,6.321,139,2.997,150,3.568,190,4.351,204,3.816,216,5.133,218,7.025,228,3.249,401,2.997,460,4.112,467,3.643,487,3.809,552,3.043,819,4.517,847,4.69,1280,5.133,1281,6.456,1282,4.112,1283,5.133]],["t/227",[5,1.263,6,0.691,18,2.373,55,2.709,77,1.582,112,2.385,114,2.421,117,3.322,142,2.996,171,2.324,172,2.324,174,2.324,227,2.843,405,3.562,634,4.456,641,2.667,701,4.79,705,3.66,708,3.66,709,4.838,715,3.824,906,4.456,933,4.174,955,6.533,986,5.854,1043,4.568,1180,3.112,1196,3.767,1267,4.838,1284,5.746,1285,5.746,1286,3.767,1287,5.746]],["t/229",[6,1.019,10,1.343,337,4.891,1134,7.673,1288,7.141,1289,7.141]],["t/231",[4,3.786,5,1.035,8,2.28,10,1.212,11,1.774,13,3.135,18,2.351,35,3.176,36,4.875,381,5.018,545,4.745,848,5.177,850,5.018,1290,5.798]],["t/233",[67,2.239,77,1.567,125,3.261,135,1.643,171,3.096,172,3.096,179,3.553,195,3.261,217,6.444,358,5.355,509,3.851,580,4.745,673,4.875,674,4.745,711,3.851]],["t/235",[5,1.067,10,1.249,59,5.727,152,4.765,224,2.573,391,5.169,427,3.717,681,4.27,1256,5.022,1291,7.884,1292,6.638,1293,6.638,1294,4.888]],["t/237",[1,2.094,6,0.885,8,1.81,11,1.408,13,3.017,17,3.527,38,3.99,114,2.308,144,4.452,713,5.154,800,4.248,813,5.351,814,4.07,815,6.345,816,5.154,817,6.664,818,4.829,821,5.351,1295,7.366]],["t/239",[2,3.272,5,0.996,8,1.81,12,3.644,13,3.715,17,3.527,18,2.262,38,3.99,39,5.351,67,2.155,111,3.182,125,3.139,230,2.77,273,4.452,357,4.567,573,5.154,681,3.99,785,5.856,790,6.664]],["t/241",[2,3.125,5,1.302,6,0.846,11,1.345,13,2.882,18,2.161,30,2.319,38,4.773,67,2.058,77,1.44,128,3.669,195,2.998,227,3.481,427,3.316,447,3.316,460,4.481,553,3.97,634,4.057,813,5.111,836,4.758,1296,5.33,1297,6.365]],["t/243",[5,0.996,6,0.885,8,1.81,11,1.408,67,2.155,71,5.856,77,1.508,117,2.803,135,1.304,142,3.841,171,2.979,172,2.979,174,2.979,194,3.772,195,3.139,419,4.156,538,5.856,674,4.567,675,2.506,692,5.856]],["t/245",[6,0.957,11,1.523,77,1.63,227,3.94,446,4.699,451,4.699,667,5.073,681,4.314,703,4.401,1294,4.938,1298,7.965,1299,7.965]],["t/247",[8,2.28,11,1.774,77,1.9,80,3.919,87,3.786,224,2.497,230,2.878,319,4.875,485,3.851,681,4.145,1139,5.798,1300,7.653,1301,6.085]],["t/249",[5,1.286,11,1.523,167,3.394,174,3.221,194,4.079,196,4.401,336,2.799,675,2.71,898,5.222,906,4.593,1302,6.705]],["t/251",[5,1.045,8,1.899,11,1.478,67,2.261,77,1.582,135,1.368,162,3.049,174,3.777,175,4.106,177,3.512,644,5.408,657,6.507,675,2.63]],["t/253",[10,1.189,11,1.435,54,2.61,167,3.199,303,4.148,402,4.654,403,6.791,427,3.539,623,6.95,731,2.962,898,4.922,1143,6.32,1144,6.791,1156,5.968,1303,6.791,1304,7.723]],["t/255",[5,1.035,8,2.28,10,1.47,11,1.463,67,2.239,77,1.567,167,3.261,199,4.145,204,3.5,444,5.018,447,3.608,898,5.018,1302,6.444,1305,6.085]],["t/257",[5,1.248,10,1.2,13,3.105,75,4.419,157,4.644,159,3.573,199,4.105,570,3.952,580,4.699,955,5.303,1306,6.857,1307,6.381,1308,6.381,1309,6.026]],["t/259",[35,3.207,144,4.671,186,4.186,190,4.03,191,3.889,192,6.145,204,4.27,227,3.824,447,3.643,487,4.56,796,4.671,1136,6.992,1182,5.614,1310,5.855]],["t/261",[10,1.512,35,2.868,132,5.071,135,1.69,136,5.071,139,3.208,141,3.604,167,2.945,187,3.604,224,2.843,346,4.078,529,3.672,538,5.495,563,3.478,573,4.836,848,4.675,1311,6.253,1312,6.911]],["t/263",[5,1.111,8,2.018,10,1.301,11,1.57,223,5.093,372,3.998,447,3.872,636,5.967,796,4.965]],["t/265",[5,1.111,8,2.379,10,1.301,11,1.57,13,3.365,36,5.232,227,4.064,1218,5.967]],["t/267",[4,3.644,5,1.227,8,2.413,11,1.408,13,3.017,17,3.527,18,2.262,67,2.155,174,2.979,177,2.77,186,3.99,230,2.77,450,3.913,766,3.772,814,4.07,1003,5.154,1244,6.201]],["t/269",[5,1.077,10,1.261,11,1.523,157,4.008,159,3.754,198,4.401,634,4.593,680,6.332,713,5.573,955,5.573,1286,5.222,1313,7.205]],["t/271",[5,1.006,10,1.178,11,1.421,15,3.046,53,2.898,67,2.175,77,1.522,114,2.33,117,2.829,125,3.169,128,3.877,135,1.317,162,2.934,210,3.452,319,4.736,351,5.401,519,3.046,675,2.53,694,3.877]],["t/273",[27,3.808,135,1.747,162,2.934,172,3.689,177,2.796,230,2.796,419,4.196,446,4.387,447,3.505,702,5.401,789,3.808,873,5.203,1147,5.401,1314,7.436,1315,6.727,1316,7.436]],["t/275",[8,2.24,18,2.284,57,4.387,135,1.317,172,4.16,177,2.796,346,4.387,580,4.61,634,4.288,702,6.625,703,4.109,987,5.401,1147,5.401,1317,4.875]],["t/277",[53,2.983,67,2.239,336,3.262,705,4.875,711,3.851,714,4.516,902,4.445,903,5.177,927,3.218,1232,6.444,1233,6.085,1236,4.319,1318,6.924,1319,7.653]],["t/279",[5,0.978,8,1.776,10,1.145,11,1.382,67,2.115,77,1.835,135,1.28,162,2.852,177,2.719,204,3.306,446,4.266,675,2.46,696,3.081,703,3.995,714,4.266,800,4.17,818,4.74,873,5.059,1184,5.748,1186,5.059,1187,6.541]],["t/281",[196,5.16,228,3.889,304,4.106,336,2.716,345,5.855,427,3.643,796,4.671,898,5.067,944,3.889,1320,5.408,1321,5.614,1322,7.729,1323,7.729,1324,6.507]],["t/283",[6,0.846,11,1.345,77,1.44,135,1.246,141,3.669,334,5.33,336,3.097,460,4.481,520,5.111,675,2.998,731,2.776,902,4.22,903,4.758,927,3.706,1154,5.593,1155,4.151,1188,4.362,1190,5.923,1191,5.33,1192,5.111,1325,7.035]],["t/285",[145,5.914,150,4.314,196,4.314,199,4.228,204,3.57,224,2.547,307,5.118,319,4.972,438,5.28,447,3.68,509,3.928,616,5.914,800,4.502,925,5.67]],["t/287",[8,1.88,11,1.774,67,2.239,77,1.567,114,2.398,125,3.261,135,1.643,230,2.878,273,4.626,623,5.798,675,2.604,772,5.018,960,6.085,1198,6.924]],["t/289",[8,1.918,11,1.492,17,3.738,18,2.397,67,2.284,139,3.624,187,4.07,330,5.67,446,4.606,550,5.28,851,5.28,1150,6.206,1209,7.062,1210,5.914]],["t/291",[5,0.943,6,0.838,8,2.153,10,1.388,11,1.333,24,3.636,77,1.794,142,3.636,196,3.853,199,3.777,204,3.189,224,2.275,304,3.704,336,2.451,447,3.287,681,3.777,889,5.282,1138,4.879,1141,5.544,1151,5.282,1305,5.544,1326,5.544,1327,4.879]],["t/293",[10,1.479,11,1.478,68,4.792,135,1.653,136,4.106,171,3.126,172,3.126,179,3.588,195,3.294,224,2.522,427,3.643,453,5.067,671,6.507]],["t/295",[1,2.018,10,1.404,11,1.357,35,2.946,132,4.708,133,4.522,134,4.967,135,1.569,136,4.708,150,3.923,199,3.845,204,3.246,216,5.644,444,4.654,447,3.346,875,4.967,1267,5.977,1280,5.644,1328,7.099,1329,5.977]],["t/297",[8,2.28,10,1.212,11,1.774,135,1.355,194,4.753,196,4.229,336,2.69,391,5.018,667,4.875,696,3.261,898,5.018,901,3.851,1330,7.653]],["t/299",[6,0.838,10,1.104,17,3.339,67,2.04,77,1.794,132,3.704,137,6.639,150,3.853,157,3.509,186,3.777,204,3.189,216,5.544,277,4.441,447,3.287,485,3.509,563,3.509,716,6.308,987,5.065,1022,5.87,1260,5.065,1280,5.544,1331,6.308,1332,6.973,1333,6.308]],["t/302",[369,2.983,437,4.497,444,5.443,509,4.178,605,6.031,826,5.809,910,4.899,1290,6.289]],["t/304",[2,2.844,6,0.77,8,1.573,22,3.97,35,2.657,67,1.873,97,4.198,135,1.134,144,3.87,335,3.778,336,2.917,519,2.623,675,2.824,684,5.793,878,4.198,901,3.222,902,4.41,903,4.331,927,3.49,1155,3.778,1188,3.97,1189,5.091,1190,5.391,1192,4.651,1193,5.391,1194,4.48,1238,3.339,1334,5.091,1335,5.391,1336,5.793,1337,5.091]],["t/306",[1,1.89,5,0.626,6,0.799,8,1.911,10,0.733,11,0.885,22,2.869,24,2.413,74,2.252,78,3.238,114,1.45,117,1.761,212,3.238,295,2.252,318,4.701,451,2.73,519,2.723,531,2.73,606,2.458,620,3.238,622,2.797,641,2.148,658,3.361,694,2.413,696,1.972,718,3.679,725,5.65,766,2.37,767,2.73,780,2.37,891,4.495,901,3.344,906,5.405,916,3.505,927,1.946,933,3.361,1081,3.896,1151,3.505,1180,4.212,1185,3.361,1207,4.186,1227,3.896,1246,3.896,1253,3.896,1276,4.186,1279,4.186,1286,3.033,1338,4.627,1339,4.627,1340,3.361,1341,4.627,1342,4.627,1343,6.183,1344,4.627,1345,4.627,1346,3.679,1347,4.627,1348,4.627,1349,4.186,1350,5.284,1351,4.627,1352,4.627]],["t/308",[10,1.537,77,1.986,142,3.736,167,3.053,329,3.182,362,4.563,404,3.88,444,4.697,826,5.013,1217,5.427,1254,6.031,1288,6.031,1353,3.959,1354,6.481,1355,6.031,1356,3.669,1357,6.752,1358,6.481]],["t/310",[8,2.039,10,1.598,11,1.224,41,1.69,77,1.311,135,1.134,204,2.928,300,4.331,336,2.25,369,2.301,447,3.018,670,4.331,675,2.824,696,2.729,714,3.778,789,3.279,793,4.198,800,3.693,818,4.198,826,4.48,901,3.222,902,3.066,903,4.331,916,4.851,927,2.692,1139,4.851,1154,5.091,1155,3.778,1326,5.091,1359,5.793]],["t/312",[10,1.236,34,5.67,80,3.997,156,4.147,157,3.928,187,4.898,333,4.228,461,3.57,827,7.062,1031,6.572,1289,6.572,1360,6.572,1361,7.806]],["t/314",[5,1.192,6,0.846,10,1.396,11,1.685,17,3.369,22,4.362,28,2.905,87,3.481,147,4.612,188,2.92,329,3.125,462,4.612,681,3.811,906,4.057,916,5.33,1151,5.33,1248,5.111,1362,5.923,1363,7.035,1364,7.035,1365,7.035]],["t/316",[1,1.866,6,0.789,10,1.336,28,2.164,67,1.92,74,3.194,77,1.726,191,3.303,230,2.469,304,3.487,319,4.181,336,2.307,357,4.069,369,2.358,427,3.094,489,4.973,696,2.797,714,3.873,800,3.786,818,4.303,887,5.938,898,4.303,1156,5.219,1292,7.1,1329,5.526,1366,6.564,1367,6.564,1368,6.564,1369,6.564,1370,5.938]],["t/318",[10,1.236,77,1.598,80,3.997,87,3.862,405,4.839,675,2.656,767,4.606,853,5.914,901,3.928,927,3.282,1155,4.606,1196,5.118,1331,7.062,1371,7.062]],["t/320",[5,0.895,10,1.482,15,2.712,16,3.17,28,2.182,306,3.452,336,2.326,530,4.34,553,4.784,563,3.331,641,3.936,780,3.39,878,4.34,944,3.331,1188,4.104,1372,5.989,1373,5.654,1374,5.015,1375,6.159,1376,3.906,1377,5.989,1378,4.477,1379,5.573,1380,5.015,1381,3.735]],["t/322",[5,1.062,8,1.284,10,1.017,16,1.608,18,1.031,24,1.751,27,1.72,28,2.588,36,2.139,47,1.751,56,2.139,67,0.982,79,1.559,94,1.634,112,2.169,135,0.595,139,2.98,142,1.751,155,2.202,167,1.431,188,2.169,195,1.431,196,3.547,203,2.082,228,1.69,277,2.139,306,3.347,333,1.819,336,2.256,364,2.35,401,1.559,461,1.536,496,2.67,497,3.16,499,2.44,506,2.271,513,2.271,553,4.088,606,1.784,620,2.35,667,2.139,699,3.038,723,1.751,780,3.287,787,4.73,792,2.202,831,2.544,875,3.658,889,2.544,890,1.751,912,2.544,922,2.271,923,2.202,927,2.198,944,4.183,968,2.139,994,2.139,1105,2.827,1173,2.544,1182,2.44,1183,4.401,1188,2.082,1236,1.895,1238,1.751,1304,2.827,1320,2.35,1321,2.44,1324,4.401,1355,2.827,1373,3.16,1375,4.663,1376,1.982,1378,2.271,1379,2.827,1382,3.038,1383,1.819,1384,3.038,1385,3.038,1386,3.358,1387,3.038,1388,3.358,1389,3.358,1390,3.358,1391,3.358,1392,4.401,1393,2.67,1394,3.358,1395,3.358,1396,3.358,1397,3.358,1398,2.67,1399,3.961,1400,5.228,1401,3.038,1402,2.67,1403,3.358,1404,3.798,1405,3.038,1406,2.544,1407,2.67,1408,2.67,1409,3.358,1410,3.358]],["t/324",[29,1.76,112,1.476,115,4.239,139,1.651,194,1.821,228,2.75,308,2.405,318,2.15,333,1.926,369,1.278,461,1.626,467,2.007,537,4.14,540,4.14,552,2.576,560,2.96,606,1.889,639,4.14,740,4.363,751,3.824,816,6.2,944,3.758,1011,2.994,1256,2.265,1375,6.955,1378,2.405,1383,3.605,1411,6.655,1412,6.655,1413,5.465,1414,3.217,1415,3.217,1416,3.556,1417,3.556,1418,3.556,1419,2.405,1420,3.556,1421,3.556,1422,3.217,1423,6.021,1424,2.827,1425,3.556,1426,4.601,1427,3.556,1428,2.489,1429,3.217,1430,3.217,1431,3.217,1432,4.944,1433,3.556,1434,3.556,1435,3.556,1436,4.944,1437,3.556,1438,3.556,1439,3.217,1440,3.556,1441,3.556,1442,5.465,1443,3.556,1444,4.944,1445,5.465,1446,2.994,1447,3.556,1448,3.556,1449,3.556,1450,2.694,1451,3.556,1452,3.217,1453,3.556,1454,3.556,1455,3.556,1456,3.556,1457,4.345,1458,3.217,1459,3.556,1460,3.556,1461,3.217,1462,3.556,1463,3.217,1464,3.217,1465,3.217,1466,3.556,1467,3.556,1468,2.994,1469,4.944,1470,2.827,1471,3.556]],["t/326",[1,0.572,5,0.942,6,0.719,10,1.295,11,1.018,15,1.844,16,0.964,18,0.618,24,1.05,27,1.031,28,1.484,41,1.838,57,2.656,71,1.6,77,0.921,112,1.868,114,0.631,115,1.282,138,1.248,139,1.596,154,2.605,167,1.465,174,1.821,187,1.05,188,1.427,196,1.9,212,1.409,223,1.248,224,0.657,227,0.996,249,1.282,277,1.282,295,2.191,332,1.362,333,1.863,336,1.209,337,1.161,364,2.406,401,0.934,410,1.462,433,1.983,471,1.462,486,1.32,497,1.217,501,1.525,506,2.326,519,0.825,530,3.491,537,2.605,540,4.034,545,1.248,553,1.941,566,2.132,606,2.829,620,1.409,633,1.362,641,0.934,666,1.525,675,1.812,676,3.79,685,1.32,703,1.112,740,3.491,780,1.761,792,2.255,816,1.409,849,1.6,890,3.119,891,2.326,906,1.983,912,1.525,917,1.525,931,3.579,937,1.462,944,4.673,968,2.19,1023,2.895,1045,1.462,1105,1.695,1143,1.695,1156,1.6,1165,1.32,1173,1.525,1176,1.821,1186,1.409,1188,2.791,1195,1.821,1238,1.05,1252,1.695,1324,1.695,1334,1.6,1373,1.217,1374,2.605,1375,4.345,1377,1.821,1378,3.045,1379,1.695,1380,1.525,1381,1.941,1383,2.438,1384,1.821,1387,1.821,1392,1.695,1393,1.6,1398,1.6,1399,2.605,1414,3.111,1426,1.695,1429,1.821,1430,1.821,1431,1.821,1432,3.111,1436,1.821,1439,1.821,1446,1.695,1452,1.821,1458,1.821,1463,4.073,1464,1.821,1465,3.111,1469,1.821,1472,1.821,1473,1.525,1474,2.013,1475,2.013,1476,2.013,1477,2.013,1478,2.895,1479,3.439,1480,2.013,1481,2.013,1482,2.013,1483,1.695,1484,2.013,1485,1.362,1486,4.073,1487,1.821,1488,1.6,1489,1.525,1490,2.013,1491,1.821,1492,2.013,1493,2.013,1494,2.013,1495,1.525,1496,1.821,1497,2.013,1498,2.013,1499,1.821,1500,2.013,1501,3.439,1502,2.013,1503,1.6,1504,1.695,1505,3.439,1506,2.013,1507,3.439,1508,4.502,1509,3.111,1510,1.821,1511,2.013,1512,2.013,1513,1.821,1514,3.439,1515,1.821,1516,1.821,1517,1.031,1518,2.013,1519,2.013,1520,2.013,1521,1.462,1522,1.821]],["t/328",[5,0.714,6,0.877,10,0.836,11,1.395,28,1.741,52,2.919,88,1.488,135,1.775,265,4.409,304,2.806,332,3.572,336,1.856,404,2.861,409,3.463,461,2.415,468,4.619,698,4.199,719,3.572,815,3.696,853,4.001,917,4.001,927,3.068,944,2.658,994,3.364,1001,5.8,1202,5.181,1217,4.001,1353,2.919,1372,4.778,1383,2.861,1404,3.837,1488,4.199,1517,2.705,1523,3.837,1524,6.548,1525,5.527,1526,7.295,1527,4.001,1528,4.778,1529,4.778,1530,4.447,1531,4.778]],["t/330",[5,1.312,6,0.519,10,0.684,21,4.791,77,1.294,88,1.217,92,3.023,135,1.78,172,3.026,177,1.625,212,3.023,265,2.612,292,2.679,295,2.103,306,2.253,369,1.553,401,2.006,404,2.34,419,4.646,433,2.492,461,1.976,506,2.923,550,4.278,675,2.545,702,3.139,703,2.388,723,2.253,731,3.248,789,3.831,878,2.833,912,3.273,927,1.817,994,2.752,1001,5.028,1018,3.909,1146,3.273,1148,3.638,1183,3.638,1202,4.638,1218,3.139,1257,3.139,1282,2.752,1353,2.388,1376,2.55,1404,3.139,1532,4.321,1533,5.325,1534,5.722,1535,4.321,1536,3.909,1537,5.325,1538,3.909,1539,4.791,1540,3.909,1541,3.638,1542,5.325]],["t/332",[5,1.316,6,0.307,10,0.666,11,0.489,15,1.048,18,1.644,27,2.153,30,0.843,40,1.679,41,1.11,52,1.414,54,0.889,74,2.046,79,1.952,103,1.359,135,1.722,138,1.586,166,1.586,172,1.035,177,1.581,187,2.192,195,1.792,333,1.386,350,2.192,366,3.185,405,1.586,407,1.938,419,1.444,461,2.448,468,2.323,476,1.105,506,1.73,519,2.193,538,2.034,540,1.938,552,1.982,641,2.877,673,1.629,703,1.414,712,4.055,723,1.334,727,1.73,731,3.641,740,1.677,789,3.174,793,1.677,828,1.73,890,2.192,910,1.51,926,1.858,927,1.076,931,3.343,944,3.119,949,1.79,1003,3.745,1046,2.034,1138,1.79,1148,2.154,1165,4.064,1202,5.218,1225,1.79,1252,2.154,1254,2.154,1278,3.054,1282,1.629,1353,1.414,1359,2.315,1373,1.546,1376,1.51,1383,1.386,1399,1.938,1517,2.153,1523,1.858,1524,1.858,1533,2.154,1537,5.219,1538,6.196,1539,6.564,1542,2.154,1543,3.343,1544,2.034,1545,1.938,1546,2.315,1547,2.034,1548,5.352,1549,2.558,1550,2.315,1551,2.154,1552,2.154,1553,2.315,1554,3.343,1555,2.558,1556,2.558,1557,2.558,1558,2.034,1559,1.938,1560,1.73,1561,2.315,1562,2.558,1563,2.315,1564,2.315,1565,2.154,1566,1.938,1567,2.558,1568,2.558,1569,2.558,1570,2.558,1571,2.558,1572,2.034]],["t/334",[5,0.551,6,0.962,10,0.645,11,0.779,18,1.251,28,1.343,30,1.996,41,1.075,87,2.016,88,2.036,97,2.671,112,1.691,135,1.28,139,1.891,159,1.92,177,1.532,196,2.251,214,2.124,230,1.532,254,2.526,307,3.97,333,2.207,437,3.28,475,3.686,476,1.76,560,2.207,569,2.755,648,3.086,731,2.389,780,2.086,789,2.086,793,2.671,810,3.239,816,2.851,823,3.239,890,2.124,891,2.755,1202,2.526,1236,3.417,1238,2.124,1282,3.857,1320,2.851,1353,4.952,1376,3.573,1381,2.299,1383,2.207,1401,3.686,1402,3.239,1405,3.686,1407,3.239,1423,3.686,1504,3.43,1509,3.686,1517,3.101,1522,3.686,1524,2.959,1558,3.239,1573,5.478,1574,4.074,1575,4.074,1576,6.056,1577,4.074,1578,3.239,1579,4.074,1580,4.074,1581,2.959,1582,4.074,1583,4.074,1584,3.239,1585,4.074,1586,4.074,1587,4.074,1588,4.074,1589,4.074,1590,3.686,1591,3.086,1592,4.074,1593,4.074,1594,3.43,1595,4.074,1596,3.43,1597,3.28,1598,3.239]],["t/336",[5,1.074,6,0.719,10,0.814,11,0.462,18,0.742,21,1.831,30,0.797,33,1.105,40,0.965,62,1.426,74,2.502,98,1.364,135,1.543,139,1.122,140,2.487,159,1.139,162,0.953,166,1.498,177,0.909,210,1.122,224,0.788,227,1.195,265,1.46,295,1.952,308,3.478,318,2.424,325,2.221,332,2.713,333,2.785,364,1.691,369,0.868,409,1.584,410,1.755,415,1.691,437,2.172,442,1.498,455,1.498,461,1.105,462,1.584,468,2.841,476,1.044,489,1.831,509,1.216,519,2.106,529,1.284,530,1.584,531,1.426,543,3.189,552,2.424,701,1.498,711,1.216,712,1.831,719,3.478,727,1.634,731,3.133,739,1.921,789,2.054,793,1.584,815,1.691,850,1.584,854,1.831,884,2.186,890,1.26,891,1.634,902,1.921,917,1.831,927,1.016,937,1.755,944,2.587,968,1.539,969,1.831,974,1.755,1000,1.691,1108,1.755,1135,1.921,1165,2.63,1171,2.186,1175,1.831,1186,1.691,1202,4.923,1210,3.039,1236,1.364,1320,1.691,1353,3.308,1380,1.831,1383,2.785,1406,1.831,1415,2.186,1426,2.034,1473,1.831,1489,1.831,1504,2.034,1517,2.054,1523,1.755,1524,4.348,1525,1.831,1527,3.895,1528,2.186,1529,4.652,1530,3.377,1531,3.629,1539,3.039,1546,4.652,1547,1.921,1564,4.652,1573,3.629,1594,3.377,1597,2.172,1598,1.921,1599,2.416,1600,4.011,1601,4.011,1602,2.416,1603,2.416,1604,2.416,1605,2.416,1606,2.416,1607,2.416,1608,2.416,1609,2.416,1610,2.034,1611,2.416,1612,2.416,1613,2.416,1614,2.416,1615,2.416,1616,2.416,1617,2.186,1618,2.034,1619,4.011,1620,2.416,1621,2.416,1622,2.416,1623,4.011,1624,2.416,1625,2.416,1626,1.691,1627,2.416,1628,2.416,1629,2.034,1630,2.416,1631,1.691,1632,2.416,1633,2.186,1634,2.416,1635,2.186,1636,2.034]],["t/338",[10,1.224,11,1.478,112,3.207,336,2.716,553,4.361,847,5.614,902,3.701,927,3.25,944,3.889,1194,5.408,1238,4.03,1404,5.614,1473,5.855,1637,6.992,1638,5.855]],["t/340",[5,1.079,6,0.366,8,0.748,10,0.954,11,0.925,15,2.812,16,2.885,18,0.935,27,3.085,28,2.263,40,1.216,79,1.414,98,1.718,111,1.315,112,3.309,114,0.954,135,1.215,140,1.888,145,2.307,155,1.997,172,3.029,188,1.264,210,1.414,224,0.994,228,1.532,295,1.482,325,1.315,336,1.701,364,2.131,387,4.789,389,2.564,402,1.888,405,3.001,415,2.131,419,1.718,450,1.618,455,1.888,462,1.997,466,1.756,468,1.683,476,1.315,501,4.564,506,2.06,530,1.997,553,1.718,566,1.888,675,2.05,717,1.94,731,1.201,735,4.215,801,2.131,859,2.755,874,2.307,878,1.997,905,2.212,906,1.756,944,4.61,1008,5.072,1046,2.421,1048,2.307,1182,2.212,1196,1.997,1220,2.421,1225,2.131,1238,1.588,1289,2.564,1294,1.888,1304,2.564,1320,2.131,1321,2.212,1373,1.841,1375,4.376,1378,2.06,1382,2.755,1385,2.755,1404,2.212,1457,3.848,1486,2.755,1487,4.379,1488,2.421,1543,2.421,1591,2.307,1631,2.131,1633,2.755,1637,6.209,1639,3.045,1640,4.84,1641,3.045,1642,2.421,1643,3.045,1644,3.045,1645,2.755,1646,4.84,1647,3.045,1648,4.84,1649,3.045,1650,3.045,1651,3.045,1652,3.045,1653,2.564,1654,2.755,1655,3.045,1656,3.045,1657,3.045,1658,3.045,1659,3.045,1660,3.045,1661,3.045,1662,1.997,1663,2.755]],["t/342",[10,1.114,11,1.345,17,2.4,30,1.652,56,3.192,77,1.026,79,2.326,135,1.56,162,1.977,188,2.08,230,3.056,277,3.192,336,3.097,387,3.984,437,2.714,476,2.165,481,4.219,552,2.362,641,2.326,696,2.136,705,3.192,714,2.957,725,3.64,727,3.39,728,6.363,792,3.286,819,4.922,873,3.507,892,3.797,902,4.219,927,2.957,1094,7.418,1152,5.922,1180,2.714,1248,3.64,1343,3.984,1374,3.797,1521,3.64,1597,3.81,1638,3.797,1664,4.534,1665,5.011,1666,5.011,1667,5.011,1668,5.011,1669,3.797,1670,5.011,1671,5.011,1672,4.219]],["t/344",[11,1.272,29,1.76,41,1.443,135,1.506,140,3.388,188,2.268,191,1.79,230,2.055,250,2.489,325,1.536,333,1.926,336,2.832,337,2.051,369,1.278,387,2.827,433,3.152,437,2.96,456,2.994,468,3.678,530,2.332,553,3.755,566,2.205,631,3.217,677,3.217,703,1.965,735,4.657,788,3.97,815,3.824,847,2.583,854,5.042,892,2.694,902,3.576,904,2.583,927,2.298,928,4.14,929,3.696,944,1.79,1003,2.489,1031,2.994,1055,2.994,1094,2.994,1165,2.332,1188,2.205,1238,3.47,1336,4.944,1373,3.303,1374,2.694,1375,3.97,1376,3.927,1383,4.365,1444,3.217,1489,2.694,1566,4.14,1591,2.694,1597,2.96,1638,2.694,1653,2.994,1673,3.556,1674,5.465,1675,3.556,1676,3.556,1677,6.021,1678,5.465,1679,3.556,1680,2.994,1681,6.655,1682,2.994,1683,2.994,1684,3.556,1685,3.556,1686,3.556,1687,3.217,1688,6.655,1689,3.556,1690,3.556,1691,2.994,1692,5.465,1693,3.556,1694,3.556]],["t/347",[5,1.203,6,0.717,10,0.945,21,4.519,24,3.11,77,1.622,79,2.769,88,2.505,114,1.869,135,1.575,144,3.605,155,3.911,220,5.022,335,3.519,336,2.096,622,3.605,675,2.029,694,3.11,780,3.055,862,5.022,1002,4.519,1406,6.002,1450,4.519,1695,5.022,1696,6.67,1697,5.396,1698,4.742,1699,5.965,1700,6.002,1701,5.396,1702,6.002,1703,4.519,1704,5.965,1705,5.965]],["t/349",[5,0.952,50,5.593,52,4.87,77,1.44,88,2.71,114,3.015,135,1.246,214,3.669,421,4.362,476,3.039,519,2.882,522,2.742,653,6.365,1180,3.811,1560,4.758,1706,5.593,1707,7.035,1708,7.035,1709,6.365,1710,6.365]],["t/351",[10,1.329,715,3.675,780,5.021,936,4.297,1711,6.357,1712,7.064]],["t/353",[10,1.236,163,2.869,187,4.07,249,4.972,307,5.118,369,2.805,511,5.118,694,4.07,715,3.419,780,3.997,1712,6.572,1713,7.062,1714,7.806,1715,7.806]],["t/355",[5,1.241,6,0.397,10,0.523,15,1.353,18,1.014,24,1.722,28,1.089,31,3.838,54,1.793,58,1.863,77,1.469,80,1.691,95,1.51,97,2.165,114,2.249,123,4.343,128,2.69,135,1.624,177,1.242,191,1.662,246,2.398,250,2.31,295,1.607,301,2.165,329,2.82,335,1.948,336,1.16,373,1.948,410,2.398,419,1.863,421,2.047,434,2.987,455,2.047,479,2.78,519,1.353,552,1.556,606,1.754,641,1.533,675,2.16,703,1.825,723,1.722,789,3.676,853,2.501,874,2.501,902,3.437,1157,2.625,1242,2.78,1353,1.825,1373,3.838,1374,3.908,1380,3.908,1381,1.863,1393,4.102,1450,2.501,1478,2.78,1489,2.501,1543,2.625,1572,2.625,1626,2.31,1635,2.987,1669,2.501,1672,2.78,1700,5.438,1702,3.908,1703,5.438,1709,2.987,1716,5.346,1717,5.159,1718,2.78,1719,3.302,1720,3.302,1721,3.302,1722,3.302,1723,3.302,1724,3.302,1725,3.302,1726,3.302,1727,2.625,1728,2.987,1729,4.667,1730,2.987,1731,3.302,1732,2.625,1733,3.302,1734,2.78,1735,3.908,1736,3.302,1737,3.302,1738,3.302,1739,5.159,1740,5.159,1741,3.302,1742,3.302,1743,2.987,1744,2.78]],["t/357",[5,1.29,6,0.914,18,1.365,27,4.272,28,1.465,31,2.686,67,1.888,74,2.162,88,2.496,114,2.896,167,2.75,188,1.844,249,2.83,308,3.005,369,1.597,404,2.407,409,2.913,433,2.563,494,2.198,529,2.361,531,5.454,552,2.095,633,4.366,641,2.063,694,3.366,766,3.305,874,3.366,906,2.563,1157,3.533,1180,2.407,1181,3.005,1282,2.83,1381,2.507,1424,3.533,1478,3.741,1543,3.533,1672,3.741,1700,5.759,1703,4.89,1727,3.533,1745,7.601,1746,7.601,1747,4.443,1748,6.455,1749,6.455,1750,7.601,1751,4.443,1752,4.443,1753,3.533]],["t/359",[5,0.495,6,0.773,10,1.019,18,0.473,24,0.802,28,1.207,31,0.93,41,0.719,53,0.6,54,0.535,55,0.725,56,0.98,57,1.606,58,0.868,68,0.954,74,2.153,77,0.315,88,1.574,91,1.392,95,0.704,114,2.865,115,1.734,135,0.482,138,1.688,144,0.93,155,1.009,159,3.924,160,0.98,165,1.223,167,1.56,179,0.714,188,3.146,189,1.118,203,0.954,212,1.077,249,2.332,250,2.562,308,1.841,369,0.978,373,2.16,404,1.475,405,1.688,406,1.905,409,1.009,421,2.27,424,1.166,437,1.983,450,2.35,451,0.908,455,0.954,461,0.704,466,2.551,467,0.868,497,0.93,519,2.071,528,1.753,530,1.785,531,0.908,541,0.85,544,2.463,545,0.954,552,3.993,560,1.983,606,0.818,620,1.077,633,1.041,641,2.594,673,0.98,675,2.305,693,1.296,694,3.355,711,0.774,715,3.321,731,1.745,753,1.166,755,1.392,762,1.118,766,0.788,789,2.265,801,1.905,874,3.351,885,1.392,886,1.118,897,1.166,902,3.91,917,1.166,933,1.978,936,1.875,962,4.704,1011,1.296,1045,1.118,1146,1.166,1157,4.803,1162,1.296,1181,1.841,1199,3.312,1301,1.223,1311,1.392,1315,1.392,1320,1.077,1380,1.166,1381,2.066,1383,0.834,1393,2.164,1419,1.841,1428,1.077,1517,0.788,1527,4.233,1541,3.724,1552,1.296,1560,3.779,1563,1.392,1631,1.077,1669,1.166,1683,1.296,1691,1.296,1696,2.292,1700,4.874,1701,1.392,1702,2.774,1703,4.874,1727,2.164,1743,1.392,1744,1.296,1754,1.392,1755,1.392,1756,1.539,1757,2.292,1758,1.539,1759,1.296,1760,1.223,1761,1.539,1762,2.722,1763,2.722,1764,2.463,1765,2.292,1766,2.463,1767,2.463,1768,2.463,1769,2.722,1770,6.776,1771,5.587,1772,1.539,1773,1.539,1774,3.661,1775,1.539,1776,3.661,1777,1.539,1778,2.463,1779,1.539,1780,1.539,1781,1.539,1782,1.539,1783,1.539,1784,1.539,1785,1.539,1786,1.539,1787,1.539,1788,1.539,1789,1.539,1790,1.539]],["t/361",[5,0.884,6,0.684,10,1.136,18,0.859,24,1.458,27,1.432,28,0.922,56,1.781,57,3.357,74,2.199,78,3.981,88,1.602,114,0.876,125,1.191,135,1.27,139,1.298,155,1.833,156,1.485,157,2.274,210,1.298,223,1.733,236,2.031,269,1.26,306,1.458,308,3.057,315,1.891,325,1.208,335,1.649,360,4.051,369,2.044,373,1.649,394,2.118,400,2.118,404,3.081,494,1.383,519,2.331,545,1.733,560,1.514,645,2.031,674,4.448,680,2.223,694,1.458,698,2.223,715,2.862,731,1.783,780,2.315,878,2.963,902,1.339,933,2.031,941,2.223,942,2.223,1135,2.223,1162,2.354,1180,3.081,1217,2.118,1218,2.031,1238,2.966,1355,2.354,1381,3.21,1383,1.514,1407,2.223,1428,1.956,1457,3.593,1461,2.529,1515,2.529,1517,1.432,1597,3.081,1631,1.956,1663,2.529,1695,3.805,1696,2.354,1703,6.12,1706,5.195,1712,2.354,1713,4.089,1716,6.801,1718,2.354,1727,2.223,1735,4.95,1759,2.354,1764,2.529,1765,2.354,1766,2.529,1767,2.529,1768,2.529,1791,2.529,1792,2.796,1793,2.529,1794,2.529,1795,2.354,1796,1.956,1797,2.796,1798,2.796,1799,2.223,1800,2.796,1801,2.796,1802,2.796,1803,2.796,1804,2.796,1805,2.796,1806,2.529,1807,2.354,1808,2.796,1809,2.796,1810,2.796,1811,2.796,1812,2.796,1813,6.534,1814,2.796,1815,2.796,1816,2.796,1817,5.689,1818,5.689,1819,2.796,1820,2.796,1821,2.223,1822,1.781]],["t/364",[5,1.255,22,2.786,54,1.562,56,4.145,58,2.536,191,2.262,223,2.786,295,2.187,307,2.947,456,3.784,497,2.716,641,2.086,681,2.434,711,2.262,717,2.863,719,3.04,727,3.04,751,4.554,777,6.092,792,2.947,828,3.04,886,3.265,922,3.04,923,2.947,935,4.066,948,4.066,960,3.573,1138,3.145,1218,4.728,1228,4.066,1272,6.083,1274,3.573,1286,4.267,1424,3.573,1489,3.405,1495,3.405,1503,3.573,1547,3.573,1728,5.888,1753,3.573,1823,3.784,1824,4.494,1825,5.479,1826,5.796,1827,6.083,1828,7.464,1829,4.494,1830,4.494,1831,4.494,1832,3.405,1833,4.494,1834,4.494,1835,4.494,1836,4.494,1837,6.508,1838,4.494,1839,3.784]],["t/366",[11,1.554,156,4.319,273,4.914,541,4.493,681,5.213,1294,5.04,1840,6.845,1841,8.13,1842,6.845]],["t/368",[8,2.21,11,1.167,43,2.218,77,1.249,156,4.273,177,2.296,215,4.853,228,3.072,231,4.002,295,2.97,497,3.689,540,6.094,541,4.445,670,4.129,711,3.072,740,5.274,777,4.434,848,4.129,944,3.072,1003,4.271,1146,4.624,1669,4.624,1691,5.139,1791,5.522,1795,5.139,1827,4.853,1828,4.434,1842,5.139,1843,6.104,1844,6.104,1845,6.104,1846,5.522,1847,5.522,1848,4.434,1849,5.139,1850,3.784]],["t/370",[6,0.666,11,1.06,16,2.654,159,3.555,196,3.063,295,2.697,328,5.713,350,3.932,386,4.667,650,3.879,670,3.749,777,5.478,801,6.437,836,3.749,873,3.879,1121,5.015,1152,6.349,1236,4.255,1274,4.407,1826,5.713,1827,6.814,1832,4.199,1851,5.015,1852,7.541,1853,6.822,1854,5.543,1855,5.543,1856,5.543,1857,5.543,1858,5.015,1859,5.543,1860,5.543,1861,7.541,1862,7.541,1863,5.543,1864,5.015,1865,5.543,1866,4.407,1867,5.543]],["t/372",[11,1.37,17,3.43,35,2.973,156,3.806,273,4.33,427,3.377,541,3.959,542,6.031,670,4.845,681,3.88,777,5.204,1153,5.427,1194,5.013,1224,6.481,1294,4.441,1334,5.695,1842,6.031,1849,6.031,1851,6.481,1868,7.164,1869,7.164,1870,7.164,1871,6.481]],["t/374",[5,1.219,10,1.155,11,1.171,15,1.695,27,2.119,28,2.02,50,3.29,77,2.002,94,4.76,114,1.919,116,4.017,117,2.776,135,1.292,162,1.633,167,3.841,174,3.773,356,3.29,358,2.896,447,1.951,467,2.335,499,3.006,594,2.501,621,3.135,675,3.067,681,2.242,694,2.158,696,1.764,714,2.442,766,3.138,789,2.119,796,3.703,800,2.387,818,2.713,876,5.158,901,2.083,927,1.74,949,2.896,961,3.318,963,2.636,1139,3.135,1151,3.135,1155,2.442,1288,3.484,1326,3.29,1378,4.144,1517,2.119,1825,3.484,1872,4.138,1873,3.744,1874,3.744,1875,4.138]],["t/376",[10,1.244,11,1.502,22,2.92,24,2.456,103,2.502,139,2.187,156,2.502,215,3.745,219,3,272,4.261,328,3.569,332,3.186,350,2.456,408,3.088,447,2.22,519,1.93,541,2.603,597,3.745,637,3.422,650,3.296,675,2.29,701,2.92,711,3.388,777,4.89,853,3.569,855,3.422,886,3.422,910,2.779,927,1.981,1153,3.569,1186,3.296,1188,2.92,1192,3.422,1246,3.966,1275,5.667,1286,3.088,1290,3.569,1294,4.173,1317,3.088,1349,6.09,1428,3.296,1516,4.261,1629,3.966,1753,3.745,1823,3.966,1826,5.951,1827,6.814,1828,5.706,1832,3.569,1847,4.261,1848,3.422,1853,4.261,1866,3.745,1876,4.261,1877,4.71,1878,4.71,1879,4.71,1880,6.09,1881,3.422,1882,3.966,1883,4.71,1884,4.71]],["t/378",[10,0.91,52,3.175,68,4.79,77,1.176,94,4.248,114,1.8,128,2.996,135,1.653,162,3.444,167,3.72,174,2.324,177,2.161,295,2.796,356,4.568,358,4.021,369,2.065,462,3.767,490,3.473,529,3.053,563,2.892,622,3.473,637,4.174,675,1.955,715,2.517,723,2.996,731,2.267,766,2.943,772,3.767,957,4.568,961,4.185,962,4.838,1005,4.838,1840,4.838,1885,5.199,1886,5.199,1887,5.746,1888,5.226,1889,5.746]],["t/380",[3,2.019,17,1.854,22,2.401,25,2.813,26,3.079,48,2.341,75,1.854,77,1.435,94,3.412,95,3.207,112,1.607,114,1.827,162,2.3,167,3.325,249,2.467,277,2.467,295,1.885,369,2.095,404,3.158,442,2.401,451,2.285,467,2.185,518,2.539,543,3.079,633,2.619,641,1.798,644,2.71,711,2.934,715,1.696,717,2.467,849,3.079,902,1.854,963,2.467,986,2.934,1002,2.934,1233,3.079,1236,4.403,1238,2.019,1278,2.813,1283,4.635,1293,4.909,1310,2.934,1346,3.079,1360,3.26,1371,3.504,1376,3.44,1398,4.635,1419,2.619,1517,1.983,1554,5.575,1626,2.71,1796,2.71,1828,4.235,1839,3.26,1849,4.909,1885,3.504,1886,3.504,1890,7.683,1891,4.635,1892,4.909,1893,6.34,1894,4.635,1895,3.873,1896,5.312,1897,5.83,1898,3.504,1899,4.635,1900,6.344,1901,2.813,1902,3.26,1903,3.079,1904,3.504]],["t/382",[3,3.339,52,3.538,75,3.066,77,1.311,94,4.039,135,1.134,167,2.729,210,2.972,372,3.116,442,3.97,467,3.613,468,3.538,723,3.339,868,5.091,961,3.468,1002,4.851,1003,4.48,1233,5.091,1238,3.339,1283,6.598,1293,5.391,1294,3.97,1566,6.288,1591,4.851,1796,4.48,1888,4.331,1890,8.202,1896,4.851,1901,4.651,1905,5.091]],["t/384",[725,5.351,780,5.25,901,3.707,1283,5.856,1517,5.25,1554,5.856,1890,7.634,1891,5.856,1892,6.201,1906,7.366,1907,7.366,1908,7.366,1909,7.366]],["t/386",[17,1.892,25,2.87,40,1.578,77,0.809,94,3.453,98,2.229,142,2.06,147,2.59,167,3.597,174,1.598,177,1.486,219,2.516,231,2.59,276,3.141,358,2.764,401,3.294,496,3.141,519,3.229,520,2.87,522,1.54,543,3.141,620,2.764,633,2.672,641,1.834,644,2.764,696,3.024,713,2.764,714,2.331,766,2.023,828,2.672,865,3.326,869,3.574,891,2.672,901,1.988,922,2.672,923,2.59,929,2.672,961,3.206,1132,3.141,1188,2.449,1194,2.764,1225,2.764,1236,3.34,1260,2.87,1310,2.993,1313,3.574,1346,6.266,1376,2.331,1495,4.484,1584,3.141,1631,2.764,1840,3.326,1846,3.574,1880,7.13,1893,6.713,1896,4.484,1898,3.574,1899,6.266,1900,5.354,1903,4.705,1910,3.951,1911,3.574,1912,5.918,1913,5.918,1914,3.951,1915,3.326,1916,3.951,1917,3.574,1918,3.951,1919,3.951,1920,3.951,1921,3.951,1922,3.951,1923,3.141,1924,3.951,1925,3.951,1926,3.951]],["t/388",[11,1.298,35,2.818,55,3.201,103,4.579,142,3.541,182,4.007,519,2.782,696,2.894,780,5.1,906,4.971,1253,5.718,1406,5.145,1517,5.1,1893,5.145,1927,6.792,1928,7.797,1929,6.792,1930,6.792,1931,6.792,1932,6.792]],["t/390",[6,0.461,17,1.836,28,1.264,30,1.264,45,1.78,74,2.816,94,4.827,98,2.164,159,1.808,162,1.513,167,3.99,203,2.377,231,2.514,306,2,373,2.263,384,4.601,389,3.229,420,2.771,476,1.656,519,1.571,520,2.786,522,1.495,545,4.813,637,2.786,658,2.786,674,2.377,715,3.053,717,2.443,725,2.786,766,2.964,825,2.786,851,2.594,890,2,949,4.05,950,3.229,961,2.077,1185,2.786,1218,4.204,1232,3.229,1260,2.786,1262,3.229,1274,3.049,1343,5.542,1354,3.469,1376,2.263,1419,2.594,1495,4.384,1521,2.786,1533,4.873,1547,3.049,1618,3.229,1718,4.873,1755,3.469,1795,3.229,1828,6.365,1893,4.384,1903,5.542,1905,3.049,1915,3.229,1933,3.835,1934,3.835,1935,3.229,1936,3.835,1937,3.835,1938,3.469,1939,3.835,1940,3.835,1941,5.787,1942,3.835,1943,3.229,1944,3.835,1945,5.787,1946,3.835,1947,3.835,1948,3.835]],["t/392",[58,4.361,142,4.03,451,4.56,482,6.145,519,3.166,751,5.408,780,4.782,1517,4.782,1828,7.288,1949,7.729,1950,7.729]],["t/394",[55,3.174,94,4.171,95,3.92,135,1.67,141,3.511,167,2.869,214,3.511,265,4.07,401,3.126,508,4.554,715,2.949,723,3.511,770,6.091,961,3.647,1002,5.101,1048,5.101,1169,5.669,1172,5.669,1876,6.091,1894,6.815,1896,5.101,1951,6.733,1952,4.711,1953,6.091,1954,6.733]],["t/396",[6,0.911,95,3.466,135,1.342,336,2.664,404,4.105,780,4.726,800,4.371,927,3.187,1185,5.506,1517,4.726,1716,6.381,1894,6.026,1953,6.857,1955,7.579,1956,7.579]],["t/398",[11,1.507,15,3.23,22,4.888,31,4.765,77,1.614,562,6.268,963,5.022,1282,5.022,1353,4.357,1503,6.268,1584,6.268,1662,5.169,1823,6.638]],["t/400",[10,0.938,22,3.67,73,4.706,77,1.814,94,2.881,114,1.855,116,3.881,117,2.253,135,1.396,162,2.335,166,3.67,174,2.394,273,4.764,301,3.881,306,3.087,521,4.142,622,3.578,681,3.206,696,2.523,780,4.839,957,4.706,963,3.77,1001,4.706,1346,4.706,1517,4.839,1754,8.017,1848,4.3,1888,4.004,1957,5.92,1958,5.92,1959,5.92,1960,5.92,1961,5.92,1962,5.92]],["t/403",[1,1.256,2,1.963,5,1.196,10,1.018,11,0.845,13,1.81,16,3.078,67,1.293,77,1.316,87,2.186,88,1.244,135,1.565,157,2.223,224,1.442,230,1.662,249,2.814,337,3.707,372,2.15,373,2.607,404,2.393,437,2.393,442,2.739,468,2.442,513,2.988,519,1.81,532,3.707,644,3.092,652,2.897,672,3.347,673,2.814,675,2.187,694,3.352,701,2.739,731,1.743,735,4.498,814,3.552,825,3.21,850,2.897,894,3.72,902,2.116,904,3.21,944,3.235,963,2.814,1174,3.347,1202,2.739,1238,2.304,1243,3.513,1261,3.347,1301,3.513,1357,3.347,1381,2.493,1383,4.104,1662,2.897,1757,5.412,1822,4.094,1952,3.092,1963,4.418,1964,3.21,1965,4.418,1966,6.024,1967,3.997,1968,3.21,1969,3.513,1970,5.815,1971,3.997,1972,3.997]],["t/405",[5,1.229,10,1.071,11,0.906,13,1.941,16,3.237,67,1.386,77,1.384,87,2.345,135,1.609,224,1.546,230,1.782,249,3.018,337,3.899,372,2.306,404,2.567,437,2.567,442,2.938,468,2.619,513,3.205,519,1.941,532,3.899,644,3.316,652,3.107,672,3.59,673,3.018,675,2.3,694,2.471,731,1.87,735,4.731,814,3.736,825,3.442,850,3.107,894,3.99,902,2.269,904,3.442,944,3.402,1174,3.59,1202,2.938,1238,2.471,1243,3.768,1261,3.59,1301,3.768,1357,3.59,1381,2.674,1383,4.269,1757,5.692,1822,4.306,1952,3.316,1966,6.266,1967,4.287,1968,3.442,1969,3.768,1970,6.116,1971,4.287,1972,4.287]],["t/408",[5,1.123,11,1.224,80,4.716,135,1.469,337,3.693,552,3.912,652,4.198,672,4.851,675,2.179,902,3.974,944,4.634,1238,3.339,1383,4.988,1523,4.651,1952,5.807,1966,6.598,1968,4.651,1973,5.793,1974,6.403,1975,6.403,1976,6.403,1977,6.403,1978,6.403,1979,6.403]],["t/410",[2,1.829,4,2.037,5,1.364,11,1.167,30,2.012,52,2.275,67,1.204,94,2.97,114,1.912,116,2.699,117,1.567,135,1.649,167,2.601,195,1.754,249,2.622,267,2.881,369,1.479,373,3.601,461,2.791,468,2.275,569,5.809,675,3.168,731,1.624,789,2.108,793,5.273,902,1.971,1202,4.509,1282,2.622,1353,2.275,1381,2.323,1383,2.23,1517,2.108,1523,4.433,1537,3.466,1591,4.623,1677,3.724,1822,2.622,1848,5.283,1952,2.881,1964,2.99,1968,2.99,1969,3.273,1980,6.103,1981,6.103,1982,6.394,1983,4.117,1984,4.117,1985,5.521,1986,3.466,1987,4.117,1988,4.117,1989,6.103,1990,4.117,1991,4.117,1992,4.117]],["t/412",[5,1.072,8,1.465,11,1.514,18,1.832,135,1.575,337,3.44,468,3.296,559,4.174,652,3.911,672,4.519,711,3.002,814,4.915,823,4.742,902,2.856,944,4.476,1138,4.174,1282,3.799,1383,4.818,1407,4.742,1527,4.519,1822,3.799,1952,5.543,1966,6.298,1968,4.333,1969,4.742,1993,5.965,1994,5.965,1995,5.965,1996,5.965,1997,5.965,1998,5.965,1999,5.965,2000,5.965]],["t/415",[10,1.076,11,1.648,30,2.239,77,1.39,88,1.913,249,4.326,265,4.105,266,5.399,337,3.917,373,5.086,420,3.252,467,3.832,694,4.494,767,4.007,893,4.326,939,5.718,1227,5.718,1296,5.145,1353,3.753,1964,6.261,2001,6.144,2002,8.619,2003,6.792,2004,5.718]],["t/417",[6,0.816,10,1.076,28,2.239,53,2.647,77,1.764,88,1.913,195,2.894,219,4.326,373,5.587,459,5.718,485,3.418,503,4.933,509,3.418,641,3.153,694,3.541,722,5.399,767,4.007,810,5.399,1182,4.933,1541,5.718,1964,6.261,2001,6.144,2005,8.619,2006,6.792]],["t/419",[88,2.525,95,3.306,179,3.356,350,3.77,369,2.598,453,4.74,694,3.77,767,4.266,828,4.89,893,6.487,1248,5.252,1744,6.087,2007,8.964,2008,6.541,2009,7.23,2010,7.23,2011,7.23]],["t/421",[10,1.611,142,3.423,155,4.303,297,4.303,350,3.423,373,5.498,643,4.303,694,3.423,767,3.873,826,5.901,1186,4.593,1236,3.704,1277,5.526,1317,4.303,1353,5.149,1357,4.973,1360,5.526,1618,5.526,1964,6.126,2004,5.526,2012,5.938,2013,6.564,2014,6.564]],["t/423",[10,1.638,15,2.623,214,3.339,224,2.089,250,5.807,295,4.039,351,4.651,372,3.116,435,5.793,447,3.018,494,4.106,498,5.793,562,5.091,767,5.433,1045,4.651,1092,5.793,1231,6.598,1302,5.391,1419,4.331,1491,5.793,1610,5.391,2015,6.403,2016,5.391,2017,5.793,2018,4.851]],["t/425",[1,2.23,8,1.927,10,1.242,54,2.042,77,1.203,79,3.641,141,3.064,147,3.852,189,4.268,195,2.504,210,2.727,214,3.064,236,4.268,265,3.551,362,3.742,372,3.817,447,2.77,494,2.907,499,5.697,518,3.852,522,2.29,537,4.451,545,3.643,619,4.111,708,3.742,731,2.318,767,4.628,866,4.947,886,4.268,978,5.315,994,3.742,1020,4.947,1043,4.671,1174,4.451,1278,4.268,1290,5.942,2019,5.315,2020,5.315,2021,4.947]],["t/427",[1,1.434,6,0.606,10,1.626,16,2.415,27,2.583,56,3.213,141,2.63,142,4.607,188,2.932,195,2.149,306,3.684,476,3.523,485,2.538,494,4.035,499,3.664,518,3.307,545,3.127,616,3.821,622,3.048,731,1.99,767,4.812,769,5.617,861,4.563,882,5.948,892,3.821,994,3.213,1173,3.821,1186,3.529,1275,4.246,1521,3.664,1559,3.821,1610,4.246,1896,3.821,2017,4.563,2022,7.065,2023,5.044,2024,5.044,2025,5.044,2026,7.065,2027,5.044,2028,5.044,2029,5.044,2030,5.044,2031,6.392,2032,5.044]],["t/429",[1,2.393,6,0.643,10,1.556,16,2.564,77,1.096,142,4.389,150,2.959,210,2.485,224,1.747,333,2.9,336,1.882,359,6.377,447,2.524,485,2.694,494,4.164,522,2.087,634,3.088,640,4.256,656,4.507,717,5.361,767,5.796,892,6.868,897,4.056,907,4.056,961,2.9,994,3.41,1150,4.256,1257,3.889,1565,4.507,2020,6.662,2021,4.507,2033,5.354,2034,6.662,2035,4.843,2036,5.354]],["t/431",[1,1.763,3,2.193,6,0.885,10,1.556,74,2.046,144,2.542,214,3.233,230,1.581,306,3.84,329,1.868,333,3.358,337,3.575,359,3.186,362,2.678,363,2.942,388,7.352,391,4.064,394,3.186,399,3.804,457,3.343,469,3.804,476,1.816,485,2.116,494,4.287,507,5.219,511,2.757,513,2.844,518,4.064,532,3.575,611,4.69,616,3.186,756,2.481,762,3.055,767,5.349,825,3.055,907,3.186,910,2.481,1181,2.844,1225,2.942,1242,3.54,1256,2.678,1278,4.503,1873,3.804,1882,5.219,2016,3.54,2031,3.804,2034,5.608,2037,6.199,2038,4.205,2039,6.199,2040,6.199,2041,4.205,2042,4.205,2043,6.199,2044,4.205,2045,3.54,2046,3.54,2047,4.205,2048,4.205]],["t/433",[3,2.996,6,0.691,10,1.479,53,2.239,77,1.176,87,2.843,188,2.385,224,1.875,420,4.18,427,2.709,494,4.319,499,4.174,507,4.838,534,4.838,552,2.709,656,4.838,666,4.353,694,2.996,767,5.151,850,3.767,890,2.996,953,4.838,994,3.66,1013,5.199,1020,4.838,1104,5.199,1184,4.568,1317,3.767,1551,4.838,1553,5.199,1565,4.838,1584,4.568,1888,3.886,2016,6.505,2021,4.838,2049,4.838,2050,4.838,2051,5.746,2052,5.746,2053,5.746]],["t/436",[5,0.575,6,0.891,10,0.99,11,0.813,17,2.035,25,3.088,27,2.177,28,1.401,77,0.87,88,1.197,114,1.332,135,1.312,159,2.004,172,1.719,174,1.719,187,2.216,203,2.635,217,3.579,219,2.707,230,1.599,255,2.974,306,2.216,350,3.258,369,1.527,420,3.548,461,1.944,472,2.974,529,2.258,573,4.372,620,2.974,641,2.901,658,3.088,675,2.779,697,5.653,775,3.379,788,3.088,789,3.2,836,4.226,901,2.139,919,3.088,926,3.088,927,3.827,928,4.734,929,4.226,969,3.22,1003,2.974,1146,4.734,1155,2.508,1182,4.539,1236,4.181,1248,3.088,1257,3.088,1294,2.635,1353,3.453,1357,3.22,1381,2.399,1473,3.22,1550,3.846,1597,2.302,1796,2.974,1822,2.707,1825,3.579,2054,4.251,2055,4.251,2056,4.251,2057,2.787,2058,4.251,2059,4.251,2060,4.251,2061,4.251]],["t/438",[5,0.839,8,1.523,11,1.185,18,1.904,89,4.065,103,3.294,159,2.923,350,3.233,470,5.22,633,4.194,641,2.878,703,3.427,927,2.607,950,5.22,1192,4.504,1236,5.116,1272,4.93,1321,4.504,1353,3.427,1399,4.698,1402,4.93,1406,4.698,1524,4.504,1558,4.93,1594,5.22,1596,5.22,1597,4.911,1598,4.93,1826,4.698,1832,4.698,1905,6.461,2062,8.127,2063,5.22,2064,5.61]],["t/440",[5,0.777,79,2.667,135,1.653,159,3.642,162,2.267,258,4.568,295,2.796,364,4.021,369,2.065,433,3.314,455,3.562,468,3.175,501,4.353,530,3.767,606,3.053,633,3.886,719,3.886,727,3.886,731,3.048,789,2.943,890,2.996,1236,5.268,1238,2.996,1303,5.199,1353,3.175,1383,3.112,1527,4.353,1554,4.568,1559,4.353,1597,4.185,1598,4.568,1687,5.199,1759,4.838,1905,4.568,1968,4.174,2065,6.99,2066,5.746,2067,5.746,2068,5.746,2069,5.746]],["t/442",[5,0.724,11,1.023,16,2.564,41,1.413,74,2.605,103,3.912,135,1.49,179,2.485,219,3.41,350,3.84,455,4.565,468,2.959,470,4.507,606,2.844,703,2.959,719,4.981,731,2.112,793,3.51,890,3.84,927,3.539,1165,3.51,1236,3.021,1297,4.843,1383,3.989,1488,4.256,1499,4.843,1524,3.889,1525,4.056,1539,4.056,1551,4.507,1552,4.507,1558,4.256,1561,4.843,1566,4.056,1596,4.507,1597,3.989,1626,3.746,1669,4.056,1683,4.507,2063,4.507,2064,4.843,2065,7.615,2070,4.507,2071,5.354,2072,5.354,2073,5.354,2074,5.354]],["t/444",[5,1.095,6,0.599,8,1.72,11,1.339,27,2.55,88,1.403,89,3.265,112,2.067,135,0.882,166,3.087,210,2.312,336,1.75,350,2.597,364,3.484,369,1.789,402,3.087,442,3.087,444,5.31,450,2.646,476,2.151,559,3.484,703,2.752,723,2.597,731,1.965,893,3.172,897,3.773,902,2.385,926,3.617,927,3.405,1045,3.617,1155,4.132,1189,3.959,1192,3.617,1272,3.959,1290,3.773,1343,3.959,1353,2.752,1510,4.505,1517,4.147,1578,3.959,1597,2.697,1821,3.959,1822,3.172,1826,3.773,1832,6.657,2075,4.98,2076,4.98,2077,4.98,2078,4.505,2079,4.98,2080,4.98,2081,4.98,2082,4.98,2083,4.98,2084,4.98,2085,4.98,2086,4.98]],["t/446",[6,0.963,10,0.774,16,2.34,39,6.33,58,2.757,74,2.378,79,2.268,135,0.865,139,2.268,162,1.928,163,1.796,191,2.459,230,2.599,332,3.305,350,2.548,490,2.953,501,3.702,503,3.55,529,2.596,552,2.303,606,2.596,617,4.114,619,4.835,641,2.268,648,3.702,712,3.702,766,3.538,775,6.373,801,4.835,836,3.305,850,3.204,890,3.603,919,3.55,920,3.702,925,3.55,927,2.905,929,3.305,1008,4.114,1175,3.702,1217,3.702,1236,2.757,1294,3.029,1318,4.421,1544,3.885,1566,5.235,1578,3.885,1698,5.493,1917,4.421,2063,5.817,2087,4.887,2088,4.887,2089,4.887,2090,4.421,2091,4.114,2092,4.887,2093,4.887,2094,4.421,2095,4.887]],["t/448",[5,0.911,57,3.973,135,1.192,362,4.289,410,4.891,450,4.554,461,3.079,834,5.353,927,4.31,1041,6.091,1238,3.511,1260,4.891,1320,4.711,1321,4.891,1334,5.353,1353,3.721,1399,5.101,1590,6.091,1597,3.647,1626,4.711,1662,4.414,1822,4.289,1952,4.711,2045,5.669,2096,6.733]],["t/450",[138,4.524,188,3.028,227,3.61,497,4.411,502,4.118,504,4.936,696,4.169,1014,5.528,1181,4.936,1356,5.01,1362,6.144,1513,6.602,1850,5.589,1881,5.301,2097,6.602,2098,6.602]],["t/452",[75,2.969,139,2.878,179,2.878,643,4.065,696,2.642,708,3.949,788,4.504,796,5.48,974,4.504,1132,4.93,1327,6.733,1381,3.499,1631,4.339,1850,3.844,1888,4.194,2099,8.705,2100,8.202,2101,5.61,2102,6.843,2103,4.698,2104,5.61,2105,5.61,2106,5.61,2107,5.61,2108,5.61,2109,5.61,2110,5.61,2111,4.93,2112,5.61]],["t/454",[6,0.83,53,1.904,60,4.917,75,4.172,79,3.208,114,2.511,139,4.268,141,2.548,144,2.953,179,4.43,188,2.028,195,2.082,204,2.235,210,3.208,224,1.594,277,3.112,335,2.883,336,1.717,369,1.756,401,2.268,409,3.204,462,3.204,634,2.818,643,4.53,696,2.082,702,3.55,708,5.856,731,2.726,878,3.204,907,3.702,910,2.883,1181,3.305,1282,3.112,1327,6.097,1356,4.462,1376,2.883,1943,4.114,2103,3.702,2113,4.114,2114,4.887,2115,4.887,2116,4.887]],["t/456",[1,1.898,6,0.802,78,4.671,138,4.139,139,3.957,171,3.448,179,3.099,210,3.099,335,5.03,336,2.346,372,3.249,404,3.616,509,4.29,696,2.845,708,5.43,922,5.766,923,5.589,1180,3.616,1327,5.965,1356,3.419,1850,4.139,1881,4.849,2117,5.058]],["t/458",[139,4.258,159,3.539,204,4.195,210,3.485,227,3.714,444,4.922,497,4.537,708,4.781,764,5.968,890,3.914,1282,4.781,1317,4.922,1356,3.844,2004,6.32,2118,6.791,2119,7.507]],["t/460",[1,2.065,6,0.631,23,3.811,57,3.096,112,2.177,139,4.381,179,2.435,195,2.236,210,3.371,224,1.712,311,4.417,401,2.435,433,3.026,473,4.746,619,5.081,673,3.342,696,3.094,708,6.011,753,3.974,764,4.171,901,4.523,923,3.44,1042,4.417,1138,5.081,1210,3.974,1446,4.417,1642,4.171,1645,4.746,2111,7.146,2113,4.417,2120,4.746,2121,6.114,2122,8.328,2123,7.262,2124,5.246,2125,4.746,2126,5.246,2127,5.246,2128,4.746,2129,5.246]],["t/462",[139,4.715,143,3.284,179,4.557,191,2.275,210,2.098,212,3.163,223,4.052,227,2.236,231,2.964,335,2.667,336,1.589,350,2.357,408,5.032,451,2.667,455,2.802,502,2.551,541,2.498,582,3.284,696,2.785,708,6.253,711,2.275,766,2.315,901,2.275,974,3.284,1045,3.284,1108,4.747,1191,3.424,1327,4.573,1392,3.806,1473,3.424,1525,4.951,1778,4.089,1850,2.802,1881,3.284,1888,3.057,2113,3.806,2130,4.52,2131,4.52,2132,4.52,2133,8.41,2134,4.52,2135,4.089,2136,4.52,2137,4.52,2138,8.41,2139,4.52,2140,4.52,2141,4.52,2142,4.52,2143,3.806,2144,4.52]],["t/464",[171,2.952,408,4.784,696,3.11,701,4.524,922,6.617,923,6.414,961,3.952,1173,5.528,1310,5.528,1356,5.01,1702,5.528,1850,4.524,2145,6.602,2146,7.297,2147,6.602]],["t/466",[95,3.337,254,4.524,309,5.301,406,5.106,420,3.494,450,3.877,462,4.784,685,4.784,696,3.842,731,2.879,756,4.306,772,4.784,938,5.802,1194,5.106,1337,5.802,1356,4.617,1560,4.936,1850,5.589]],["t/468",[518,5.222,696,3.394,756,4.699,910,4.699,1850,4.938,2049,6.705,2117,6.034,2148,6.705,2149,7.205,2150,6.705,2151,6.705,2152,7.205]],["t/470",[5,1.172,10,1.085,24,3.572,28,2.857,30,2.259,67,2.004,77,1.402,79,3.18,88,2.441,167,2.919,196,3.786,228,3.448,307,4.492,329,3.043,508,4.634,512,5.768,674,4.247,692,5.447,711,3.448,855,4.977,1317,4.492,1695,5.768,2153,6.851,2154,4.977,2155,6.851]],["t/473",[5,1.291,6,0.831,10,1.095,28,2.279,30,2.279,77,1.415,88,1.947,92,4.836,93,5.02,114,2.165,135,1.224,162,2.727,177,2.599,276,5.495,277,4.402,528,3.309,650,4.836,675,2.352,927,2.906,936,3.539,1047,5.495,2154,5.02,2156,6.911,2157,5.236,2158,5.495]],["t/475",[1,1.948,5,0.927,29,3.389,67,2.004,90,4.634,112,2.843,451,4.042,471,4.977,528,4.15,675,2.331,852,5.19,919,6.295,920,6.566,924,5.768,925,4.977,936,3.508,1581,6.295,2159,4.492,2160,7.841,2161,7.841,2162,5.19,2163,5.447]],["t/477",[2,2.844,5,1.123,15,2.623,16,3.066,28,2.111,30,2.111,41,2.572,88,2.338,92,4.48,476,2.766,511,4.198,524,4.331,528,3.974,780,3.279,936,4.989,1165,4.198,1517,3.279,1711,4.851,2159,4.198,2164,6.598,2165,5.091,2166,5.793,2167,5.793,2168,7.508,2169,5.793]],["t/479",[6,0.885,28,2.428,29,3.644,88,2.075,149,5.351,485,3.707,503,5.351,528,4.704,529,3.913,611,4.692,740,4.829,893,4.692,936,3.772,1248,5.351,1256,4.692,1760,5.856,2170,4.982,2171,7.366]],["t/481",[5,1.318,8,1.776,11,1.382,13,3.672,15,3.672,16,3.462,17,3.462,28,2.384,30,2.955,36,4.605,75,4.292,77,1.48,97,4.74,149,5.252,850,4.74,1286,4.74]],["t/483",[5,1.36,6,1.053,10,1.104,20,3.509,24,4.57,95,3.189,194,3.571,372,3.393,481,5.87,528,3.339,531,4.114,532,4.021,618,6.308,740,4.571,796,4.214,936,3.571,2157,5.282,2158,5.544,2172,6.973,2173,6.973,2174,6.308]],["t/485",[5,1.015,79,3.485,95,3.433,214,3.914,306,3.914,363,5.253,398,5.687,487,4.429,500,5.968,502,4.236,504,5.077,524,5.077,769,5.968,1796,5.253,2148,6.32,2175,6.32,2176,7.507,2177,6.791]],["t/487",[5,1.307,13,2.908,14,3.634,28,2.34,75,4.244,88,1.999,97,4.654,190,3.702,198,3.923,236,5.157,298,4.897,361,5.378,476,3.067,531,4.189,532,4.094,570,3.702,673,4.522,920,5.378]],["t/489",[5,0.903,41,2.251,54,2.321,62,3.939,66,3.689,75,4.082,88,1.88,269,3.008,298,4.711,330,4.849,381,4.377,415,4.671,570,5.16,639,5.058,1428,4.671,1799,5.307,2178,5.307,2179,5.621,2180,5.621,2181,5.621,2182,5.621,2183,6.676,2184,6.676,2185,6.676,2186,6.676]],["t/491",[5,1.31,38,4.449,75,3.934,88,2.314,164,4.449,227,4.064,813,5.967,836,5.556]],["t/493",[5,1.123,12,4.106,38,5.277,41,1.69,54,2.226,75,3.066,88,1.803,164,3.468,269,2.886,298,4.586,381,4.198,415,4.48,639,4.851,1428,4.48,1799,5.091,2178,5.091,2179,5.391,2180,5.391,2181,5.391,2182,5.391,2187,6.987,2188,6.403,2189,5.793,2190,8.299,2191,8.299,2192,8.299]],["t/495",[0,2.416,5,1.181,8,1.898,9,3.314,11,1.098,13,2.354,18,1.765,30,1.894,38,5.057,41,1.517,54,1.998,75,3.7,88,2.176,164,3.112,269,3.482,291,3.767,292,3.562,298,4.27,381,3.767,415,4.021,484,2.996,570,2.996,639,4.353,814,4.27,1428,4.021,1799,4.568,2050,4.838,2178,4.568,2179,4.838,2180,4.838,2181,4.838,2182,4.838,2187,7.35,2189,5.199,2193,5.746,2194,6.99]],["t/497",[5,0.832,6,0.739,10,0.974,14,2.314,27,3.15,30,3.163,35,3.355,43,2.235,106,3.208,304,4.296,310,5.873,325,2.657,329,2.733,333,3.332,369,2.21,374,5.15,385,4.891,437,3.332,522,3.151,541,4.468,622,3.718,641,2.856,890,3.208,968,3.918,1153,4.661,1419,4.161,1485,5.469,2195,4.891,2196,4.469,2197,6.428]],["t/499",[1,2.372,5,1.129,6,0.776,28,2.751,30,2.751,35,2.679,62,4.923,106,4.351,111,3.604,374,5.314,522,3.603,528,3.995,536,4.891,563,3.249,864,5.841,1485,5.643,1578,5.133,2170,4.367,2197,5.133,2198,3.43,2199,8.344,2200,5.133]],["t/501",[5,1.181,6,1.049,14,2.161,15,2.354,28,2.547,30,3.078,35,2.385,62,3.391,63,2.892,106,4.029,111,2.482,236,4.174,304,4.105,310,6.342,374,4.922,476,2.482,522,3.402,528,3.7,807,5.854,968,3.66,1485,3.886,1597,3.112,2170,3.886,2196,4.174,2197,4.568,2198,3.053,2200,4.568,2201,5.746,2202,5.746,2203,5.746,2204,4.568,2205,7.727]],["t/503",[5,0.633,6,0.941,14,1.761,28,1.544,30,3.375,35,1.943,41,2.484,62,2.763,63,2.356,82,2.7,106,2.442,172,1.894,297,3.07,298,3.704,304,4.541,310,6.209,331,2.7,369,1.682,374,2.982,522,2.612,528,3.21,541,5.575,563,3.373,569,5.295,673,2.982,807,3.547,922,3.167,941,3.723,942,3.723,968,2.982,1485,3.167,1545,3.547,1662,3.07,2195,5.329,2196,3.401,2197,3.723,2198,3.561,2200,3.723,2206,4.682,2207,4.682,2208,4.682,2209,6.703]],["t/505",[0,2.163,5,1.205,6,0.618,8,1.263,18,1.58,20,2.588,28,1.696,30,2.938,43,3.404,62,3.035,63,2.588,67,2.095,77,1.466,80,2.634,88,1.449,114,2.244,135,1.459,157,2.588,159,2.424,167,2.192,172,2.08,214,3.735,228,2.588,230,1.934,269,2.318,325,2.222,369,1.848,419,2.902,420,2.463,490,3.108,522,3.473,563,2.588,570,2.682,652,3.372,675,2.437,715,2.253,941,4.089,942,4.089,955,3.599,1126,3.896,1147,3.736,1517,2.634,1626,3.599,2198,2.732,2204,4.089,2210,4.653]],["t/507",[5,1.318,6,0.77,10,1.014,11,1.224,24,3.339,28,2.111,30,2.111,67,1.873,77,1.311,88,2.338,92,4.48,114,2.006,135,1.134,162,2.526,177,2.408,188,2.657,276,5.091,369,2.301,372,3.116,528,3.066,650,4.48,675,2.179,927,2.692,936,4.25,1335,5.391,1662,4.198,2154,4.651,2157,4.851,2158,5.091,2211,6.403,2212,6.403]],["t/509",[5,1.278,10,1.249,20,3.968,24,4.111,28,2.599,95,3.606,191,3.968,372,3.837,484,4.111,1243,6.268,2154,5.727,2174,7.133]],["t/511",[1,1.866,5,1.141,14,2.469,28,2.78,29,3.248,67,1.92,88,1.849,90,4.44,471,4.768,528,4.038,675,2.233,852,4.973,889,4.973,919,6.126,920,6.389,924,5.526,925,4.768,936,3.362,1581,6.126,2046,5.526,2159,4.303,2160,7.63,2161,7.63,2162,4.973,2163,5.219]],["t/513",[88,2.338,780,4.251,936,4.99,1711,6.289,2159,5.443,2164,6.6,2165,6.6]],["t/515",[1,1.763,6,0.745,29,3.068,30,2.044,156,3.294,179,2.878,295,3.017,325,3.511,401,2.878,427,2.923,436,5.22,495,4.504,511,4.065,528,2.969,541,5.01,936,3.175,1180,3.358,1350,4.93,1806,5.61,1882,5.22,2159,4.065,2166,5.61,2167,8.705,2168,9.038,2169,5.61,2213,6.201,2214,6.201,2215,6.201,2216,5.61,2217,6.201]],["t/517",[5,1.147,16,3.17,28,2.182,88,2.635,114,2.074,135,1.172,179,3.073,298,4.686,315,4.477,369,2.378,374,4.216,528,4.06,644,4.632,821,4.809,910,3.906,911,5.989,927,2.783,928,5.015,936,4.342,1165,4.34,1168,5.263,1662,4.34,1735,5.015,2157,5.015,2218,6.62,2219,6.62]],["t/519",[5,0.96,15,2.908,16,3.399,20,3.572,55,3.346,63,3.572,194,3.635,204,3.246,265,4.291,315,4.802,348,5.378,391,4.654,401,3.295,504,4.802,731,2.801,1191,5.378,1662,4.654,1765,5.977,2121,5.977,2154,5.157,2157,6.714,2220,7.099,2221,6.422]],["t/521",[0,1.993,1,1.347,5,1.229,6,0.813,11,0.906,14,1.782,20,2.385,28,1.562,30,2.598,36,5.02,41,2.081,54,1.647,63,2.385,67,1.386,74,2.306,88,2.559,112,1.967,114,1.485,125,2.019,128,2.471,135,0.839,140,2.938,170,2.938,214,2.471,269,2.135,291,3.107,292,2.938,306,2.471,333,2.567,363,3.316,372,2.306,398,3.59,461,2.167,467,2.674,476,2.047,484,2.471,487,2.796,500,3.768,504,4.573,528,2.269,531,2.796,532,2.733,715,2.076,756,3.989,927,1.993,936,2.427,969,3.59,1335,3.99,1408,3.768,2175,3.99,2222,3.99,2223,7.13,2224,4.739,2225,4.739,2226,4.739,2227,4.739,2228,4.739,2229,4.739,2230,4.739,2231,4.287]],["t/523",[0,2.649,1,1.791,2,2.799,3,3.285,5,0.852,14,2.369,87,3.117,88,2.727,89,4.131,112,2.615,194,3.226,195,2.685,228,3.17,329,2.799,467,3.555,485,4.133,488,5.304,503,4.577,508,4.261,605,4.577,611,4.013,740,4.131,762,4.577,893,4.013,1161,5.304,1256,4.013,1581,4.577,1760,5.009,1923,5.009,2162,4.773,2170,4.261,2232,6.3,2233,5.304,2234,5.7]],["t/525",[6,0.5,41,2.277,79,1.931,87,3.043,88,1.172,99,4.318,163,1.529,167,1.773,307,4.032,342,5.544,427,1.961,485,3.095,616,3.152,686,6.161,695,3.022,701,2.579,711,2.094,981,3.308,1170,3.503,1180,2.253,1256,2.65,1760,3.308,1794,5.564,1985,5.564,2159,5.656,2223,6.62,2233,3.503,2234,3.764,2235,3.764,2236,4.16,2237,4.16,2238,6.151,2239,4.16,2240,4.16,2241,4.16,2242,4.16,2243,4.16,2244,7.805,2245,4.16,2246,4.16,2247,4.16,2248,7.318,2249,7.318,2250,7.318,2251,7.318,2252,4.16,2253,4.16,2254,4.16,2255,6.151,2256,4.16,2257,6.151,2258,6.151,2259,4.16,2260,4.16,2261,4.16,2262,4.16,2263,4.16,2264,4.16,2265,4.16,2266,6.151,2267,4.16,2268,4.16,2269,4.16,2270,4.16]],["t/527",[6,0.838,20,3.509,43,2.534,88,1.964,95,3.189,195,2.971,467,3.935,502,3.935,511,4.571,611,4.441,780,3.571,810,5.544,893,4.441,1256,4.441,1711,5.282,2008,6.308,2046,5.87,2159,5.745,2164,5.544,2165,5.544,2271,6.973,2272,6.973,2273,7.928,2274,6.973]],["t/529",[28,2.362,88,2.018,98,4.042,203,4.441,442,4.441,485,3.605,502,5.729,641,3.326,765,6.031,1180,5.499,2159,5.843,2170,4.845,2204,5.695,2275,7.164,2276,8.063]],["t/531",[0,2.628,5,1.105,28,3.302,30,2.693,35,2.594,41,2.157,43,2.271,88,2.821,163,2.297,214,3.259,228,3.145,269,2.817,374,3.981,484,3.259,485,3.145,519,2.56,522,2.436,528,3.912,529,3.32,749,5.262,936,3.201,1485,4.227,1517,3.201,2170,4.227,2198,4.34,2204,4.969]],["t/533",[0,3.012,5,0.969,6,0.861,10,1.135,28,2.362,30,2.938,34,5.204,54,2.49,74,3.486,88,2.51,269,3.228,291,4.697,292,4.441,373,5.259,461,3.276,484,3.736,611,4.563,1180,3.88,1256,4.563,2170,4.845]],["t/535",[0,3.769,1,2.056,2,3.212,3,3.77,5,0.978,28,2.955,30,2.384,88,2.525,92,5.059,151,5.252,485,3.638,528,4.292,529,3.841,936,3.703,1517,3.703,1923,5.748,2154,5.252,2158,5.748]],["t/537",[1,1.982,5,1.185,6,0.838,14,2.622,28,2.889,29,3.45,67,2.04,88,1.964,90,4.716,99,4.114,401,3.237,451,4.114,471,5.065,518,4.571,524,4.716,528,4.196,675,2.372,852,5.282,1581,6.366,1902,5.87,2162,5.282,2163,5.544]],["t/539",[88,2.135,195,3.23,198,4.188,228,3.814,504,5.126,511,4.969,528,4.419,536,6.991,756,4.472,893,4.828,910,4.472,2200,6.026,2277,7.579,2278,6.857,2279,7.579]],["t/541",[41,2.366,58,4.08,88,2.036,485,4.511,511,4.74,528,4.665,536,7.381,780,3.703,1180,3.916,1711,5.477,2159,4.74,2164,7.126,2165,5.748,2276,6.541,2280,7.23]],["t/543",[0,1.354,2,1.431,5,1.041,6,0.851,10,0.51,11,0.616,12,2.503,13,2.073,14,1.903,15,1.319,20,1.621,28,3,29,2.503,30,2.693,34,3.675,41,2.402,48,1.946,54,1.12,58,1.817,59,2.339,60,2.855,63,3.144,74,2.462,88,1.994,94,1.567,97,2.111,112,2.099,194,1.649,198,2.796,214,2.638,223,1.997,227,1.593,269,1.451,291,2.111,292,1.997,306,1.679,333,1.744,363,2.253,398,2.44,420,1.542,461,1.473,476,1.391,484,1.679,487,1.9,500,2.56,504,3.422,519,1.319,522,2.76,523,2.711,528,4.091,529,2.688,532,1.857,536,4.734,560,1.744,570,1.679,674,1.997,683,2.913,707,2.913,756,2.985,765,2.711,785,2.56,814,1.78,936,1.649,981,4.968,1160,2.44,1168,2.56,1534,4.577,1702,2.44,1864,2.913,2121,2.711,2175,2.711,2231,2.913,2273,2.913,2278,2.913,2281,5.059,2282,2.253,2283,3.22,2284,3.22,2285,5.059,2286,4.259,2287,2.913,2288,3.22,2289,2.913,2290,2.711,2291,3.22,2292,3.22,2293,3.22,2294,3.22,2295,3.22,2296,3.22,2297,3.22,2298,2.913,2299,3.22,2300,2.913]],["t/545",[8,1.976,10,1.274,20,3.072,67,1.786,77,1.249,95,2.791,135,1.081,150,3.373,191,3.072,204,2.791,224,1.992,230,2.296,295,2.97,300,4.129,447,3.792,450,3.243,476,2.637,484,3.183,487,3.602,509,3.072,519,2.501,681,3.306,696,3.428,706,5.139,800,3.52,818,4.002,855,4.434,875,4.271,1193,5.139,1305,4.853,1326,4.853,2289,5.522,2301,6.104,2302,6.104,2303,5.139,2304,6.104,2305,6.104,2306,6.104]],["t/547",[10,1.453,11,1.578,24,3.312,77,1.3,79,2.948,87,3.142,112,2.636,135,1.462,139,3.832,142,3.312,199,3.44,204,2.904,224,2.694,265,3.839,273,3.839,329,2.821,447,2.994,450,3.374,521,4.444,731,2.506,875,4.444,882,5.347,936,3.253,1160,4.812,1210,4.812,1220,5.049,1221,4.812,1225,4.444,1226,3.839,1294,3.938,1305,5.049]],["t/549",[6,0.881,8,1.306,9,1.979,10,1.502,11,0.656,17,1.643,20,1.727,74,1.67,96,4.81,135,0.608,144,2.074,150,1.896,156,1.823,186,3.969,190,1.79,199,2.88,204,1.569,209,2.493,218,6.17,230,1.291,269,1.547,271,2.321,331,3.066,372,2.587,391,2.25,404,1.859,420,1.643,444,2.25,447,3.068,450,1.823,460,2.186,466,1.979,485,2.675,487,3.137,502,1.937,539,4.81,560,2.88,603,4.93,667,2.186,681,3.525,696,1.462,739,2.728,764,2.728,800,3.066,804,3.105,818,3.486,819,2.401,820,2.889,821,2.493,851,2.321,868,2.728,901,1.727,916,2.6,926,3.862,930,4.227,940,5.174,1055,4.476,1130,4.81,1155,2.025,1220,4.227,1221,2.6,1292,4.476,1294,3.296,1317,2.25,1327,2.401,1530,2.889,1629,2.889,1871,3.105,1899,2.728,1915,2.889,2307,5.316,2308,5.316,2309,5.316,2310,5.316,2311,4.81,2312,5.316,2313,3.432,2314,3.432,2315,6.508,2316,3.432,2317,3.432,2318,3.432,2319,3.432,2320,3.105,2321,3.432,2322,3.432,2323,3.432,2324,3.432,2325,3.432,2326,3.432]],["t/552",[0,3.04,1,2.056,2,3.212,3,3.77,5,1.213,6,0.869,8,2.202,9,4.17,10,1.145,11,1.382,13,2.962,14,2.719,17,3.462,18,2.221,30,2.955,88,2.525,123,6.087,723,3.77]],["t/554",[1,1.634,5,1.045,6,0.929,7,4.559,8,2.145,18,2.373,30,1.894,41,2.465,49,3.888,54,1.998,55,2.709,56,3.66,57,3.391,58,3.242,59,4.174,60,3.242,61,4.838,62,3.391,63,2.892,64,5.199,65,5.199,88,2.176,522,3.011,552,2.709,560,3.112,723,2.996,1043,4.568,2198,4.105,2327,7.727,2328,6.99,2329,3.562,2330,7.727,2331,5.746,2332,5.746]],["t/556",[1,1.059,5,1.113,6,0.681,12,5.207,13,4.092,14,1.401,18,1.144,30,1.228,36,2.373,41,2.377,43,1.354,48,4.139,54,1.295,55,1.756,60,3.865,67,2.004,88,1.929,94,4.217,105,3.712,106,1.943,107,3.37,110,3.37,111,4.187,134,2.607,157,2.849,164,2.018,198,2.059,357,2.31,369,1.339,370,2.822,472,2.607,522,2.982,715,2.48,723,1.943,1000,2.607,1398,2.962,2057,2.442,2198,3.008,2286,4.767,2287,3.37,2329,2.31,2333,3.725,2334,3.725,2335,3.725,2336,3.725,2337,3.37,2338,3.725,2339,3.725,2340,3.725,2341,3.137,2342,3.137,2343,3.725,2344,3.725,2345,3.725,2346,3.725]],["t/558",[1,1.263,4,5.006,5,1.25,6,0.914,7,2.622,8,1.092,9,2.563,12,3.193,13,2.644,14,1.671,30,1.465,38,4.799,41,2.339,43,1.615,54,1.545,55,2.095,67,2.441,88,2.141,190,2.317,246,3.228,369,1.597,370,3.366,381,4.984,522,2.516,550,5.141,552,2.095,560,2.407,723,2.317,814,5.781,816,5.319,2057,2.913,2194,4.02,2198,3.429,2286,5.434,2329,2.755,2347,6.455,2348,4.443]],["t/560",[1,1.112,4,2.906,5,1.328,6,0.848,8,2.554,11,1.123,14,1.471,29,1.935,30,1.937,41,2.219,43,1.421,49,2.956,54,1.36,55,1.844,56,2.491,57,2.308,58,2.207,59,2.841,60,2.207,61,3.293,62,2.308,63,1.968,67,2.459,77,0.801,80,2.003,88,2.367,94,2.859,167,2.503,186,5.583,190,2.04,204,1.789,230,1.471,304,2.078,331,2.256,369,1.405,509,1.968,522,2.749,675,1.331,706,3.293,727,2.645,855,2.841,949,4.11,1495,2.963,2057,2.564,2198,3.748,2349,5.874,2350,3.911,2351,3.911,2352,3.911,2353,3.911,2354,3.911,2355,3.911]],["t/562",[6,1.277,53,2.307,171,2.394,194,4.037,231,3.881,427,2.79,433,3.414,502,3.34,529,3.145,768,5.356,961,3.206,1014,4.485,1226,5.947,1350,4.706,1356,5.494,2097,5.356,2098,5.356,2356,5.92,2357,5.92,2358,4.984,2359,7.882,2360,5.356,2361,4.984]],["t/564",[6,0.77,75,3.066,643,4.198,788,4.651,796,5.566,1132,5.091,1226,3.87,1327,6.443,1356,3.279,1381,3.613,1631,4.48,1888,4.331,2099,8.813,2100,8.331,2101,5.793,2102,6.987,2103,4.851,2104,5.793,2105,5.793,2106,5.793,2107,5.793,2108,5.793,2109,5.793,2110,5.793,2111,5.091,2112,5.793]],["t/566",[1,0.98,6,0.784,55,2.515,58,1.945,73,2.74,83,2.902,138,2.137,163,1.267,171,2.971,190,1.797,194,3.342,204,1.576,210,2.476,224,1.741,227,3.229,228,2.684,250,2.412,301,3.497,336,1.211,344,2.902,362,3.398,427,1.625,442,2.137,450,1.831,486,2.26,494,1.705,529,2.834,643,3.497,701,2.137,762,2.504,772,2.26,802,2.74,819,3.733,831,2.611,929,2.331,961,1.867,994,2.196,1048,2.611,1108,2.504,1112,3.118,1138,2.412,1141,2.74,1180,2.889,1189,2.74,1196,2.26,1261,2.611,1333,3.118,1356,4.759,1362,2.902,1373,2.083,1408,2.74,1544,4.241,1559,2.611,1642,2.74,1807,2.902,1848,2.504,1866,2.74,1902,2.902,1938,3.118,1943,4.491,2018,2.611,2045,2.902,2103,4.944,2117,2.611,2120,3.118,2145,3.118,2361,2.902,2362,5.494,2363,4.826,2364,5.335,2365,5.904,2366,3.118,2367,5.335,2368,3.447,2369,3.447,2370,3.447,2371,3.447,2372,3.447,2373,4.826,2374,3.447,2375,3.118,2376,3.118,2377,3.447,2378,4.241,2379,2.74,2380,3.447,2381,3.118,2382,6.185,2383,2.902,2384,3.447,2385,3.447,2386,3.447,2387,3.447,2388,5.335,2389,5.335,2390,3.447]],["t/568",[2,1.72,6,0.465,23,2.813,53,1.509,87,3.469,159,1.826,190,3.04,194,2.986,195,1.65,210,1.798,227,3.469,250,2.71,258,3.079,269,3.16,304,2.057,326,1.949,362,2.467,404,2.098,427,3.305,437,2.098,450,2.057,486,3.823,494,3.469,502,2.185,509,1.949,529,3.725,534,3.26,641,1.798,685,3.823,711,2.934,727,3.944,731,1.528,802,4.635,878,2.539,907,4.417,937,2.813,961,2.098,968,2.467,987,5.094,994,2.467,1231,3.079,1261,4.417,1356,4.286,1496,3.504,1521,5.094,1559,4.417,1560,2.619,1572,3.079,1636,3.26,1653,4.909,1654,3.504,1664,3.504,1866,3.079,1973,3.504,2018,4.417,2035,5.275,2320,5.275,2362,3.26,2363,3.504,2375,3.504,2382,4.909,2391,8.369,2392,3.873,2393,3.873,2394,3.873,2395,3.873,2396,5.83,2397,3.873,2398,3.873,2399,3.873,2400,3.873,2401,3.873,2402,3.873,2403,3.873,2404,3.873,2405,3.873]],["t/570",[6,0.751,106,3.259,112,2.594,171,3.304,188,2.594,210,2.901,228,3.145,230,2.351,254,3.875,335,3.688,369,2.246,427,2.946,643,4.098,756,3.688,796,3.778,815,4.373,910,3.688,1203,7.391,1226,3.778,1356,4.184,1378,4.227,1408,4.969,1521,4.54,1796,4.373,2135,5.654,2150,5.262,2151,5.262,2406,6.25,2407,8.17,2408,5.654,2409,6.25,2410,8.17,2411,6.25,2412,6.25]],["t/572",[1,1.381,6,0.96,141,2.532,171,2.783,190,3.587,194,3.523,210,4.421,329,2.157,408,4.51,427,2.289,628,4.089,696,2.069,701,4.265,802,3.861,922,6.883,923,6.672,961,2.63,974,3.528,1226,2.935,1296,3.679,1356,5.396,1370,4.393,1544,3.861,1572,3.861,1636,4.089,1848,3.528,1850,3.011,2117,3.679,2143,4.089,2358,4.089,2362,4.089,2413,4.856,2414,6.879,2415,4.856,2416,4.393]],["t/574",[6,0.902,18,1.69,27,2.819,138,3.412,171,2.226,210,3.484,223,3.412,224,1.796,277,3.506,336,2.638,344,4.634,362,3.506,523,4.634,619,3.851,897,4.17,906,3.174,910,3.248,929,3.723,1226,3.327,1356,4.697,1373,3.327,1542,4.634,1729,4.98,1822,3.506,1874,4.98,1891,4.376,2090,4.98,2103,4.17,2117,4.17,2147,7.726,2311,4.98,2378,4.376,2379,4.376,2416,4.98,2417,4.634,2418,5.504,2419,5.504,2420,5.504,2421,5.504,2422,5.504,2423,5.504,2424,6.79,2425,4.634,2426,5.504,2427,5.504,2428,5.504,2429,5.504]],["t/576",[6,1.065,171,2.871,336,2.495,362,4.522,427,4.178,450,3.771,1185,5.157,1221,5.378,1226,4.291,1356,4.948,1807,5.977,1858,6.422,2379,5.644,2383,5.977,2424,6.422,2425,5.977,2430,7.099,2431,7.099,2432,7.099,2433,7.099]],["t/578",[6,1.071,95,3.276,254,4.441,309,5.204,406,5.013,420,3.43,450,3.806,462,4.697,685,4.697,731,2.826,772,4.697,938,5.695,961,3.88,1194,5.013,1226,5.387,1337,5.695,1356,5.199,1560,4.845]],["t/580",[6,0.92,187,3.991,301,5.018,450,4.066,682,6.924,1181,5.177,1226,4.626,1356,3.919,2358,6.444,2378,7.38,2434,6.924,2435,6.924,2436,6.924,2437,6.924,2438,6.924]],["t/582",[6,0.696,15,1.175,27,2.362,35,1.19,98,1.618,128,2.405,141,1.495,151,2.083,162,1.131,171,1.16,177,1.078,187,1.495,190,1.495,191,1.443,210,2.141,223,1.777,224,0.935,267,2.006,305,5.024,309,3.351,331,1.654,333,1.553,336,1.621,351,4.204,362,1.826,369,1.03,397,2.279,404,1.553,405,1.777,427,2.174,433,1.654,447,1.352,455,2.86,537,2.172,541,1.584,621,2.172,636,2.083,640,2.279,676,2.414,717,1.826,731,1.82,756,1.692,769,2.279,796,2.788,849,2.279,888,2.594,923,1.88,1108,4.204,1140,2.594,1180,2.498,1185,3.351,1188,2.86,1212,4.173,1221,3.494,1226,2.788,1270,2.594,1277,2.414,1278,2.083,1280,2.279,1356,3.396,1404,2.083,1468,2.414,1472,2.594,1483,2.414,1503,2.279,1536,2.594,1560,3.12,1697,2.594,1753,2.279,1881,2.083,1888,1.939,1891,2.279,1893,2.172,2012,4.173,2094,2.594,2102,2.414,2111,2.279,2125,2.594,2128,2.594,2143,2.414,2360,2.594,2378,2.279,2379,5.778,2381,2.594,2382,2.414,2383,2.414,2408,4.173,2417,2.414,2425,2.414,2434,5.235,2435,7.926,2436,4.173,2437,8.727,2439,2.867,2440,2.867,2441,4.613,2442,2.867,2443,5.235,2444,2.867,2445,2.867,2446,2.867,2447,2.867,2448,2.867,2449,2.867,2450,2.414,2451,2.867,2452,2.867,2453,2.867,2454,2.594,2455,2.867,2456,2.867,2457,2.867,2458,2.594,2459,2.867,2460,2.867,2461,2.867,2462,2.867,2463,2.867,2464,2.867,2465,2.867,2466,2.867,2467,2.867,2468,2.867,2469,2.867,2470,2.867,2471,2.867]],["t/584",[6,1.167,31,2.847,68,2.92,187,2.456,195,2.007,254,2.92,309,3.422,336,1.655,386,3.966,400,3.569,433,2.717,462,4.413,518,3.088,634,2.717,698,3.745,721,3.966,756,2.779,779,3.966,796,2.847,910,2.779,1108,3.422,1181,3.186,1188,4.173,1226,5.867,1244,3.966,1257,3.422,1329,3.966,1356,5.174,1378,3.186,1483,3.966,1525,3.569,1821,5.352,1881,3.422,1904,4.261,1911,4.261,2049,3.966,2148,3.966,2149,4.261,2150,3.966,2151,3.966,2152,4.261,2303,3.966,2365,4.261,2373,4.261,2417,3.966,2438,4.261,2443,4.261,2450,3.966,2472,6.732,2473,4.71,2474,4.71,2475,4.71,2476,4.71,2477,4.71,2478,4.71,2479,4.71]],["t/586",[9,3.986,10,1.095,77,1.415,204,4.365,214,3.604,331,3.986,401,3.208,756,5.142,774,6.253,799,5.819,890,3.604,925,5.02,1231,5.495,1821,5.495,1964,6.33,2019,6.253,2118,6.253,2458,6.253,2480,6.911,2481,6.911,2482,6.911,2483,6.911,2484,6.911]],["t/588",[0,3.248,5,1.402,6,0.792,7,1.673,8,1.898,10,0.724,12,1.403,13,2.961,15,1.162,16,1.358,17,1.358,28,3.02,29,1.403,30,3.078,35,1.897,36,1.806,38,1.536,43,1.03,54,1.589,67,0.83,74,1.38,75,3.155,88,2.672,90,1.918,95,3.716,97,2.998,112,1.177,186,1.536,190,2.384,191,3.637,228,2.891,231,1.859,277,1.806,298,3.641,304,1.507,310,2.06,315,1.918,324,2.148,325,1.225,326,1.427,337,1.636,372,2.225,374,2.912,385,2.255,438,1.918,451,1.673,471,2.06,482,2.255,484,1.479,485,1.427,504,1.918,522,2.817,528,3.155,531,2.698,532,2.637,541,1.567,570,1.479,675,0.965,740,1.859,814,1.567,852,2.148,936,2.342,1047,2.255,1126,2.148,1168,2.255,1256,1.806,1257,3.321,1286,2.998,1485,1.918,1581,3.321,1796,1.984,1839,2.388,2050,2.388,2162,2.148,2163,2.255,2170,1.918,2195,2.255,2303,2.388,2485,2.836,2486,2.836]],["t/590",[0,3.418,1,2.311,2,3.611,3,4.239,5,1.1,6,0.977,30,2.68,74,3.956,88,2.29,461,3.718]],["t/592",[1,1.948,4,3.389,5,0.927,7,4.042,8,2.454,9,3.951,10,1.085,11,1.31,12,3.389,13,3.55,17,3.281,30,3.294,88,1.93,186,3.711,231,4.492,381,4.492,519,2.807,545,4.247,723,3.572,814,3.786,2487,6.851]],["t/594",[1,1.82,5,1.245,6,0.908,12,3.167,13,1.8,14,1.652,15,1.8,16,2.104,18,1.966,20,2.211,30,2.736,38,2.38,49,3.222,54,2.225,55,2.071,60,2.479,66,2.428,75,3.066,88,1.237,90,4.33,111,4.291,159,2.071,198,2.428,204,2.928,219,2.798,230,1.652,303,2.428,305,5.722,349,3.074,357,6.34,392,3.975,522,1.712,695,3.192,851,2.972,1286,4.197,2018,3.329,2187,3.699,2198,3.401,2488,5.792,2489,7.426,2490,4.394,2491,3.699,2492,4.394,2493,4.394,2494,4.394,2495,4.394,2496,4.394]],["t/596",[5,0.996,6,0.708,8,1.809,11,0.563,15,1.929,18,1.446,30,1.941,41,2.074,43,2.14,49,1.481,54,1.637,55,2.22,67,1.723,77,0.964,88,1.658,105,4.413,106,1.534,114,3.139,135,1.757,167,1.254,177,1.107,230,1.107,329,1.307,346,2.779,369,1.057,461,1.346,468,1.626,490,2.847,522,3.061,524,1.99,580,1.824,622,3.559,715,2.063,726,2.662,731,1.161,854,2.229,1000,3.295,1014,2.229,1135,2.339,1225,2.059,1321,2.137,1340,2.137,1597,2.551,1626,2.059,1706,4.681,1710,4.261,1735,3.568,1850,5.313,1901,3.421,2057,3.088,2198,3.576,2497,2.477,2498,8.201,2499,2.942,2500,2.942,2501,2.942,2502,2.942,2503,2.942,2504,2.942,2505,2.942,2506,2.942,2507,2.942,2508,2.477,2509,2.662,2510,2.942,2511,2.942,2512,2.942,2513,2.942,2514,2.662,2515,2.942,2516,2.942,2517,2.662,2518,2.942,2519,2.942,2520,2.662,2521,2.942,2522,2.942,2523,2.477,2524,2.477,2525,2.477,2526,2.477]],["t/598",[30,2.298,41,2.313,43,3.184,54,1.72,67,2.361,77,1.427,114,3.282,135,0.876,187,3.635,331,2.854,370,3.749,522,1.929,668,8.721,675,2.372,731,1.952,891,3.347,1175,5.281,1202,3.068,1376,2.92,1419,3.347,1597,4.371,1680,4.166,1698,5.542,1732,3.934,2057,3.244,2198,2.629,2527,6.307,2528,4.477,2529,6.307,2530,4.477,2531,4.477,2532,4.948,2533,4.948,2534,4.948,2535,4.948]],["t/600",[5,0.777,6,0.997,41,2.464,49,1.911,88,1.07,106,1.98,111,1.64,157,4.981,159,3.266,160,3.659,163,1.396,191,1.911,199,4.494,246,2.759,267,2.657,270,3.436,374,3.659,420,1.819,461,1.737,472,4.849,522,2.239,541,3.175,580,3.562,641,1.763,779,3.197,890,1.98,904,2.759,981,3.019,1170,5.834,1262,3.197,1306,5.197,1307,3.197,1308,3.197,1309,6.142,1317,2.49,1350,3.019,1793,3.436,1923,3.019,2178,3.019,2198,3.052,2233,4.837,2235,3.436,2337,7.897,2376,3.436,2536,3.798,2537,3.436,2538,3.798,2539,8.298,2540,5.745,2541,3.798,2542,6.929,2543,3.798,2544,5.745,2545,3.798,2546,5.745,2547,6.929,2548,3.798,2549,3.798,2550,3.798,2551,3.798,2552,3.798]],["t/602",[5,1.107,6,0.853,8,0.794,20,1.627,30,1.066,32,1.231,35,1.342,41,2.509,43,2.276,54,1.124,55,2.393,58,1.825,63,3.88,66,5.934,67,2.256,76,2.571,88,1.999,90,2.187,132,2.696,157,4.118,159,1.524,204,4.48,211,2.926,303,2.805,329,2.783,330,2.349,346,1.908,349,4.965,350,1.686,369,1.162,373,1.908,522,2.442,570,2.647,1000,2.263,1046,2.571,1165,2.12,1545,6.199,1682,2.723,2057,3.328,2198,3.328,2244,2.926,2553,5.668,2554,7.096,2555,3.234,2556,5.076,2557,3.234,2558,3.234,2559,3.234,2560,3.234,2561,3.234,2562,3.234,2563,3.234,2564,3.234,2565,5.076,2566,3.234,2567,3.234]],["t/604",[1,0.923,5,0.962,6,0.39,10,0.514,11,0.621,30,1.071,41,2.589,43,2.978,54,1.129,55,2.4,63,3.579,67,2.398,75,3.008,88,1.769,94,3.989,135,0.902,194,2.608,199,3.402,348,2.46,369,1.167,372,1.58,522,3.556,531,6.318,532,5.384,570,3.709,675,2.42,1000,4.395,1340,5.167,1450,2.46,1734,2.734,1822,2.068,2057,4.118,2198,3.337,2222,2.734,2497,6.901,2568,5.683,2569,6.282,2570,3.247,2571,3.247,2572,3.247,2573,3.247,2574,3.247,2575,3.247,2576,3.247,2577,3.247,2578,3.247,2579,3.247]],["t/606",[5,0.939,6,0.834,8,2.146,14,1.849,30,1.621,41,2.307,43,1.787,49,2.474,54,1.709,55,2.318,67,2.03,77,1.006,88,2.265,117,3.884,135,1.229,167,2.957,171,2.807,174,1.989,230,1.849,346,2.901,522,3.135,712,3.725,766,3.554,854,3.725,1000,3.441,1597,3.759,1901,5.041,1935,7.356,2198,4.273,2517,4.449,2523,4.14,2524,4.14,2525,4.14,2526,4.14,2580,4.917,2581,4.449,2582,4.917,2583,4.917,2584,4.917,2585,4.917,2586,4.917]],["t/608",[5,1.05,6,0.933,8,2.153,30,1.908,49,2.913,54,2.012,55,2.729,67,2.272,77,1.185,88,2.468,116,5.745,135,1.375,167,3.309,174,3.544,175,4.655,230,2.177,346,3.416,522,3.026,766,3.977,789,3.977,2198,4.655,2523,4.873,2524,4.873,2525,4.873,2526,4.873,2587,5.789,2588,5.237,2589,5.789,2590,5.789]],["t/610",[1,2.197,6,0.929,14,2.161,41,2.04,49,5.048,60,3.242,88,1.618,89,3.767,94,2.796,111,2.482,132,3.053,141,2.996,325,2.482,357,4.79,508,3.886,522,3.639,563,2.892,789,3.957,890,2.996,1903,4.568,2196,4.174,2198,3.053,2290,4.838,2489,4.838,2491,4.838,2591,5.746,2592,7.727,2593,5.746,2594,9.076,2595,5.746,2596,5.746]],["t/612",[5,1.111,30,2.708,43,2.985,228,4.134,318,4.965,325,3.549,326,4.134,522,3.202,1081,6.916]],["t/614",[6,0.831,30,2.279,43,2.511,52,3.819,111,2.985,135,1.224,157,3.478,198,3.819,325,2.985,326,3.478,350,3.604,541,4.816,553,4.917,569,4.675,821,5.02,890,3.604,901,3.478,1485,4.675,2195,5.495,2196,5.02,2282,4.836,2329,4.285,2597,6.911,2598,6.911,2599,6.911]],["t/616",[14,2.489,15,2.712,43,2.405,106,4.421,111,2.859,179,3.073,297,4.34,298,5.451,325,2.859,326,3.331,329,3.766,360,4.104,474,5.573,563,3.331,673,5.959,1097,5.573,1560,4.477,2366,5.989,2450,5.573,2600,6.62,2601,6.62,2602,6.62,2603,6.62,2604,6.62,2605,6.62]],["t/618",[5,1.005,6,0.795,8,2.083,11,1.037,13,1.444,18,2.283,27,1.805,28,1.162,35,1.463,43,1.281,49,2.731,54,1.225,62,3.202,63,3.74,67,1.588,75,3.169,77,1.111,80,2.779,82,3.13,88,0.993,103,1.872,111,1.522,114,2.073,116,2.311,117,1.341,157,1.774,198,1.948,199,1.909,230,1.325,325,1.522,326,1.774,402,2.185,461,1.612,559,3.797,563,1.774,570,3.451,580,4.103,606,2.883,622,2.13,634,2.033,645,4.807,666,2.67,670,2.384,671,2.967,675,2.252,735,2.466,856,3.189,906,3.816,1296,2.67,1307,2.967,1308,2.967,1309,2.802,1340,2.56,1373,3.28,1457,2.802,1540,3.189,1617,4.91,1892,2.967,1982,4.314,1986,5.571,2210,3.189,2282,2.466,2290,2.967,2298,5.987,2329,2.185,2454,3.189,2491,2.967,2508,2.967,2537,3.189,2594,4.91,2606,5.427,2607,3.524,2608,3.189,2609,5.427,2610,3.524,2611,3.524,2612,3.524,2613,5.427,2614,4.91,2615,5.427,2616,3.524,2617,3.524,2618,3.524,2619,3.524]],["t/620",[12,4.775,43,2.271,47,3.259,49,4.111,60,3.527,67,1.828,75,2.993,94,3.976,111,4.326,198,3.454,305,4.735,325,2.7,326,3.145,357,5.065,715,2.737,1286,4.098,1468,6.878,2282,4.373,2329,3.875,2341,5.262,2342,5.262,2488,5.654,2489,6.878,2620,8.17,2621,6.25,2622,6.25]],["t/622",[6,0.754,8,1.333,10,0.413,11,0.817,18,1.312,28,1.409,41,0.689,43,2.279,47,1.361,49,1.313,53,1.017,66,1.442,67,2.174,75,3.004,77,1.111,82,4.286,89,1.711,111,1.127,132,1.386,135,0.462,152,1.577,157,3.74,167,1.821,171,2.537,172,3.006,186,2.314,189,1.896,190,1.361,199,2.314,203,2.649,209,1.896,293,4.569,325,1.127,326,1.313,366,1.977,419,3.062,439,1.711,486,2.802,515,2.075,553,4.194,555,2.361,559,1.826,580,2.649,605,1.896,606,1.386,622,1.577,645,3.104,675,3.412,703,1.442,756,1.54,762,3.942,834,2.075,836,2.89,901,1.313,902,1.25,905,3.104,926,3.104,927,4.108,928,3.237,929,2.89,944,1.313,992,3.598,1042,2.197,1155,1.54,1236,1.472,1260,3.104,1309,3.397,1317,1.711,1402,2.075,1545,3.237,1730,2.361,1899,2.075,1928,3.866,1982,2.075,2078,2.361,2216,2.361,2221,3.866,2282,4.389,2300,2.361,2328,2.361,2329,3.889,2623,5.399,2624,4.273,2625,4.273,2626,2.609,2627,4.273,2628,4.273,2629,2.609,2630,2.609,2631,2.609,2632,4.273,2633,2.609,2634,2.361,2635,2.609,2636,2.609]],["t/624",[8,1.223,10,0.789,15,2.04,18,1.529,43,1.809,47,2.597,67,2.048,77,1.019,82,4.038,105,4.591,111,2.151,114,3.09,135,1.639,273,4.232,325,2.151,326,2.506,329,2.212,468,2.752,476,3.025,715,2.181,731,1.965,943,5.567,1340,3.617,1358,4.505,1700,3.773,1706,6.439,1735,6.657,1850,5.74,1982,3.959,2057,3.265,2498,8.376,2508,4.192,2509,4.505,2514,4.505,2520,4.505,2614,4.505,2637,4.505,2638,4.98,2639,4.98,2640,4.98,2641,7.002]],["t/626",[10,0.938,43,2.151,77,1.212,82,3.414,111,2.557,114,3.17,135,1.048,187,3.087,325,2.557,326,2.979,370,4.485,552,2.79,668,8.695,675,2.014,731,2.335,891,4.004,1175,5.971,1202,3.67,1376,3.493,1470,4.706,1597,3.206,1680,4.984,1698,4.706,1732,4.706,1901,4.3,2091,4.984,2527,7.131,2528,5.356,2529,7.131,2530,5.356,2531,5.356,2637,5.356]],["t/628",[8,2.208,41,1.385,43,1.906,49,2.64,67,1.535,77,1.84,82,3.026,111,2.266,117,3.989,135,0.929,171,2.937,172,2.122,182,4.285,325,2.266,326,2.64,346,4.285,358,3.671,407,3.974,450,2.787,606,3.858,731,2.865,766,2.687,905,3.811,1153,3.974,1238,2.736,1373,4.389,1470,4.171,1523,5.275,1597,2.842,1638,6.309,1732,4.171,1935,6.114,1986,6.114,2091,4.417,2581,4.746,2623,3.811,2642,5.246]],["t/630",[8,1.573,41,2.974,43,2.327,47,3.339,49,3.222,67,1.873,77,1.311,82,4.786,111,2.766,116,6.037,135,1.134,325,2.766,326,3.222,766,3.279,789,3.279,2588,5.793]],["t/632",[5,0.619,6,0.55,10,0.724,41,1.74,43,1.662,59,3.322,63,3.888,67,1.928,68,2.835,75,3.156,82,3.801,94,4.114,105,2.998,111,1.975,135,0.81,194,2.342,210,2.123,220,7.118,230,2.906,303,2.527,325,1.975,326,2.301,342,6.79,347,4.137,348,3.464,350,2.385,522,1.782,529,2.429,531,6.204,532,4.456,563,3.316,570,3.436,675,2.242,766,2.342,961,2.477,1340,4.787,1356,2.342,1450,3.464,1894,3.636,2222,3.85,2329,2.835,2497,5.548,2568,5.962,2623,4.787,2643,4.573,2644,4.573]],["t/634",[43,2.346,47,3.366,63,4.199,67,2.441,75,3.995,82,3.723,94,5.043,111,2.789,298,4.611,325,2.789,326,3.249,342,4.891,348,4.891,570,4.351,1662,7.007,2623,6.061,2645,6.456]],["t/636",[5,1.094,9,3.548,10,0.974,12,5.061,13,3.93,43,2.235,47,3.208,48,3.718,60,3.471,67,2.365,82,3.548,94,4.395,105,5.301,106,3.208,111,3.901,325,2.657,326,3.096,331,3.548,715,2.694,2282,4.305,2329,3.814,2341,5.179,2342,5.179,2646,6.152,2647,8.085]],["t/638",[4,3.22,5,1.295,6,0.54,9,2.592,11,0.859,13,3.436,18,1.38,38,4.144,43,1.633,57,3.84,60,5.023,63,3.275,67,1.315,75,2.152,82,3.753,111,1.941,164,2.434,310,3.265,325,1.941,326,2.262,331,2.592,336,2.287,502,3.672,550,4.402,552,2.119,556,3.784,560,2.434,570,2.344,650,3.145,710,5.479,719,3.04,805,4.066,814,5.52,816,5.353,833,5.479,931,3.573,1097,3.784,1169,3.784,1238,3.394,1373,3.934,1376,3.84,1381,2.536,1539,4.93,1734,3.784,2070,3.784,2282,3.145,2329,2.786,2608,5.888,2648,4.494]],["t/640",[5,0.911,8,2.574,10,1.066,43,2.447,49,3.388,67,2.508,77,1.754,82,3.883,111,2.908,162,2.656,186,5.552,325,2.908,326,3.388,766,4.39,876,7.217,949,4.711,2623,4.891]],["t/642",[43,2.218,63,4.048,66,5.961,67,2.353,82,4.639,111,2.637,157,4.048,204,4.667,325,2.637,326,3.072,329,3.573,349,4.271,570,3.183,1545,7.245,1682,5.139,2553,5.522,2623,5.843,2649,6.104,2650,6.104]],["t/644",[0,1.365,1,0.923,5,0.689,6,0.39,8,0.798,15,3.738,20,1.634,23,2.359,27,2.608,30,2.345,31,3.078,35,1.348,43,2.807,54,1.129,55,1.531,57,1.916,68,2.013,73,2.582,74,1.58,77,1.816,106,1.693,111,1.403,114,2.228,116,2.129,117,1.938,128,1.693,138,3.894,141,2.655,195,1.384,230,2.362,269,1.463,325,2.2,326,1.634,329,1.442,336,2.715,346,1.916,406,2.272,419,2.873,433,1.873,457,2.582,461,1.485,497,1.963,522,1.985,569,2.196,606,1.725,637,2.359,641,2.916,685,2.129,723,1.693,731,1.281,751,2.272,766,3.956,850,2.129,890,2.655,902,4.369,904,2.359,1014,2.46,1238,2.655,1296,2.46,1310,2.46,1381,1.832,1422,4.607,1424,2.582,1470,2.582,1638,2.46,1642,2.582,1901,2.359,2018,2.46,2070,2.734,2196,2.359,2329,2.013,2651,3.247,2652,6.282,2653,3.247,2654,3.247,2655,3.247,2656,3.247,2657,3.247,2658,3.247,2659,3.247,2660,3.247,2661,3.247,2662,3.247,2663,3.247,2664,3.247,2665,3.247,2666,3.247,2667,3.247,2668,3.247,2669,3.247,2670,3.247,2671,3.247,2672,3.247,2673,3.247,2674,3.247]],["t/646",[5,0.873,6,0.776,27,3.306,28,3.048,54,2.244,88,1.818,369,2.998,437,5.007,465,5.841,467,5.217,508,4.367,524,5.643,641,2.997,702,4.69,722,5.133,756,3.809,893,4.112,943,5.133,968,4.112,1419,4.367,2177,5.841,2675,6.456,2676,6.456,2677,7.548,2678,6.456,2679,5.841]],["t/648",[1,1.112,5,1.061,6,0.706,7,4.627,10,0.619,28,1.937,30,2.771,31,2.364,54,1.36,68,2.425,74,1.903,79,3.275,89,2.564,95,1.789,106,4.383,111,1.69,112,1.623,135,0.693,162,1.543,167,2.503,172,3.703,203,3.642,224,1.917,325,1.69,329,1.737,369,1.405,372,1.903,385,3.11,406,2.737,419,2.207,420,2.813,433,2.256,437,2.118,439,2.564,464,3.539,467,3.315,502,2.207,505,2.963,515,3.11,531,2.308,532,2.256,553,4.981,569,2.645,648,2.963,831,2.963,901,3.946,905,6.412,937,2.841,938,4.67,943,4.67,968,2.491,1023,3.293,1180,2.118,1337,3.11,2361,5.939,2634,5.314,2677,3.539,2679,3.539,2680,5.874,2681,3.911,2682,3.911,2683,3.911,2684,3.911,2685,3.911,2686,3.911,2687,3.911]]],"invertedIndex":[["",{"_index":41,"t":{"4":{"position":[[142,1],[160,1],[180,2],[244,1],[293,3]]},"6":{"position":[[154,1],[172,1],[192,2],[240,1],[304,3],[464,2],[524,1],[526,1],[702,2],[705,2],[757,1],[806,3],[867,2],[927,1],[929,1],[1105,2],[1119,1],[1146,2],[1188,1],[1245,2],[1259,1],[1293,1],[1320,2],[1323,3],[1327,2],[1345,1],[1369,2]]},"8":{"position":[[289,1],[307,1],[334,1],[353,1],[383,2],[421,1],[463,2],[515,1],[517,1],[554,2],[557,2],[606,1],[640,1],[707,2],[710,3],[823,1],[833,1],[863,2],[912,1],[946,1],[963,1],[1038,2],[1041,2],[1044,3]]},"10":{"position":[[93,1],[111,1],[138,1],[150,1],[185,1],[213,1],[243,2],[303,1],[305,1],[481,2],[484,2],[536,1],[538,1],[575,2],[578,2],[644,1],[678,1],[776,2],[779,3]]},"12":{"position":[[130,1],[148,1],[179,1],[228,3],[259,2]]},"18":{"position":[[169,1],[192,1],[227,2],[281,1],[422,1],[438,1],[483,2],[535,1],[581,2],[628,2],[669,3],[673,2],[745,1],[755,3],[889,1],[905,1],[950,2],[1002,1],[1047,2],[1145,2]]},"20":{"position":[[169,1],[204,1],[239,2],[308,1],[332,2],[417,1],[577,1],[593,1],[634,2],[683,1],[729,2],[776,2],[820,3],[824,2],[896,1],[906,3],[1058,1],[1074,1],[1115,2],[1164,1],[1207,2],[1305,2]]},"22":{"position":[[570,1],[605,1],[647,1],[689,1],[741,1],[779,1],[820,2],[880,2],[940,2],[1026,1],[1071,1],[1104,2],[1177,1],[1232,2],[1279,2],[1349,2],[1403,3],[1407,2],[1473,1],[1524,2],[1571,2],[1644,2],[1698,3],[1702,2],[1876,1],[1886,3],[1986,1],[1996,3],[2235,1],[2256,1],[2298,1],[2314,1],[2359,2],[2413,2],[2497,1],[2521,2],[2576,1],[2671,3],[2675,2],[2750,1],[2766,2],[2769,1],[2771,2],[2836,2],[2916,1],[2966,1],[3000,2],[3060,2],[3186,1],[3237,1],[3244,1],[3299,1],[3301,2]]},"24":{"position":[[460,1],[485,1],[513,2],[578,1],[621,1],[645,2],[707,1],[755,1],[781,2],[852,1],[908,1]]},"32":{"position":[[301,1]]},"36":{"position":[[266,1],[305,1],[307,3]]},"40":{"position":[[188,1],[270,1],[272,3]]},"46":{"position":[[154,2],[192,1],[214,1],[216,1],[287,3],[302,1],[304,2],[352,1],[354,2],[562,1],[570,2],[573,2],[576,1],[582,1],[584,2],[636,1],[652,1],[657,1],[659,2],[749,2],[804,1],[806,1],[808,2],[908,1],[915,1],[930,1],[932,1],[934,2],[937,2]]},"51":{"position":[[212,1]]},"53":{"position":[[710,2],[806,2],[846,1]]},"63":{"position":[[101,1],[119,1],[139,2],[183,1],[232,3],[256,2],[306,2],[653,2],[696,3],[761,2],[820,1],[885,1],[951,2],[954,3]]},"65":{"position":[[88,2],[135,1],[200,1],[238,2],[241,3]]},"67":{"position":[[101,2],[279,1],[291,1],[311,2]]},"69":{"position":[[93,1],[124,1],[144,2],[189,1],[223,2],[277,1],[308,3],[326,1],[471,1],[517,2],[559,2],[607,3],[734,2],[783,1],[785,1],[816,2],[819,2],[890,1],[973,3],[991,1]]},"71":{"position":[[118,2],[180,1]]},"73":{"position":[[137,2],[187,1],[275,3],[279,2],[343,1],[387,2],[459,1],[489,3]]},"75":{"position":[[172,2],[219,1],[235,2],[238,1],[240,2],[320,2],[393,1],[460,2],[463,2],[501,1],[523,1],[525,1],[596,3],[611,1],[613,2],[661,1],[663,2],[893,2],[942,1],[944,1],[975,2],[978,2],[1054,1]]},"79":{"position":[[131,1],[166,1],[227,2]]},"81":{"position":[[101,1],[119,1],[139,2],[173,1],[222,3]]},"83":{"position":[[93,1],[124,1],[144,2],[179,1],[209,2],[263,1],[303,3],[321,1],[361,3]]},"85":{"position":[[215,1],[230,1],[302,2],[305,1],[320,1],[347,3],[385,1],[387,2],[426,1],[444,3],[479,1],[481,2],[545,2],[598,1],[605,1],[607,2],[666,1],[668,3]]},"87":{"position":[[187,1],[444,1],[518,1],[536,1],[578,1]]},"89":{"position":[[97,2],[159,1]]},"91":{"position":[[151,2],[154,1],[174,1],[190,2],[264,1],[293,1],[295,1],[337,2],[340,3],[376,2]]},"93":{"position":[[75,2],[125,1],[213,3],[217,2],[281,1],[500,2],[568,1],[681,2],[684,1],[700,3],[728,1],[792,2],[821,1],[823,2],[883,2],[886,1],[902,3],[920,1],[922,2],[944,3],[965,1],[967,2],[1035,2],[1038,1],[1054,3],[1072,1],[1074,2],[1126,4],[1148,1],[1150,2]]},"103":{"position":[[482,1],[484,3],[488,1],[516,1],[518,3],[522,1],[524,2],[630,1],[665,1],[700,1],[705,1]]},"105":{"position":[[773,1],[849,1],[854,1]]},"152":{"position":[[101,1],[119,1],[139,2],[183,1],[232,3]]},"154":{"position":[[92,1],[104,1],[124,2],[430,1],[487,1],[536,2],[578,1],[580,3]]},"156":{"position":[[99,1],[115,1],[135,2],[180,1],[214,2],[256,1]]},"160":{"position":[[458,2],[505,1],[521,2],[524,1],[526,2],[602,2],[605,2]]},"162":{"position":[[358,2],[401,1],[441,2],[514,1],[516,2],[563,1],[615,2],[618,1],[630,1],[641,2],[709,2],[712,2],[715,1]]},"165":{"position":[[158,1],[174,1],[194,2],[247,1],[249,1],[290,2],[293,2],[346,1],[348,1],[388,2],[391,2],[518,1]]},"167":{"position":[[187,1],[194,1],[214,2],[261,1],[263,3],[282,1],[298,2],[301,1],[331,2],[373,2],[428,2],[431,2],[470,2],[601,2],[640,1],[686,1],[726,2],[764,2],[890,1],[908,3]]},"169":{"position":[[150,2],[186,1],[216,1],[272,2],[322,1],[324,1],[338,1],[360,2],[363,2],[366,2],[493,1]]},"175":{"position":[[244,1],[264,1],[286,2],[335,1],[337,1],[362,2],[426,2],[532,2],[577,1],[688,1],[698,1],[735,1],[737,2],[776,1],[801,1],[803,1],[816,2],[852,2],[915,2],[980,1]]},"177":{"position":[[151,1],[173,1],[196,1],[206,1],[235,1],[266,1],[355,1],[395,1],[441,1],[457,2],[540,1],[546,2],[549,1],[584,2],[587,2],[626,1],[651,1],[653,1],[666,2],[725,1],[775,1],[806,3],[824,1],[855,2],[917,1],[1052,2],[1107,1],[1115,2],[1118,2],[1121,2],[1131,1],[1133,2],[1253,2],[1256,1],[1419,3],[1583,2],[1668,3],[1672,1],[1674,1],[1961,1],[1979,1],[1997,1],[2077,1],[2090,1],[2139,1],[2155,1],[2233,1],[2248,1],[2328,1],[2345,1],[2416,1],[2431,1],[2480,1]]},"179":{"position":[[215,1],[230,1],[267,1],[269,2],[317,1],[324,1],[326,1],[357,3],[361,2],[416,1],[424,2],[427,2],[430,1],[442,2],[465,3],[480,2],[527,1],[560,1],[626,3],[630,2],[693,1],[743,1],[764,1],[766,1],[800,3],[804,2],[842,3],[849,1],[903,1],[910,1],[933,1],[935,2],[938,1]]},"181":{"position":[[201,1],[221,1],[258,1],[260,2],[311,1],[338,1],[340,1],[376,3],[380,2],[424,2],[427,1],[474,2],[477,1],[560,4],[565,2],[587,1]]},"183":{"position":[[230,1],[268,1],[305,1],[307,2],[352,1],[378,1],[380,1],[415,3],[419,2],[470,1],[497,1],[499,1],[535,3],[539,2],[589,2],[592,1],[612,1],[694,2],[697,1],[780,4],[785,2],[822,1],[994,1],[1051,1],[1100,2],[1142,1],[1144,3]]},"310":{"position":[[239,1]]},"326":{"position":[[2633,1],[2694,1],[2713,1],[2725,1],[2735,1],[2748,1],[2760,1]]},"332":{"position":[[1046,1],[1053,1]]},"334":{"position":[[200,1]]},"344":{"position":[[1080,1],[1086,1]]},"359":{"position":[[769,1],[1772,1]]},"442":{"position":[[588,1]]},"477":{"position":[[0,1],[92,1],[135,1],[166,1]]},"489":{"position":[[357,1],[472,1]]},"493":{"position":[[400,1]]},"495":{"position":[[396,1]]},"503":{"position":[[105,1],[124,1],[138,1],[187,1],[407,1],[503,1]]},"521":{"position":[[74,1],[151,1],[476,1]]},"525":{"position":[[301,1],[448,1],[453,1],[596,1],[650,1]]},"531":{"position":[[66,1],[117,1]]},"541":{"position":[[45,1],[142,1]]},"543":{"position":[[376,1],[399,1],[514,1],[540,1],[571,1],[696,1],[708,2],[891,1],[1069,1]]},"554":{"position":[[192,1],[226,1],[417,1],[513,1]]},"556":{"position":[[540,1],[563,1],[622,1],[949,1],[972,1],[1087,1],[1125,1]]},"558":{"position":[[295,1],[321,1],[378,1],[561,1],[587,1]]},"560":{"position":[[288,1],[311,1],[696,1],[715,1],[733,1]]},"596":{"position":[[1005,1],[1020,1],[1082,1],[1294,1],[1309,1],[1355,1]]},"598":{"position":[[488,1],[508,1],[536,1],[562,1]]},"600":{"position":[[392,1],[618,1],[702,1],[779,1],[792,1],[819,1],[833,1],[850,1]]},"602":{"position":[[579,1],[606,1],[652,1],[686,1],[744,1],[933,1],[960,1],[1142,1],[1176,1],[1218,1],[1263,1]]},"604":{"position":[[749,1],[763,1],[812,1],[855,1],[910,1],[938,1],[1068,1],[1082,1],[1101,1],[1250,1],[1264,1],[1284,1],[1306,1]]},"606":{"position":[[304,1],[343,1],[535,1],[672,1]]},"610":{"position":[[235,1],[263,1]]},"622":{"position":[[1067,1]]},"628":{"position":[[178,1]]},"630":{"position":[[0,1],[7,1],[23,1],[37,1],[39,1],[57,1],[73,1],[133,1],[141,1],[143,1],[155,1],[163,1],[197,1],[205,1],[207,1],[223,1],[225,1],[285,1]]},"632":{"position":[[587,5],[684,1]]}}}],["0",{"_index":559,"t":{"65":{"position":[[224,3]]},"177":{"position":[[1971,1]]},"179":{"position":[[469,2],[846,2]]},"412":{"position":[[95,1]]},"444":{"position":[[674,1]]},"618":{"position":[[42,1],[410,1]]},"622":{"position":[[1065,1]]}}}],["0,1,2,3,4,5,6,7",{"_index":554,"t":{"63":{"position":[[678,17]]}}}],["0.0.0.0",{"_index":61,"t":{"6":{"position":[[399,8]]},"554":{"position":[[357,8]]},"560":{"position":[[531,9]]}}}],["0.007",{"_index":1990,"t":{"410":{"position":[[798,5]]}}}],["0.012",{"_index":1596,"t":{"334":{"position":[[1019,5]]},"438":{"position":[[97,5]]},"442":{"position":[[102,5]]}}}],["0.012*5",{"_index":2074,"t":{"442":{"position":[[580,7]]}}}],["0.0125",{"_index":1989,"t":{"410":{"position":[[791,6],[837,6]]}}}],["0.05",{"_index":1987,"t":{"410":{"position":[[764,4]]}}}],["0.06",{"_index":2064,"t":{"438":{"position":[[184,4]]},"442":{"position":[[590,4]]}}}],["0.1",{"_index":932,"t":{"142":{"position":[[274,3]]}}}],["0.15",{"_index":1598,"t":{"334":{"position":[[1060,4]]},"336":{"position":[[1418,4]]},"438":{"position":[[34,4]]},"440":{"position":[[178,4]]}}}],["0.25",{"_index":1992,"t":{"410":{"position":[[844,4]]}}}],["0.4",{"_index":1971,"t":{"403":{"position":[[340,4]]},"405":{"position":[[233,4]]}}}],["0.5gb",{"_index":2163,"t":{"475":{"position":[[246,5]]},"511":{"position":[[282,5]]},"537":{"position":[[240,5]]},"588":{"position":[[440,5]]}}}],["0.75",{"_index":1694,"t":{"344":{"position":[[1263,4]]}}}],["000",{"_index":1101,"t":{"177":{"position":[[2191,5]]}}}],["007bff",{"_index":1109,"t":{"177":{"position":[[2451,8]]}}}],["01.ac",{"_index":2523,"t":{"596":{"position":[[1770,5]]},"606":{"position":[[561,5]]},"608":{"position":[[489,5]]}}}],["01.he",{"_index":1767,"t":{"359":{"position":[[951,5],[2023,5]]},"361":{"position":[[1081,5]]}}}],["06",{"_index":2180,"t":{"489":{"position":[[93,2]]},"493":{"position":[[102,2]]},"495":{"position":[[105,2]]}}}],["1",{"_index":552,"t":{"63":{"position":[[667,2],[898,2]]},"65":{"position":[[213,2],[228,2]]},"69":{"position":[[809,3]]},"71":{"position":[[251,2]]},"75":{"position":[[968,3]]},"89":{"position":[[230,2]]},"97":{"position":[[266,2]]},"103":{"position":[[667,2]]},"167":{"position":[[669,3]]},"177":{"position":[[988,2],[2103,2],[2358,2]]},"225":{"position":[[197,2]]},"324":{"position":[[33,3],[476,3]]},"332":{"position":[[470,2],[1306,1]]},"336":{"position":[[859,1],[1366,1],[1951,1]]},"342":{"position":[[270,1]]},"355":{"position":[[36,1]]},"357":{"position":[[230,2]]},"359":{"position":[[999,1],[1013,1],[1031,1],[1060,1],[1352,1],[1381,1],[1527,1],[1556,1],[2071,1],[2084,1],[2102,1],[2229,1],[2294,1],[2439,1],[2632,1],[2715,1],[2908,1]]},"408":{"position":[[224,1],[244,1]]},"433":{"position":[[462,2]]},"446":{"position":[[576,1]]},"554":{"position":[[223,2]]},"558":{"position":[[375,2]]},"626":{"position":[[192,1]]},"638":{"position":[[585,1]]}}}],["1%2fproto&pagesize=50&ascending=tru",{"_index":2228,"t":{"521":{"position":[[438,37]]}}}],["1.0.0.1",{"_index":2342,"t":{"556":{"position":[[789,8]]},"620":{"position":[[134,10]]},"636":{"position":[[199,10]]}}}],["1.1.1.1",{"_index":2341,"t":{"556":{"position":[[777,7]]},"620":{"position":[[122,11]]},"636":{"position":[[187,11]]}}}],["1.4",{"_index":1722,"t":{"355":{"position":[[289,3]]}}}],["1.6",{"_index":1988,"t":{"410":{"position":[[769,3]]}}}],["1.8",{"_index":1978,"t":{"408":{"position":[[254,4]]}}}],["1.9",{"_index":1979,"t":{"408":{"position":[[259,4]]}}}],["10",{"_index":1381,"t":{"320":{"position":[[286,2]]},"326":{"position":[[2569,2],[2783,2]]},"334":{"position":[[801,2]]},"355":{"position":[[1220,3]]},"357":{"position":[[424,2]]},"359":{"position":[[1332,2],[2419,2],[2566,2]]},"361":{"position":[[1469,2],[1576,2],[1847,2]]},"403":{"position":[[137,3]]},"405":{"position":[[30,3]]},"410":{"position":[[552,2]]},"436":{"position":[[409,2]]},"452":{"position":[[305,2]]},"564":{"position":[[246,2]]},"638":{"position":[[398,2]]},"644":{"position":[[1349,2]]}}}],["10,000",{"_index":743,"t":{"105":{"position":[[747,6],[775,7],[842,6]]}}}],["10.000",{"_index":2055,"t":{"436":{"position":[[481,6]]}}}],["10.1",{"_index":1975,"t":{"408":{"position":[[232,5]]}}}],["10.3",{"_index":1976,"t":{"408":{"position":[[238,5]]}}}],["100",{"_index":1822,"t":{"361":{"position":[[1817,3]]},"403":{"position":[[325,4],[525,3]]},"405":{"position":[[218,4],[418,3]]},"410":{"position":[[571,3]]},"412":{"position":[[55,3]]},"436":{"position":[[324,3]]},"444":{"position":[[362,3]]},"448":{"position":[[21,3]]},"574":{"position":[[528,3]]},"604":{"position":[[1227,4]]}}}],["1000",{"_index":1523,"t":{"328":{"position":[[32,4]]},"332":{"position":[[1079,4]]},"336":{"position":[[1725,4]]},"408":{"position":[[49,4]]},"410":{"position":[[338,4],[751,5]]},"628":{"position":[[316,4],[413,4]]}}}],["10000",{"_index":1628,"t":{"336":{"position":[[1758,5]]}}}],["100k/day",{"_index":2095,"t":{"446":{"position":[[676,9]]}}}],["100kb",{"_index":1600,"t":{"336":{"position":[[188,6],[1609,5]]}}}],["100mbit",{"_index":1614,"t":{"336":{"position":[[833,8]]}}}],["100mpb",{"_index":1613,"t":{"336":{"position":[[819,7]]}}}],["100vh",{"_index":1087,"t":{"177":{"position":[[2046,6]]}}}],["107",{"_index":1434,"t":{"324":{"position":[[559,3]]}}}],["108",{"_index":1460,"t":{"324":{"position":[[671,3]]}}}],["10k",{"_index":2063,"t":{"438":{"position":[[130,3]]},"442":{"position":[[455,3]]},"446":{"position":[[340,3],[400,3]]}}}],["10kb",{"_index":1527,"t":{"328":{"position":[[330,4]]},"336":{"position":[[182,5],[1071,4],[1258,4]]},"359":{"position":[[1089,4],[1410,4],[1585,4],[2323,4],[2661,4],[2937,4]]},"412":{"position":[[367,4]]},"440":{"position":[[139,5]]}}}],["10mbp",{"_index":1512,"t":{"326":{"position":[[2622,6]]}}}],["10msg/sec",{"_index":1771,"t":{"359":{"position":[[1078,10],[1399,10],[1574,10],[2312,10],[2650,10],[2926,10]]}}}],["10px",{"_index":1096,"t":{"177":{"position":[[2133,5],[2206,5],[2227,5],[2274,5],[2390,5],[2410,5]]}}}],["11",{"_index":1515,"t":{"326":{"position":[[2722,2]]},"361":{"position":[[410,2]]}}}],["1100",{"_index":1788,"t":{"359":{"position":[[3774,4]]}}}],["119",{"_index":1449,"t":{"324":{"position":[[621,3]]}}}],["11m",{"_index":1777,"t":{"359":{"position":[[2390,5]]}}}],["12",{"_index":1426,"t":{"324":{"position":[[369,2],[691,2]]},"326":{"position":[[2745,2]]},"336":{"position":[[2049,3]]}}}],["123.123.123.123",{"_index":395,"t":{"40":{"position":[[223,18]]}}}],["1234",{"_index":393,"t":{"40":{"position":[[211,4]]}}}],["127.0.0.1",{"_index":348,"t":{"34":{"position":[[529,10]]},"519":{"position":[[153,9]]},"604":{"position":[[315,10]]},"632":{"position":[[96,9]]},"634":{"position":[[113,9]]}}}],["127.0.0.1:8080",{"_index":2644,"t":{"632":{"position":[[642,15]]}}}],["13",{"_index":1443,"t":{"324":{"position":[[599,2]]}}}],["130",{"_index":2668,"t":{"644":{"position":[[1256,3]]}}}],["137",{"_index":1435,"t":{"324":{"position":[[563,3]]}}}],["13:18:07.575+00:00",{"_index":1798,"t":{"361":{"position":[[416,18]]}}}],["14",{"_index":2356,"t":{"562":{"position":[[14,2]]}}}],["14400",{"_index":2586,"t":{"606":{"position":[[760,5]]}}}],["1459",{"_index":784,"t":{"113":{"position":[[33,5]]}}}],["15",{"_index":639,"t":{"87":{"position":[[205,3]]},"324":{"position":[[648,2],[856,2]]},"489":{"position":[[96,2]]},"493":{"position":[[105,2]]},"495":{"position":[[108,2]]}}}],["1500m",{"_index":2669,"t":{"644":{"position":[[1277,6]]}}}],["150kb",{"_index":1687,"t":{"344":{"position":[[699,6]]},"440":{"position":[[151,6]]}}}],["15mbp",{"_index":1506,"t":{"326":{"position":[[2152,7]]}}}],["16",{"_index":745,"t":{"105":{"position":[[851,2]]}}}],["160000",{"_index":1675,"t":{"344":{"position":[[364,6]]}}}],["160000/600",{"_index":1693,"t":{"344":{"position":[[1031,12]]}}}],["16:09:54.448+01:00",{"_index":2181,"t":{"489":{"position":[[99,18]]},"493":{"position":[[108,18]]},"495":{"position":[[111,18]]}}}],["17",{"_index":1465,"t":{"324":{"position":[[702,2]]},"326":{"position":[[2364,3],[2457,3]]}}}],["1727795042",{"_index":1519,"t":{"326":{"position":[[2890,10]]}}}],["18",{"_index":1514,"t":{"326":{"position":[[2710,2],[2732,2]]}}}],["1:1",{"_index":571,"t":{"69":{"position":[[1215,3]]},"83":{"position":[[639,3]]}}}],["1kb",{"_index":1968,"t":{"403":{"position":[[175,3]]},"405":{"position":[[68,3]]},"408":{"position":[[78,3]]},"410":{"position":[[240,3]]},"412":{"position":[[353,3]]},"440":{"position":[[134,4]]}}}],["1lqrcbccb4np93f9",{"_index":2191,"t":{"493":{"position":[[245,16],[478,16]]}}}],["1msg/",{"_index":1969,"t":{"403":{"position":[[222,7]]},"405":{"position":[[115,7]]},"410":{"position":[[268,6]]},"412":{"position":[[100,7]]}}}],["1msg/10",{"_index":2084,"t":{"444":{"position":[[530,7]]}}}],["1px",{"_index":1089,"t":{"177":{"position":[[2061,3]]}}}],["2",{"_index":560,"t":{"65":{"position":[[231,2]]},"69":{"position":[[813,2]]},"71":{"position":[[299,2]]},"75":{"position":[[972,2]]},"89":{"position":[[278,2]]},"103":{"position":[[702,2]]},"148":{"position":[[400,1]]},"177":{"position":[[1037,2]]},"324":{"position":[[279,3],[714,3]]},"334":{"position":[[614,1]]},"359":{"position":[[1318,1],[1744,2],[2405,1]]},"361":{"position":[[1894,2]]},"543":{"position":[[717,4]]},"549":{"position":[[830,1],[914,1]]},"554":{"position":[[257,2]]},"558":{"position":[[432,2]]},"638":{"position":[[490,1]]}}}],["20",{"_index":1680,"t":{"344":{"position":[[414,2]]},"598":{"position":[[432,4]]},"626":{"position":[[246,2]]}}}],["2000",{"_index":1970,"t":{"403":{"position":[[264,4],[369,4]]},"405":{"position":[[157,4],[262,4]]}}}],["2023",{"_index":1428,"t":{"324":{"position":[[376,6]]},"359":{"position":[[3832,6]]},"361":{"position":[[405,4]]},"376":{"position":[[127,5]]},"489":{"position":[[88,4]]},"493":{"position":[[97,4]]},"495":{"position":[[100,4]]}}}],["2024",{"_index":2098,"t":{"450":{"position":[[25,4]]},"562":{"position":[[26,4]]}}}],["21",{"_index":1440,"t":{"324":{"position":[[590,2]]}}}],["210",{"_index":1981,"t":{"410":{"position":[[382,3],[779,4]]}}}],["21600",{"_index":2517,"t":{"596":{"position":[[1251,5]]},"606":{"position":[[492,5]]}}}],["22",{"_index":1466,"t":{"324":{"position":[[705,2]]}}}],["23",{"_index":1453,"t":{"324":{"position":[[639,2]]}}}],["232",{"_index":1738,"t":{"355":{"position":[[1134,3]]}}}],["25",{"_index":1774,"t":{"359":{"position":[[1507,2],[2695,2],[2842,2]]}}}],["250m",{"_index":1784,"t":{"359":{"position":[[3542,5]]}}}],["256",{"_index":1579,"t":{"334":{"position":[[362,3]]}}}],["25mbp",{"_index":1656,"t":{"340":{"position":[[1502,7]]}}}],["26",{"_index":1464,"t":{"324":{"position":[[694,2]]},"326":{"position":[[2298,3]]}}}],["263",{"_index":1624,"t":{"336":{"position":[[1314,3]]}}}],["266",{"_index":1681,"t":{"344":{"position":[[518,3],[1005,3],[1075,4]]}}}],["27",{"_index":1461,"t":{"324":{"position":[[675,2]]},"361":{"position":[[413,2]]}}}],["286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8",{"_index":2542,"t":{"600":{"position":[[394,64],[852,64],[940,64]]}}}],["2gb",{"_index":2162,"t":{"475":{"position":[[181,3]]},"511":{"position":[[210,3]]},"523":{"position":[[257,3]]},"537":{"position":[[168,3]]},"588":{"position":[[368,3]]}}}],["2mbyte",{"_index":2088,"t":{"446":{"position":[[358,7]]}}}],["3",{"_index":115,"t":{"8":{"position":[[526,2],[540,2],[551,2]]},"10":{"position":[[547,2],[561,2],[572,2]]},"65":{"position":[[234,3]]},"69":{"position":[[798,2]]},"71":{"position":[[348,2]]},"75":{"position":[[957,2]]},"89":{"position":[[327,2]]},"324":{"position":[[389,3],[781,3],[827,1]]},"326":{"position":[[2114,4]]},"359":{"position":[[1493,1],[2681,1]]}}}],["3.85",{"_index":1557,"t":{"332":{"position":[[1048,4]]}}}],["30",{"_index":1450,"t":{"324":{"position":[[625,2]]},"347":{"position":[[95,2]]},"355":{"position":[[755,2]]},"604":{"position":[[565,3]]},"632":{"position":[[228,2]]}}}],["300",{"_index":1732,"t":{"355":{"position":[[775,3]]},"598":{"position":[[241,5]]},"626":{"position":[[108,3]]},"628":{"position":[[174,3]]}}}],["3000",{"_index":2082,"t":{"444":{"position":[[482,4]]}}}],["32",{"_index":2337,"t":{"556":{"position":[[331,2]]},"600":{"position":[[351,2],[389,2],[530,2],[712,2],[802,3],[816,2]]}}}],["33",{"_index":1444,"t":{"324":{"position":[[602,2],[697,2]]},"344":{"position":[[1238,2]]}}}],["3600",{"_index":2528,"t":{"598":{"position":[[310,6]]},"626":{"position":[[187,4]]}}}],["37",{"_index":1456,"t":{"324":{"position":[[651,2]]}}}],["38",{"_index":1436,"t":{"324":{"position":[[567,2],[772,2]]},"326":{"position":[[2757,2]]}}}],["38.8",{"_index":1737,"t":{"355":{"position":[[1088,7]]}}}],["384",{"_index":2059,"t":{"436":{"position":[[655,3]]}}}],["4",{"_index":712,"t":{"101":{"position":[[434,1]]},"332":{"position":[[1055,2],[1146,1],[1874,1]]},"336":{"position":[[2044,1]]},"446":{"position":[[418,2]]},"606":{"position":[[774,2]]}}}],["4.0",{"_index":2407,"t":{"570":{"position":[[83,3],[116,5]]}}}],["40",{"_index":2618,"t":{"618":{"position":[[971,3]]}}}],["44",{"_index":1445,"t":{"324":{"position":[[605,2],[665,2]]}}}],["479c95bbf74222417abf76c7f9c480a6790e454374dc4f59bbb15ca183ce1abd",{"_index":1811,"t":{"361":{"position":[[741,65]]}}}],["48",{"_index":2510,"t":{"596":{"position":[[694,3]]}}}],["49",{"_index":1447,"t":{"324":{"position":[[615,2]]}}}],["4k",{"_index":1505,"t":{"326":{"position":[[2127,2],[2613,3]]}}}],["4k/uhd",{"_index":1471,"t":{"324":{"position":[[849,6]]}}}],["4kb",{"_index":1688,"t":{"344":{"position":[[785,4],[1082,3],[1098,3]]}}}],["4px",{"_index":1107,"t":{"177":{"position":[[2376,4],[2475,4]]}}}],["5",{"_index":1470,"t":{"324":{"position":[[842,1]]},"626":{"position":[[112,1]]},"628":{"position":[[180,1]]},"644":{"position":[[1474,1]]}}}],["50",{"_index":1457,"t":{"324":{"position":[[654,2],[678,2]]},"340":{"position":[[1217,2],[1420,2]]},"361":{"position":[[1440,2],[1547,2]]},"618":{"position":[[724,2]]}}}],["500",{"_index":1983,"t":{"410":{"position":[[524,3]]}}}],["5000",{"_index":2092,"t":{"446":{"position":[[504,4]]}}}],["500kb",{"_index":1531,"t":{"328":{"position":[[574,6]]},"336":{"position":[[195,6],[1619,6]]}}}],["508",{"_index":1528,"t":{"328":{"position":[[379,3]]},"336":{"position":[[1109,3]]}}}],["50kb",{"_index":2066,"t":{"440":{"position":[[145,5]]}}}],["510",{"_index":1991,"t":{"410":{"position":[[825,4]]}}}],["520",{"_index":2093,"t":{"446":{"position":[[548,3]]}}}],["53",{"_index":1454,"t":{"324":{"position":[[642,2]]}}}],["54",{"_index":1441,"t":{"324":{"position":[[593,2]]}}}],["56",{"_index":1451,"t":{"324":{"position":[[628,2]]}}}],["58",{"_index":1433,"t":{"324":{"position":[[556,2]]}}}],["6",{"_index":854,"t":{"121":{"position":[[403,1]]},"336":{"position":[[2029,1]]},"344":{"position":[[1057,1],[1088,3],[1134,1]]},"596":{"position":[[1265,2]]},"606":{"position":[[506,2]]}}}],["6.70",{"_index":1996,"t":{"412":{"position":[[348,4]]}}}],["60",{"_index":2454,"t":{"582":{"position":[[1068,4]]},"618":{"position":[[898,3]]}}}],["600",{"_index":1677,"t":{"344":{"position":[[390,3],[639,4],[670,3]]},"410":{"position":[[222,3]]}}}],["60000",{"_index":2210,"t":{"505":{"position":[[215,8]]},"618":{"position":[[373,5]]}}}],["60000:60000",{"_index":2283,"t":{"543":{"position":[[325,11]]}}}],["60002",{"_index":64,"t":{"6":{"position":[[424,5]]},"554":{"position":[[382,5]]}}}],["60003",{"_index":65,"t":{"6":{"position":[[434,5]]},"554":{"position":[[392,6]]}}}],["60:40",{"_index":2615,"t":{"618":{"position":[[792,7],[880,6]]}}}],["625",{"_index":746,"t":{"105":{"position":[[856,4]]}}}],["627",{"_index":1622,"t":{"336":{"position":[[1228,4]]}}}],["63",{"_index":1462,"t":{"324":{"position":[[681,2]]}}}],["6300",{"_index":2110,"t":{"452":{"position":[[308,4]]},"564":{"position":[[249,4]]}}}],["64",{"_index":1307,"t":{"257":{"position":[[26,3]]},"600":{"position":[[262,3]]},"618":{"position":[[239,2]]}}}],["64/waku2",{"_index":1684,"t":{"344":{"position":[[592,8]]}}}],["65000",{"_index":2206,"t":{"503":{"position":[[126,5]]}}}],["68",{"_index":1437,"t":{"324":{"position":[[570,2]]}}}],["7",{"_index":1011,"t":{"169":{"position":[[268,3]]},"324":{"position":[[700,1]]},"359":{"position":[[3829,2]]}}}],["7.4",{"_index":1972,"t":{"403":{"position":[[476,3]]},"405":{"position":[[369,3]]}}}],["7.40",{"_index":1998,"t":{"412":{"position":[[362,4]]}}}],["7.45",{"_index":2000,"t":{"412":{"position":[[377,4]]}}}],["7.88",{"_index":1995,"t":{"412":{"position":[[343,4]]}}}],["71",{"_index":1455,"t":{"324":{"position":[[645,2]]}}}],["72",{"_index":1442,"t":{"324":{"position":[[596,2],[631,2]]}}}],["7640",{"_index":1721,"t":{"355":{"position":[[250,5]]}}}],["8",{"_index":904,"t":{"138":{"position":[[339,1]]},"344":{"position":[[1228,1]]},"403":{"position":[[444,1]]},"405":{"position":[[337,1]]},"600":{"position":[[789,2]]},"644":{"position":[[1413,1]]}}}],["8.03",{"_index":1999,"t":{"412":{"position":[[372,4]]}}}],["8.04",{"_index":1997,"t":{"412":{"position":[[357,4]]}}}],["8.8.4.4",{"_index":2344,"t":{"556":{"position":[[922,8]]}}}],["8.8.8.8",{"_index":2343,"t":{"556":{"position":[[910,7]]}}}],["80/2",{"_index":2655,"t":{"644":{"position":[[289,5]]}}}],["8000",{"_index":1682,"t":{"344":{"position":[[525,4]]},"602":{"position":[[346,5]]},"642":{"position":[[99,4]]}}}],["8001",{"_index":2557,"t":{"602":{"position":[[909,5]]}}}],["8002",{"_index":2561,"t":{"602":{"position":[[1118,5]]}}}],["8008",{"_index":2645,"t":{"634":{"position":[[183,4]]}}}],["83",{"_index":1467,"t":{"324":{"position":[[769,2]]}}}],["84",{"_index":1459,"t":{"324":{"position":[[668,2]]}}}],["85",{"_index":1438,"t":{"324":{"position":[[573,2]]}}}],["8645",{"_index":2222,"t":{"521":{"position":[[44,4]]},"604":{"position":[[431,5]]},"632":{"position":[[158,4]]}}}],["8997",{"_index":1733,"t":{"355":{"position":[[809,4]]}}}],["9",{"_index":1513,"t":{"326":{"position":[[2692,1]]},"450":{"position":[[14,1]]}}}],["9000",{"_index":1734,"t":{"355":{"position":[[852,5]]},"604":{"position":[[1044,5]]},"638":{"position":[[117,4]]}}}],["9000:9000/udp",{"_index":2284,"t":{"543":{"position":[[340,13]]}}}],["93",{"_index":1448,"t":{"324":{"position":[[618,2]]}}}],["95",{"_index":1621,"t":{"336":{"position":[[1196,3]]}}}],["9990",{"_index":1593,"t":{"334":{"position":[[841,4]]}}}],["abil",{"_index":795,"t":{"113":{"position":[[544,7]]}}}],["abnorm",{"_index":1607,"t":{"336":{"position":[[437,8]]}}}],["abov",{"_index":937,"t":{"144":{"position":[[162,6]]},"177":{"position":[[1712,6]]},"326":{"position":[[9,5]]},"336":{"position":[[126,5]]},"568":{"position":[[1073,6]]},"648":{"position":[[876,6]]}}}],["absent",{"_index":1954,"t":{"394":{"position":[[256,6]]}}}],["absolut",{"_index":221,"t":{"22":{"position":[[156,8]]}}}],["abus",{"_index":1946,"t":{"390":{"position":[[1006,7]]}}}],["accept",{"_index":969,"t":{"160":{"position":[[184,7]]},"162":{"position":[[155,7]]},"336":{"position":[[1179,11]]},"436":{"position":[[765,6]]},"521":{"position":[[487,8]]}}}],["access",{"_index":194,"t":{"18":{"position":[[1408,6]]},"38":{"position":[[304,11]]},"40":{"position":[[82,11]]},"138":{"position":[[64,7],[139,10]]},"142":{"position":[[94,6]]},"201":{"position":[[177,9]]},"243":{"position":[[186,9]]},"249":{"position":[[84,6]]},"297":{"position":[[28,7],[111,13]]},"324":{"position":[[359,9]]},"483":{"position":[[0,6]]},"519":{"position":[[104,6]]},"523":{"position":[[81,6]]},"543":{"position":[[1094,10]]},"562":{"position":[[136,6],[506,6]]},"566":{"position":[[773,11],[845,6],[1007,10]]},"568":{"position":[[451,10],[1163,10]]},"572":{"position":[[563,8],[600,6]]},"604":{"position":[[600,6],[681,6]]},"632":{"position":[[300,6]]}}}],["accident",{"_index":2217,"t":{"515":{"position":[[399,12]]}}}],["accommod",{"_index":1187,"t":{"197":{"position":[[338,11]]},"279":{"position":[[201,11]]}}}],["accompani",{"_index":1235,"t":{"211":{"position":[[1403,11]]}}}],["accord",{"_index":1212,"t":{"209":{"position":[[303,9]]},"582":{"position":[[1290,10],[1937,10]]}}}],["account",{"_index":891,"t":{"134":{"position":[[58,7]]},"306":{"position":[[432,10],[498,10]]},"326":{"position":[[858,8],[2206,8]]},"334":{"position":[[896,7]]},"336":{"position":[[2246,8]]},"386":{"position":[[269,8]]},"598":{"position":[[373,7]]},"626":{"position":[[278,7]]}}}],["accur",{"_index":1636,"t":{"336":{"position":[[2378,9]]},"568":{"position":[[872,9]]},"572":{"position":[[399,9]]}}}],["accuraci",{"_index":2375,"t":{"566":{"position":[[421,9]]},"568":{"position":[[941,9]]}}}],["achiev",{"_index":847,"t":{"121":{"position":[[120,7]]},"221":{"position":[[82,7]]},"223":{"position":[[197,8]]},"225":{"position":[[97,8]]},"338":{"position":[[96,7]]},"344":{"position":[[260,8]]}}}],["ack/nack",{"_index":1616,"t":{"336":{"position":[[961,8]]}}}],["acknowledg",{"_index":657,"t":{"93":{"position":[[425,12],[1012,14],[1085,12]]},"205":{"position":[[138,15],[341,12]]},"251":{"position":[[96,16]]}}}],["acquir",{"_index":2028,"t":{"427":{"position":[[395,7]]}}}],["act",{"_index":633,"t":{"87":{"position":[[38,4]]},"326":{"position":[[608,6]]},"357":{"position":[[292,6],[374,6]]},"359":{"position":[[122,4]]},"380":{"position":[[557,4]]},"386":{"position":[[95,4]]},"438":{"position":[[260,4]]},"440":{"position":[[371,4]]}}}],["action",{"_index":621,"t":{"85":{"position":[[163,6]]},"219":{"position":[[216,7]]},"221":{"position":[[62,7]]},"374":{"position":[[799,7]]},"582":{"position":[[2234,6]]}}}],["activ",{"_index":408,"t":{"44":{"position":[[212,6]]},"46":{"position":[[95,6]]},"59":{"position":[[2266,6]]},"121":{"position":[[294,8]]},"221":{"position":[[118,10]]},"376":{"position":[[278,10]]},"462":{"position":[[646,10],[687,10],[780,10]]},"464":{"position":[[209,10]]},"572":{"position":[[524,10],[717,10]]}}}],["actor",{"_index":1265,"t":{"219":{"position":[[340,6]]},"221":{"position":[[47,5],[134,6]]}}}],["actual",{"_index":258,"t":{"22":{"position":[[3026,8]]},"219":{"position":[[333,6]]},"440":{"position":[[362,8]]},"568":{"position":[[695,6]]}}}],["ad",{"_index":546,"t":{"61":{"position":[[246,6]]},"71":{"position":[[419,6]]},"89":{"position":[[398,6]]},"105":{"position":[[274,6]]},"128":{"position":[[119,5]]}}}],["adapt",{"_index":1018,"t":{"171":{"position":[[198,8]]},"330":{"position":[[51,10]]}}}],["add",{"_index":103,"t":{"8":{"position":[[134,3]]},"16":{"position":[[172,3]]},"32":{"position":[[75,3]]},"48":{"position":[[103,3]]},"51":{"position":[[104,3]]},"53":{"position":[[458,4],[607,3]]},"59":{"position":[[62,3]]},"91":{"position":[[74,3]]},"105":{"position":[[455,3]]},"130":{"position":[[150,3]]},"171":{"position":[[103,3]]},"173":{"position":[[445,3]]},"332":{"position":[[648,4]]},"376":{"position":[[216,4]]},"388":{"position":[[0,3],[184,3]]},"438":{"position":[[159,3]]},"442":{"position":[[28,4],[555,3]]},"618":{"position":[[412,3]]}}}],["add(new",{"_index":576,"t":{"71":{"position":[[214,8],[265,8],[313,8]]},"89":{"position":[[193,8],[244,8],[292,8]]},"177":{"position":[[951,8],[1002,8]]}}}],["addit",{"_index":78,"t":{"6":{"position":[[1209,10]]},"121":{"position":[[312,10]]},"146":{"position":[[525,10]]},"207":{"position":[[267,10]]},"306":{"position":[[384,8]]},"361":{"position":[[1405,10],[1512,10],[1782,10]]},"456":{"position":[[3,8]]}}}],["addition",{"_index":1151,"t":{"189":{"position":[[256,13]]},"291":{"position":[[201,13]]},"306":{"position":[[579,13]]},"314":{"position":[[91,13]]},"374":{"position":[[221,13]]}}}],["addr",{"_index":2620,"t":{"620":{"position":[[35,5],[104,5]]}}}],["address",{"_index":75,"t":{"6":{"position":[[1176,7],[1479,7],[1619,7],[1665,8]]},"115":{"position":[[516,7]]},"213":{"position":[[63,9]]},"257":{"position":[[96,10],[121,9]]},"380":{"position":[[819,8]]},"382":{"position":[[87,7]]},"452":{"position":[[227,7]]},"454":{"position":[[537,8],[608,7],[715,9],[821,7]]},"481":{"position":[[156,9],[195,9]]},"487":{"position":[[87,9],[137,9]]},"489":{"position":[[383,7],[494,7]]},"491":{"position":[[28,10]]},"493":{"position":[[415,9]]},"495":{"position":[[411,9],[695,9]]},"564":{"position":[[167,7]]},"588":{"position":[[1613,9],[1670,9],[1759,9],[1815,10]]},"594":{"position":[[72,7],[781,7]]},"604":{"position":[[209,7],[239,7],[803,8]]},"618":{"position":[[265,7],[306,7],[497,8]]},"620":{"position":[[299,7]]},"622":{"position":[[626,7],[665,7],[753,7],[761,7]]},"632":{"position":[[88,7],[116,7]]},"634":{"position":[[105,7],[133,7]]},"638":{"position":[[368,7]]}}}],["address=127.0.0.1",{"_index":2576,"t":{"604":{"position":[[1110,17]]}}}],["address=[rest",{"_index":2570,"t":{"604":{"position":[[772,13]]}}}],["adequ",{"_index":2124,"t":{"460":{"position":[[288,8]]}}}],["admin",{"_index":2568,"t":{"604":{"position":[[574,5],[615,5],[1172,5]]},"632":{"position":[[281,5],[320,5]]}}}],["admin=[true|fals",{"_index":2573,"t":{"604":{"position":[[919,18]]}}}],["admin=tru",{"_index":2577,"t":{"604":{"position":[[1273,10]]}}}],["administ",{"_index":2456,"t":{"582":{"position":[[1227,12]]}}}],["administr",{"_index":2466,"t":{"582":{"position":[[1891,14]]}}}],["adopt",{"_index":1704,"t":{"347":{"position":[[423,8]]}}}],["advanc",{"_index":1335,"t":{"304":{"position":[[122,8]]},"507":{"position":[[280,8]]},"521":{"position":[[807,8]]}}}],["adversari",{"_index":718,"t":{"101":{"position":[[659,12]]},"221":{"position":[[19,9]]},"223":{"position":[[53,9]]},"306":{"position":[[46,11]]}}}],["advertis",{"_index":1892,"t":{"380":{"position":[[107,13],[462,13]]},"384":{"position":[[144,13]]},"618":{"position":[[594,9]]}}}],["advic",{"_index":2386,"t":{"566":{"position":[[1586,6]]}}}],["advis",{"_index":2426,"t":{"574":{"position":[[412,7]]}}}],["affect",{"_index":1525,"t":{"328":{"position":[[235,8],[456,8]]},"336":{"position":[[1431,7]]},"442":{"position":[[373,6]]},"462":{"position":[[668,7],[741,6]]},"584":{"position":[[412,6]]}}}],["affili",{"_index":2480,"t":{"586":{"position":[[87,11]]}}}],["africa",{"_index":1463,"t":{"324":{"position":[[684,6]]},"326":{"position":[[2291,6],[2357,6],[2750,6]]}}}],["again",{"_index":1937,"t":{"390":{"position":[[387,6]]}}}],["against",{"_index":1185,"t":{"197":{"position":[[283,7]]},"306":{"position":[[558,7]]},"390":{"position":[[934,7]]},"396":{"position":[[27,7]]},"576":{"position":[[53,7]]},"582":{"position":[[102,7],[2276,7]]}}}],["agent",{"_index":2606,"t":{"618":{"position":[[131,5],[155,5]]}}}],["aggreg",{"_index":2311,"t":{"549":{"position":[[200,10],[898,9]]},"574":{"position":[[474,9]]}}}],["agnost",{"_index":1211,"t":{"209":{"position":[[220,8]]}}}],["agnostic",{"_index":1366,"t":{"316":{"position":[[122,12]]}}}],["agre",{"_index":2359,"t":{"562":{"position":[[377,6],[454,5]]}}}],["agreement",{"_index":2472,"t":{"584":{"position":[[44,9],[155,11]]}}}],["aim",{"_index":878,"t":{"130":{"position":[[10,4]]},"217":{"position":[[177,6]]},"304":{"position":[[3,3]]},"320":{"position":[[17,4]]},"330":{"position":[[830,4]]},"340":{"position":[[342,3]]},"361":{"position":[[11,4],[879,5]]},"454":{"position":[[3,3]]},"568":{"position":[[1205,3]]}}}],["aka",{"_index":1647,"t":{"340":{"position":[[613,3]]}}}],["alert",{"_index":365,"t":{"34":{"position":[[931,7]]}}}],["alic",{"_index":232,"t":{"22":{"position":[[541,5],[998,5],[2883,5],[3054,5],[3228,8],[3290,8]]},"73":{"position":[[240,8]]},"93":{"position":[[178,8]]},"119":{"position":[[36,5],[102,5],[233,6],[240,5],[337,5],[472,6],[479,5],[571,5],[616,5]]},"148":{"position":[[36,5],[95,5],[135,5],[219,6],[226,5],[300,5],[329,5],[390,5]]},"215":{"position":[[0,5]]}}}],["alice'",{"_index":259,"t":{"22":{"position":[[3063,7]]},"215":{"position":[[114,7]]}}}],["aliceprivatekey",{"_index":237,"t":{"22":{"position":[[1010,15],[1332,16],[1627,16]]}}}],["alicepublickey",{"_index":238,"t":{"22":{"position":[[1056,14]]}}}],["align",{"_index":1103,"t":{"177":{"position":[[2307,5]]}}}],["aliv",{"_index":2632,"t":{"622":{"position":[[1262,5],[1286,5]]}}}],["allmessag",{"_index":1123,"t":{"183":{"position":[[600,11]]}}}],["alloc",{"_index":1487,"t":{"326":{"position":[[997,8]]},"340":{"position":[[995,9],[1062,8]]}}}],["allow",{"_index":230,"t":{"22":{"position":[[427,6]]},"34":{"position":[[433,8]]},"53":{"position":[[304,6]]},"67":{"position":[[193,6]]},"69":{"position":[[381,6],[562,6],[646,6]]},"75":{"position":[[805,6]]},"97":{"position":[[577,6]]},"101":{"position":[[77,8]]},"103":{"position":[[182,8]]},"113":{"position":[[77,6],[294,6]]},"121":{"position":[[828,6]]},"187":{"position":[[198,5]]},"201":{"position":[[16,6]]},"205":{"position":[[108,6]]},"209":{"position":[[244,6]]},"211":{"position":[[1520,8],[1657,7]]},"239":{"position":[[49,6]]},"247":{"position":[[58,6]]},"267":{"position":[[131,8]]},"273":{"position":[[165,8]]},"287":{"position":[[81,8]]},"316":{"position":[[135,8]]},"334":{"position":[[54,6]]},"342":{"position":[[169,7],[356,5],[499,6]]},"344":{"position":[[67,6],[747,8]]},"403":{"position":[[750,8]]},"405":{"position":[[643,8]]},"431":{"position":[[587,5]]},"436":{"position":[[914,7]]},"446":{"position":[[265,7],[670,5]]},"505":{"position":[[381,8]]},"545":{"position":[[148,8]]},"549":{"position":[[581,5]]},"560":{"position":[[916,8]]},"570":{"position":[[146,6]]},"594":{"position":[[130,6]]},"596":{"position":[[1478,6]]},"606":{"position":[[217,6]]},"608":{"position":[[218,6]]},"618":{"position":[[735,7]]},"632":{"position":[[347,5],[360,5],[661,5]]},"644":{"position":[[453,8],[794,8],[1407,5]]}}}],["along",{"_index":1081,"t":{"177":{"position":[[1822,5]]},"306":{"position":[[593,5]]},"612":{"position":[[51,5]]}}}],["alongsid",{"_index":26,"t":{"2":{"position":[[331,9]]},"55":{"position":[[1603,9]]},"183":{"position":[[176,9]]},"380":{"position":[[874,9]]}}}],["alreadi",{"_index":1407,"t":{"322":{"position":[[1253,7]]},"334":{"position":[[219,7]]},"361":{"position":[[835,7]]},"412":{"position":[[176,7]]}}}],["altern",{"_index":71,"t":{"6":{"position":[[810,14]]},"201":{"position":[[161,11]]},"243":{"position":[[170,11]]},"326":{"position":[[1724,12]]}}}],["although",{"_index":1228,"t":{"211":{"position":[[1083,8]]},"364":{"position":[[798,8]]}}}],["altruist",{"_index":1884,"t":{"376":{"position":[[891,15]]}}}],["alway",{"_index":753,"t":{"109":{"position":[[338,6]]},"160":{"position":[[738,6]]},"162":{"position":[[752,6]]},"359":{"position":[[1281,6]]},"460":{"position":[[662,6]]}}}],["ambient",{"_index":863,"t":{"121":{"position":[[1037,7]]}}}],["amend",{"_index":2404,"t":{"568":{"position":[[1347,7]]}}}],["america",{"_index":1432,"t":{"324":{"position":[[548,7],[582,7]]},"326":{"position":[[2684,7],[2702,7]]}}}],["amic",{"_index":2449,"t":{"582":{"position":[[755,8]]}}}],["amongst",{"_index":1820,"t":{"361":{"position":[[1687,7]]}}}],["amount",{"_index":1376,"t":{"320":{"position":[[117,6]]},"322":{"position":[[557,7]]},"330":{"position":[[651,6]]},"332":{"position":[[899,6]]},"334":{"position":[[331,6],[710,6]]},"344":{"position":[[190,6],[285,6],[468,6]]},"380":{"position":[[796,6],[1011,7]]},"386":{"position":[[246,6]]},"390":{"position":[[927,6]]},"454":{"position":[[388,6]]},"598":{"position":[[275,6]]},"626":{"position":[[199,6]]},"638":{"position":[[409,6],[500,6]]}}}],["analysi",{"_index":1355,"t":{"308":{"position":[[59,8]]},"322":{"position":[[1219,8]]},"361":{"position":[[193,9]]}}}],["analyz",{"_index":1754,"t":{"359":{"position":[[53,9]]},"400":{"position":[[13,7],[89,7],[245,7]]}}}],["and/or",{"_index":2635,"t":{"622":{"position":[[1431,6]]}}}],["announc",{"_index":2491,"t":{"594":{"position":[[157,9]]},"610":{"position":[[75,8]]},"618":{"position":[[675,8]]}}}],["anonym",{"_index":705,"t":{"101":{"position":[[187,10],[524,9],[582,9]]},"103":{"position":[[19,9]]},"105":{"position":[[597,9]]},"146":{"position":[[506,10]]},"195":{"position":[[129,9],[251,10]]},"219":{"position":[[205,10]]},"221":{"position":[[0,9],[90,10],[227,9]]},"227":{"position":[[102,9]]},"277":{"position":[[145,10]]},"342":{"position":[[219,9]]}}}],["anoth",{"_index":212,"t":{"20":{"position":[[1556,7]]},"40":{"position":[[14,7]]},"306":{"position":[[72,7]]},"326":{"position":[[1516,7]]},"330":{"position":[[796,7]]},"359":{"position":[[171,7]]},"462":{"position":[[509,7]]}}}],["anyon",{"_index":787,"t":{"113":{"position":[[301,6]]},"322":{"position":[[803,6],[864,6]]}}}],["anyth",{"_index":2231,"t":{"521":{"position":[[587,9]]},"543":{"position":[[1246,9]]}}}],["api",{"_index":532,"t":{"59":{"position":[[1869,3]]},"126":{"position":[[61,4],[124,3],[197,4]]},"134":{"position":[[188,4]]},"403":{"position":[[589,3],[739,3]]},"405":{"position":[[482,3],[632,3]]},"431":{"position":[[98,3],[204,5]]},"483":{"position":[[93,3]]},"487":{"position":[[235,4]]},"521":{"position":[[32,3]]},"543":{"position":[[1159,3]]},"588":{"position":[[573,3],[1726,4]]},"604":{"position":[[22,3],[89,4],[158,3],[259,3],[375,3],[502,3],[621,3],[704,3],[1025,3],[1190,3]]},"632":{"position":[[258,3],[326,4],[435,3]]},"648":{"position":[[778,3]]}}}],["app",{"_index":466,"t":{"53":{"position":[[356,3]]},"55":{"position":[[894,3],[932,3]]},"105":{"position":[[252,3]]},"107":{"position":[[130,3]]},"109":{"position":[[98,3],[207,3],[267,3]]},"111":{"position":[[78,3]]},"175":{"position":[[66,4],[527,4],[729,5]]},"177":{"position":[[349,5],[1691,3]]},"179":{"position":[[261,5]]},"181":{"position":[[252,5]]},"183":{"position":[[299,5]]},"340":{"position":[[1726,4]]},"359":{"position":[[187,3],[369,4],[406,3],[504,3]]},"549":{"position":[[71,4]]}}}],["app%2f2%2fchatroom",{"_index":2227,"t":{"521":{"position":[[419,18]]}}}],["app.css",{"_index":1051,"t":{"177":{"position":[[328,11],[1899,7]]}}}],["app.jsx",{"_index":1038,"t":{"175":{"position":[[655,7]]},"177":{"position":[[88,7]]}}}],["app/0/a/proto",{"_index":737,"t":{"105":{"position":[[327,14]]}}}],["app/1/messages/proto",{"_index":613,"t":{"83":{"position":[[186,22]]}}}],["app/1/notifications/proto",{"_index":558,"t":{"63":{"position":[[922,28]]}}}],["appear",{"_index":382,"t":{"36":{"position":[[445,8]]}}}],["appli",{"_index":138,"t":{"14":{"position":[[280,7]]},"34":{"position":[[468,5]]},"211":{"position":[[393,7]]},"326":{"position":[[147,5]]},"332":{"position":[[1717,7]]},"359":{"position":[[1874,8],[3424,8]]},"450":{"position":[[214,7]]},"456":{"position":[[309,6]]},"566":{"position":[[656,5]]},"574":{"position":[[587,5]]},"644":{"position":[[866,7],[931,7],[1250,5]]}}}],["applic",{"_index":224,"t":{"22":{"position":[[243,11]]},"24":{"position":[[108,12],[403,12]]},"42":{"position":[[105,12]]},"44":{"position":[[129,12]]},"46":{"position":[[1283,12]]},"48":{"position":[[346,13]]},"53":{"position":[[51,11],[276,12]]},"55":{"position":[[87,12],[848,11],[1168,11],[1257,11],[1516,11]]},"59":{"position":[[966,12],[1189,12],[1257,13],[1698,12],[1885,12]]},"63":{"position":[[709,13]]},"69":{"position":[[32,11],[1132,12]]},"75":{"position":[[364,11]]},"83":{"position":[[32,11],[556,12]]},"97":{"position":[[51,13],[113,11],[177,11]]},"103":{"position":[[99,11],[319,12]]},"105":{"position":[[8,11],[730,11]]},"123":{"position":[[103,12]]},"132":{"position":[[176,11],[474,13]]},"136":{"position":[[126,13]]},"140":{"position":[[0,12]]},"160":{"position":[[564,11]]},"162":{"position":[[679,11]]},"171":{"position":[[241,12]]},"173":{"position":[[88,12]]},"175":{"position":[[144,11]]},"177":{"position":[[1837,11]]},"179":{"position":[[24,12]]},"181":{"position":[[27,12]]},"183":{"position":[[131,11],[1438,11]]},"195":{"position":[[74,12],[175,12]]},"207":{"position":[[311,11]]},"211":{"position":[[28,11]]},"213":{"position":[[5,12]]},"235":{"position":[[96,12]]},"247":{"position":[[113,12]]},"261":{"position":[[49,11],[144,12]]},"285":{"position":[[134,13]]},"291":{"position":[[184,11]]},"293":{"position":[[123,11]]},"326":{"position":[[2542,13]]},"336":{"position":[[1138,12]]},"340":{"position":[[894,12]]},"403":{"position":[[759,12]]},"405":{"position":[[652,12]]},"423":{"position":[[196,13]]},"429":{"position":[[435,12]]},"433":{"position":[[17,11]]},"454":{"position":[[211,10]]},"460":{"position":[[694,10]]},"545":{"position":[[134,13]]},"547":{"position":[[166,13],[219,12]]},"566":{"position":[[697,10],[959,10]]},"574":{"position":[[628,10]]},"582":{"position":[[2017,10]]},"648":{"position":[[612,12],[1012,11]]}}}],["application'",{"_index":514,"t":{"59":{"position":[[218,13],[368,13]]},"71":{"position":[[12,13]]},"89":{"position":[[12,13]]}}}],["application/json",{"_index":2230,"t":{"521":{"position":[[496,17]]}}}],["appoint",{"_index":2025,"t":{"427":{"position":[[293,7]]}}}],["appreci",{"_index":755,"t":{"111":{"position":[[15,10]]},"359":{"position":[[2347,11]]}}}],["approach",{"_index":497,"t":{"55":{"position":[[1200,8]]},"105":{"position":[[347,8]]},"113":{"position":[[166,8]]},"195":{"position":[[21,9]]},"322":{"position":[[514,9],[672,10]]},"326":{"position":[[789,9]]},"359":{"position":[[293,9]]},"364":{"position":[[821,10]]},"368":{"position":[[56,10]]},"450":{"position":[[85,8]]},"458":{"position":[[13,9]]},"644":{"position":[[831,9]]}}}],["appropri",{"_index":1902,"t":{"380":{"position":[[784,11]]},"537":{"position":[[52,11]]},"566":{"position":[[806,11]]}}}],["approv",{"_index":773,"t":{"111":{"position":[[516,9]]}}}],["apt",{"_index":2245,"t":{"525":{"position":[[197,3]]}}}],["arbitr",{"_index":2437,"t":{"580":{"position":[[102,12]]},"582":{"position":[[260,11],[427,11],[549,11],[1215,11],[1263,11],[1339,11],[1447,8],[1499,11],[1656,11],[1781,11],[1860,12],[1910,10],[1986,12],[2264,11]]}}}],["arch",{"_index":2242,"t":{"525":{"position":[[164,4]]}}}],["architectur",{"_index":1183,"t":{"197":{"position":[[33,12]]},"322":{"position":[[733,14],[784,12]]},"330":{"position":[[128,13]]}}}],["archiv",{"_index":1696,"t":{"347":{"position":[[48,9],[229,7]]},"359":{"position":[[754,7],[1757,7]]},"361":{"position":[[473,8]]}}}],["area",{"_index":2024,"t":{"427":{"position":[[240,4]]}}}],["arg",{"_index":2281,"t":{"543":{"position":[[66,8],[189,6]]}}}],["arguabl",{"_index":1924,"t":{"386":{"position":[[1120,8]]}}}],["argument",{"_index":2282,"t":{"543":{"position":[[211,9]]},"614":{"position":[[236,8]]},"618":{"position":[[620,8]]},"620":{"position":[[205,8]]},"622":{"position":[[1232,8],[1376,8],[1489,8],[1683,8]]},"636":{"position":[[240,8]]},"638":{"position":[[259,8]]}}}],["aris",{"_index":2425,"t":{"574":{"position":[[251,7]]},"576":{"position":[[130,7]]},"582":{"position":[[690,7]]}}}],["aros",{"_index":2468,"t":{"582":{"position":[[2110,5]]}}}],["around",{"_index":1553,"t":{"332":{"position":[[871,6]]},"433":{"position":[[117,6]]}}}],["array",{"_index":126,"t":{"12":{"position":[[21,5],[271,5]]},"53":{"position":[[432,7]]}}}],["arriv",{"_index":1171,"t":{"193":{"position":[[898,7]]},"336":{"position":[[1216,8]]}}}],["articl",{"_index":908,"t":{"138":{"position":[[605,7]]}}}],["as::volume/period@@waku",{"_index":1063,"t":{"177":{"position":[[1169,8]]}}}],["hackenproof",{"_index":2484,"t":{"586":{"position":[[238,11]]}}}],["hammer",{"_index":1813,"t":{"361":{"position":[[869,6],[1455,6],[1562,6],[1833,6]]}}}],["hand",{"_index":1683,"t":{"344":{"position":[[587,4]]},"359":{"position":[[157,5]]},"442":{"position":[[13,5]]}}}],["handl",{"_index":271,"t":{"24":{"position":[[196,8]]},"28":{"position":[[124,6]]},"38":{"position":[[74,6]]},"42":{"position":[[70,6]]},"46":{"position":[[307,6],[1248,6]]},"55":{"position":[[1481,6]]},"75":{"position":[[616,6]]},"549":{"position":[[268,6]]}}}],["handleinputchang",{"_index":1057,"t":{"177":{"position":[[522,17]]}}}],["happen",{"_index":189,"t":{"18":{"position":[[1296,6]]},"46":{"position":[[324,7]]},"75":{"position":[[633,7]]},"359":{"position":[[3398,7]]},"425":{"position":[[39,6]]},"622":{"position":[[1173,6]]}}}],["hard",{"_index":1250,"t":{"215":{"position":[[96,5]]}}}],["hardcod",{"_index":225,"t":{"22":{"position":[[325,9]]}}}],["harm",{"_index":2415,"t":{"572":{"position":[[423,8]]}}}],["harmless",{"_index":2432,"t":{"576":{"position":[[35,8]]}}}],["harry'",{"_index":844,"t":{"119":{"position":[[456,7],[531,7]]}}}],["hash",{"_index":713,"t":{"101":{"position":[[460,6]]},"105":{"position":[[186,7],[669,4],[802,4]]},"115":{"position":[[139,4],[291,6]]},"117":{"position":[[109,4]]},"237":{"position":[[57,4]]},"269":{"position":[[95,4]]},"386":{"position":[[83,4]]}}}],["have",{"_index":1791,"t":{"361":{"position":[[49,6]]},"368":{"position":[[299,6]]}}}],["haven't",{"_index":1410,"t":{"322":{"position":[[1442,7]]}}}],["hd",{"_index":1469,"t":{"324":{"position":[[824,2],[839,2]]},"326":{"position":[[2600,2]]}}}],["head",{"_index":779,"t":{"111":{"position":[[670,4]]},"584":{"position":[[268,8]]},"600":{"position":[[794,4]]}}}],["header",{"_index":2229,"t":{"521":{"position":[[480,6]]}}}],["health",{"_index":618,"t":{"85":{"position":[[24,6],[313,6],[339,7]]},"483":{"position":[[135,6]]}}}],["healthi",{"_index":1994,"t":{"412":{"position":[[213,7]]}}}],["healthstatu",{"_index":624,"t":{"85":{"position":[[217,12]]}}}],["healthstatus.minimallyhealthi",{"_index":629,"t":{"85":{"position":[[448,30]]}}}],["healthstatus.sufficientlyhealthi",{"_index":627,"t":{"85":{"position":[[351,33]]}}}],["heard",{"_index":2444,"t":{"582":{"position":[[495,5]]}}}],["heavi",{"_index":734,"t":{"105":{"position":[[138,5]]}}}],["height",{"_index":1086,"t":{"177":{"position":[[2038,7]]}}}],["hel1.misc.wakudev",{"_index":1814,"t":{"361":{"position":[[1090,18]]}}}],["hel1.misc.wakudev.status.im",{"_index":1769,"t":{"359":{"position":[[960,29],[2032,29]]}}}],["held",{"_index":2417,"t":{"574":{"position":[[15,4]]},"582":{"position":[[1519,4]]},"584":{"position":[[532,4]]}}}],["hello",{"_index":588,"t":{"73":{"position":[[258,7]]},"93":{"position":[[196,7]]}}}],["help",{"_index":214,"t":{"22":{"position":[[16,5]]},"28":{"position":[[59,8],[150,4]]},"57":{"position":[[335,4]]},"85":{"position":[[41,4]]},"97":{"position":[[280,5]]},"201":{"position":[[285,5]]},"209":{"position":[[11,4]]},"334":{"position":[[268,5]]},"349":{"position":[[276,4]]},"394":{"position":[[131,5]]},"423":{"position":[[132,4]]},"425":{"position":[[407,4]]},"431":{"position":[[369,4],[788,4]]},"485":{"position":[[54,5]]},"505":{"position":[[538,5],[564,4]]},"521":{"position":[[626,5]]},"531":{"position":[[174,4]]},"543":{"position":[[836,4],[1285,5]]},"586":{"position":[[253,4]]}}}],["helper",{"_index":2258,"t":{"525":{"position":[[479,6],[496,7]]}}}],["henc",{"_index":1491,"t":{"326":{"position":[[1314,5]]},"423":{"position":[[70,6]]}}}],["here",{"_index":318,"t":{"32":{"position":[[94,4]]},"79":{"position":[[240,4]]},"97":{"position":[[0,4]]},"99":{"position":[[85,4]]},"136":{"position":[[179,5]]},"167":{"position":[[376,5]]},"193":{"position":[[0,4]]},"195":{"position":[[288,4]]},"306":{"position":[[250,5],[727,5],[872,5]]},"324":{"position":[[155,4]]},"336":{"position":[[340,5],[1031,5]]},"612":{"position":[[0,4]]}}}],["herein",{"_index":2382,"t":{"566":{"position":[[994,6],[1257,6],[1493,7],[1527,6]]},"568":{"position":[[825,6],[1004,7]]},"582":{"position":[[1422,6]]}}}],["hesit",{"_index":510,"t":{"57":{"position":[[223,8]]}}}],["hex",{"_index":1309,"t":{"257":{"position":[[35,3]]},"600":{"position":[[271,3],[359,3],[385,3],[553,3]]},"618":{"position":[[247,3]]},"622":{"position":[[516,3],[594,3]]}}}],["hexadecim",{"_index":278,"t":{"24":{"position":[[372,11],[666,11],[806,11]]}}}],["hextobyt",{"_index":280,"t":{"24":{"position":[[474,10]]}}}],["hextobytes(privatekeyhex",{"_index":290,"t":{"24":{"position":[[910,26]]}}}],["hextobytes(symmetrickeyhex",{"_index":288,"t":{"24":{"position":[[854,28]]}}}],["hide",{"_index":716,"t":{"101":{"position":[[624,4]]},"299":{"position":[[240,6]]}}}],["high",{"_index":727,"t":{"103":{"position":[[345,4]]},"332":{"position":[[59,4]]},"336":{"position":[[711,4]]},"342":{"position":[[386,4]]},"364":{"position":[[458,4]]},"440":{"position":[[461,4]]},"560":{"position":[[1071,4]]},"568":{"position":[[500,4],[1027,4]]}}}],["higher",{"_index":1543,"t":{"332":{"position":[[227,6],[272,6]]},"340":{"position":[[686,6]]},"355":{"position":[[967,6]]},"357":{"position":[[644,6]]}}}],["highli",{"_index":512,"t":{"57":{"position":[[312,6]]},"97":{"position":[[838,6]]},"470":{"position":[[139,6]]}}}],["highlight",{"_index":2021,"t":{"425":{"position":[[456,11]]},"429":{"position":[[233,9]]},"433":{"position":[[252,9]]}}}],["histor",{"_index":490,"t":{"55":{"position":[[528,10]]},"59":{"position":[[537,10],[661,10]]},"95":{"position":[[192,10]]},"138":{"position":[[456,10]]},"150":{"position":[[87,10]]},"158":{"position":[[121,10]]},"169":{"position":[[791,10]]},"191":{"position":[[195,10]]},"378":{"position":[[44,8]]},"446":{"position":[[586,10]]},"505":{"position":[[412,10]]},"596":{"position":[[1513,10],[1708,10]]}}}],["histori",{"_index":1002,"t":{"167":{"position":[[1025,8]]},"347":{"position":[[154,7]]},"380":{"position":[[755,8]]},"382":{"position":[[48,8]]},"394":{"position":[[229,8]]}}}],["historyqueri",{"_index":1885,"t":{"378":{"position":[[104,12]]},"380":{"position":[[847,12]]}}}],["historyrespons",{"_index":1886,"t":{"378":{"position":[[151,15]]},"380":{"position":[[1038,15]]}}}],["hold",{"_index":2431,"t":{"576":{"position":[[27,4]]}}}],["home/.cargo/env",{"_index":2252,"t":{"525":{"position":[[313,18]]}}}],["homebrew",{"_index":2243,"t":{"525":{"position":[[181,10]]}}}],["hongkong",{"_index":2525,"t":{"596":{"position":[[1779,8]]},"606":{"position":[[570,8]]},"608":{"position":[[498,8]]}}}],["honour",{"_index":1934,"t":{"390":{"position":[[199,7]]}}}],["hood",{"_index":911,"t":{"138":{"position":[[649,5]]},"517":{"position":[[172,5]]}}}],["hop",{"_index":1539,"t":{"330":{"position":[[614,4],[661,4]]},"332":{"position":[[175,4],[242,5],[473,4],[608,4],[644,3],[909,4],[1148,4],[1308,4],[1352,4],[1876,4]]},"336":{"position":[[1368,3],[1953,3]]},"442":{"position":[[518,5]]},"638":{"position":[[581,3],[628,4]]}}}],["hopr",{"_index":1920,"t":{"386":{"position":[[688,6]]}}}],["host",{"_index":59,"t":{"6":{"position":[[389,4]]},"235":{"position":[[56,7]]},"543":{"position":[[1122,4]]},"554":{"position":[[347,4]]},"560":{"position":[[521,4]]},"632":{"position":[[472,4]]}}}],["host]:[websocket",{"_index":377,"t":{"36":{"position":[[142,16]]}}}],["hour",{"_index":1901,"t":{"380":{"position":[[747,4]]},"382":{"position":[[40,4]]},"596":{"position":[[698,7],[1268,7]]},"606":{"position":[[509,7],[777,7]]},"626":{"position":[[194,4]]},"644":{"position":[[1367,5]]}}}],["http",{"_index":342,"t":{"34":{"position":[[350,8],[612,5]]},"142":{"position":[[17,5]]},"525":{"position":[[256,8],[403,8],[551,8]]},"632":{"position":[[59,4],[136,4],[190,4],[315,4],[520,4]]},"634":{"position":[[198,4]]}}}],["http://127.0.0.1:8645/debug/v1/info",{"_index":2225,"t":{"521":{"position":[[184,37]]}}}],["http://127.0.0.1:8645/debug/v1/vers",{"_index":2224,"t":{"521":{"position":[[110,40]]}}}],["http://127.0.0.1:8645/store/v1/messages?contenttopics=%2fmi",{"_index":2226,"t":{"521":{"position":[[358,60]]}}}],["http://localhost:3000",{"_index":2172,"t":{"483":{"position":[[32,21]]}}}],["http://localhost:3000/d/yns_4vfvk/nwaku",{"_index":2220,"t":{"519":{"position":[[6,39]]}}}],["http://localhost:8645/health",{"_index":2173,"t":{"483":{"position":[[145,28]]}}}],["https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.j",{"_index":478,"t":{"53":{"position":[[735,70]]}}}],["https://creativecommons.org/licenses/by/4.0",{"_index":2412,"t":{"570":{"position":[[390,45]]}}}],["https://github.com/vacp2p/research/issues/148",{"_index":1279,"t":{"223":{"position":[[476,46]]},"306":{"position":[[256,46]]}}}],["https://github.com/waku",{"_index":780,"t":{"111":{"position":[[678,23]]},"136":{"position":[[185,23]]},"306":{"position":[[878,23]]},"320":{"position":[[172,23]]},"322":{"position":[[1080,23],[1169,23],[1321,23]]},"326":{"position":[[181,23],[2830,23]]},"334":{"position":[[962,23]]},"347":{"position":[[459,23]]},"351":{"position":[[0,23],[42,23]]},"353":{"position":[[122,23]]},"361":{"position":[[1141,23],[1264,23]]},"384":{"position":[[21,23],[91,23],[164,23],[235,23]]},"388":{"position":[[31,23],[137,23],[225,23],[321,23]]},"392":{"position":[[70,23],[141,23]]},"396":{"position":[[52,23],[145,23]]},"400":{"position":[[42,23],[198,23],[362,23],[504,23]]},"477":{"position":[[33,23]]},"513":{"position":[[10,23]]},"527":{"position":[[129,23]]},"541":{"position":[[99,23]]}}}],["https://ideas.waku.org",{"_index":2325,"t":{"549":{"position":[[1296,23]]}}}],["https://sh.rustup.r",{"_index":2250,"t":{"525":{"position":[[280,20],[427,20],[575,20]]}}}],["https://unpkg.com/@waku/sdk@latest/bundle/index.j",{"_index":452,"t":{"51":{"position":[[227,53]]},"79":{"position":[[173,53]]}}}],["https://vac.dev/build",{"_index":1351,"t":{"306":{"position":[[733,24]]}}}],["hub",{"_index":2277,"t":{"539":{"position":[[52,3]]}}}],["huge",{"_index":1632,"t":{"336":{"position":[[2060,4]]}}}],["hundr",{"_index":2428,"t":{"574":{"position":[[537,7]]}}}],["h|m|s|m",{"_index":2659,"t":{"644":{"position":[[528,8]]}}}],["i.",{"_index":1755,"t":{"359":{"position":[[63,4]]},"390":{"position":[[805,5]]}}}],["i13n",{"_index":1849,"t":{"368":{"position":[[346,4]]},"372":{"position":[[93,4]]},"380":{"position":[[280,4],[1165,4]]}}}],["id",{"_index":645,"t":{"87":{"position":[[381,3],[425,3]]},"93":{"position":[[533,2]]},"105":{"position":[[233,3],[628,3]]},"361":{"position":[[702,3]]},"618":{"position":[[39,2],[52,2],[112,2]]},"622":{"position":[[474,2],[537,2]]}}}],["id'",{"_index":744,"t":{"105":{"position":[[807,4]]}}}],["id=\"messag",{"_index":1074,"t":{"177":{"position":[[1479,11]]}}}],["id=1",{"_index":2299,"t":{"543":{"position":[[902,5]]}}}],["idea",{"_index":1530,"t":{"328":{"position":[[537,4]]},"336":{"position":[[593,4],[1653,4]]},"549":{"position":[[1230,5]]}}}],["ideal",{"_index":1879,"t":{"376":{"position":[[329,7]]}}}],["ident",{"_index":1260,"t":{"219":{"position":[[116,11]]},"299":{"position":[[231,8]]},"386":{"position":[[838,11]]},"390":{"position":[[594,10]]},"448":{"position":[[99,9]]},"622":{"position":[[491,8],[565,8]]}}}],["identif",{"_index":1264,"t":{"219":{"position":[[311,14]]}}}],["identifi",{"_index":634,"t":{"87":{"position":[[49,10],[243,8]]},"101":{"position":[[311,12]]},"105":{"position":[[203,10]]},"211":{"position":[[931,12]]},"219":{"position":[[77,11]]},"221":{"position":[[161,12]]},"227":{"position":[[190,8],[344,12]]},"241":{"position":[[68,8]]},"269":{"position":[[21,10]]},"275":{"position":[[46,10]]},"429":{"position":[[172,8]]},"454":{"position":[[638,11]]},"584":{"position":[[277,11]]},"618":{"position":[[185,10]]}}}],["idl",{"_index":2633,"t":{"622":{"position":[[1296,4]]}}}],["ii",{"_index":1404,"t":{"322":{"position":[[1130,3],[1574,3]]},"328":{"position":[[258,3]]},"330":{"position":[[926,3]]},"338":{"position":[[85,3]]},"340":{"position":[[582,3]]},"582":{"position":[[965,4]]}}}],["illustr",{"_index":1163,"t":{"193":{"position":[[18,12]]}}}],["imag",{"_index":536,"t":{"59":{"position":[[2465,6],[2550,6]]},"499":{"position":[[295,5]]},"539":{"position":[[17,6],[144,6]]},"541":{"position":[[30,5],[157,5],[175,5]]},"543":{"position":[[58,7],[116,5],[129,5]]}}}],["immedi",{"_index":1337,"t":{"304":{"position":[[203,9]]},"466":{"position":[[185,11]]},"578":{"position":[[217,11]]},"648":{"position":[[1075,12]]}}}],["impact",{"_index":1406,"t":{"322":{"position":[[1235,6]]},"336":{"position":[[2065,6]]},"347":{"position":[[262,6],[343,7]]},"388":{"position":[[285,6]]},"438":{"position":[[356,6]]}}}],["implement",{"_index":444,"t":{"48":{"position":[[205,14]]},"128":{"position":[[137,9]]},"255":{"position":[[34,10]]},"295":{"position":[[56,12]]},"302":{"position":[[81,15]]},"308":{"position":[[187,15]]},"444":{"position":[[50,11],[105,11],[165,11]]},"458":{"position":[[67,11]]},"549":{"position":[[707,9]]}}}],["impli",{"_index":1544,"t":{"332":{"position":[[281,7]]},"446":{"position":[[10,7]]},"566":{"position":[[163,8],[1385,7]]},"572":{"position":[[246,5]]}}}],["implic",{"_index":697,"t":{"99":{"position":[[71,13]]},"436":{"position":[[106,12],[961,12]]}}}],["implicit",{"_index":1860,"t":{"370":{"position":[[287,9]]}}}],["import",{"_index":40,"t":{"4":{"position":[[135,6]]},"6":{"position":[[147,6]]},"8":{"position":[[282,6],[327,6],[816,6]]},"10":{"position":[[86,6],[131,6],[178,6]]},"12":{"position":[[123,6]]},"18":{"position":[[162,6],[415,6],[882,6]]},"20":{"position":[[162,6],[570,6],[1051,6]]},"22":{"position":[[563,6],[640,6],[734,6],[2228,6],[2291,6]]},"24":{"position":[[453,6]]},"34":{"position":[[181,9]]},"51":{"position":[[205,6]]},"53":{"position":[[713,6],[728,6]]},"63":{"position":[[94,6]]},"67":{"position":[[272,6]]},"69":{"position":[[86,6]]},"71":{"position":[[83,6]]},"79":{"position":[[124,6]]},"81":{"position":[[94,6]]},"83":{"position":[[86,6]]},"85":{"position":[[208,6]]},"87":{"position":[[511,6]]},"89":{"position":[[62,6]]},"152":{"position":[[94,6]]},"154":{"position":[[85,6]]},"156":{"position":[[92,6]]},"165":{"position":[[151,6]]},"167":{"position":[[180,6]]},"175":{"position":[[182,6],[237,6],[681,6]]},"177":{"position":[[144,6],[189,6],[228,6],[286,6],[321,6]]},"179":{"position":[[208,6]]},"181":{"position":[[194,6]]},"183":{"position":[[223,6]]},"219":{"position":[[143,9]]},"332":{"position":[[139,9],[1614,9]]},"336":{"position":[[346,9]]},"340":{"position":[[444,10]]},"386":{"position":[[861,9]]}}}],["impos",{"_index":334,"t":{"34":{"position":[[213,6]]},"146":{"position":[[517,7]]},"199":{"position":[[245,7]]},"211":{"position":[[902,7]]},"283":{"position":[[164,8]]}}}],["imposs",{"_index":1671,"t":{"342":{"position":[[426,11]]}}}],["improv",{"_index":513,"t":{"57":{"position":[[340,7]]},"105":{"position":[[510,7]]},"117":{"position":[[544,9]]},"209":{"position":[[874,8]]},"322":{"position":[[690,11]]},"403":{"position":[[563,13]]},"405":{"position":[[456,13]]},"431":{"position":[[196,7]]}}}],["in/out",{"_index":1660,"t":{"340":{"position":[[1679,6]]}}}],["incent",{"_index":1349,"t":{"306":{"position":[[682,9]]},"376":{"position":[[704,10],[734,10]]}}}],["incentiv",{"_index":1841,"t":{"366":{"position":[[13,12]]}}}],["incentivis",{"_index":22,"t":{"2":{"position":[[271,15]]},"55":{"position":[[1543,15]]},"140":{"position":[[383,15]]},"304":{"position":[[20,12]]},"306":{"position":[[396,13]]},"314":{"position":[[16,11]]},"364":{"position":[[16,15]]},"376":{"position":[[80,12]]},"380":{"position":[[16,12]]},"398":{"position":[[67,12]]},"400":{"position":[[420,15]]}}}],["incid",{"_index":2481,"t":{"586":{"position":[[126,9]]}}}],["incident",{"_index":2422,"t":{"574":{"position":[[202,11]]}}}],["includ",{"_index":427,"t":{"46":{"position":[[689,8]]},"53":{"position":[[814,7]]},"113":{"position":[[233,9],[591,9]]},"138":{"position":[[223,8],[446,9]]},"187":{"position":[[305,9]]},"207":{"position":[[84,8]]},"217":{"position":[[360,7]]},"223":{"position":[[392,9]]},"235":{"position":[[131,9]]},"241":{"position":[[182,8]]},"253":{"position":[[171,7]]},"281":{"position":[[84,9]]},"293":{"position":[[68,9]]},"316":{"position":[[5,8]]},"372":{"position":[[44,7]]},"433":{"position":[[98,7]]},"515":{"position":[[341,7]]},"525":{"position":[[55,9]]},"562":{"position":[[168,9]]},"566":{"position":[[172,9]]},"568":{"position":[[243,7],[727,9],[1259,9]]},"570":{"position":[[233,9]]},"572":{"position":[[104,9]]},"576":{"position":[[103,9],[210,9]]},"582":{"position":[[74,8],[1873,9]]}}}],["incom",{"_index":652,"t":{"91":{"position":[[31,8]]},"95":{"position":[[141,8]]},"181":{"position":[[129,8]]},"209":{"position":[[666,8]]},"403":{"position":[[455,8]]},"405":{"position":[[348,8]]},"408":{"position":[[157,8]]},"412":{"position":[[255,8]]},"505":{"position":[[163,8]]}}}],["incorpor",{"_index":1140,"t":{"187":{"position":[[104,12]]},"582":{"position":[[1409,12]]}}}],["increas",{"_index":719,"t":{"103":{"position":[[8,8]]},"113":{"position":[[373,9]]},"328":{"position":[[470,10]]},"336":{"position":[[926,10],[1580,9],[2170,8]]},"364":{"position":[[327,9]]},"440":{"position":[[118,9]]},"442":{"position":[[159,8],[211,8]]},"638":{"position":[[610,8]]}}}],["incur",{"_index":2036,"t":{"429":{"position":[[554,5]]}}}],["indemnifi",{"_index":2430,"t":{"576":{"position":[[10,9]]}}}],["independ",{"_index":2146,"t":{"464":{"position":[[110,11]]}}}],["index",{"_index":992,"t":{"167":{"position":[[41,5],[793,5]]},"177":{"position":[[1246,6]]},"622":{"position":[[318,5],[328,5]]}}}],["indic",{"_index":409,"t":{"44":{"position":[[277,9]]},"175":{"position":[[930,9]]},"193":{"position":[[216,9]]},"205":{"position":[[177,10]]},"328":{"position":[[505,9]]},"336":{"position":[[225,8]]},"357":{"position":[[687,9]]},"359":{"position":[[3662,9]]},"454":{"position":[[418,9]]}}}],["individu",{"_index":1548,"t":{"332":{"position":[[542,10],[714,10],[2016,10]]}}}],["industri",{"_index":2394,"t":{"568":{"position":[[168,8]]}}}],["inf",{"_index":2179,"t":{"489":{"position":[[84,3]]},"493":{"position":[[93,3]]},"495":{"position":[[96,3]]}}}],["info",{"_index":14,"t":{"2":{"position":[[142,4]]},"14":{"position":[[170,4]]},"22":{"position":[[176,4]]},"36":{"position":[[311,5],[387,5]]},"46":{"position":[[1014,4]]},"63":{"position":[[328,4]]},"69":{"position":[[1037,4]]},"71":{"position":[[363,4]]},"81":{"position":[[226,4]]},"83":{"position":[[461,4]]},"89":{"position":[[342,4]]},"101":{"position":[[467,4]]},"105":{"position":[[575,4]]},"144":{"position":[[169,4]]},"146":{"position":[[231,4]]},"160":{"position":[[693,4]]},"162":{"position":[[717,4]]},"167":{"position":[[935,4]]},"169":{"position":[[542,4]]},"177":{"position":[[1695,4]]},"183":{"position":[[1262,4]]},"201":{"position":[[264,4]]},"203":{"position":[[234,4]]},"205":{"position":[[306,4]]},"209":{"position":[[838,4]]},"487":{"position":[[0,4],[104,4],[209,4]]},"497":{"position":[[206,4]]},"501":{"position":[[433,4]]},"503":{"position":[[623,4]]},"511":{"position":[[157,4]]},"521":{"position":[[163,4]]},"523":{"position":[[239,4]]},"537":{"position":[[115,4]]},"543":{"position":[[841,4],[1022,4]]},"552":{"position":[[117,4]]},"556":{"position":[[673,4]]},"558":{"position":[[796,4]]},"560":{"position":[[837,4]]},"594":{"position":[[695,4]]},"606":{"position":[[697,4]]},"610":{"position":[[304,4]]},"616":{"position":[[127,5]]}}}],["inform",{"_index":227,"t":{"22":{"position":[[366,11]]},"24":{"position":[[273,11]]},"101":{"position":[[257,12],[324,11]]},"146":{"position":[[325,11]]},"193":{"position":[[875,9]]},"195":{"position":[[196,8]]},"211":{"position":[[1568,11]]},"221":{"position":[[174,11]]},"227":{"position":[[357,11]]},"241":{"position":[[210,11]]},"245":{"position":[[51,11]]},"259":{"position":[[33,11]]},"265":{"position":[[47,11]]},"326":{"position":[[34,8]]},"336":{"position":[[986,11]]},"450":{"position":[[65,6]]},"458":{"position":[[191,11]]},"462":{"position":[[937,11]]},"491":{"position":[[39,11]]},"543":{"position":[[740,11]]},"566":{"position":[[1076,13],[1245,11],[1505,11]]},"568":{"position":[[803,11],[982,11],[1246,12]]}}}],["infrastructur",{"_index":916,"t":{"140":{"position":[[134,15],[301,14]]},"306":{"position":[[777,14]]},"310":{"position":[[296,14]]},"314":{"position":[[153,14]]},"549":{"position":[[808,15]]}}}],["infring",{"_index":2370,"t":{"566":{"position":[[278,12]]}}}],["infura",{"_index":924,"t":{"142":{"position":[[122,6],[146,6]]},"475":{"position":[[91,6]]},"511":{"position":[[109,6]]}}}],["init",{"_index":2263,"t":{"525":{"position":[[645,4]]}}}],["initi",{"_index":1290,"t":{"231":{"position":[[21,7]]},"302":{"position":[[73,7]]},"376":{"position":[[856,7]]},"425":{"position":[[17,7],[144,7]]},"444":{"position":[[8,7]]}}}],["initialis",{"_index":747,"t":{"109":{"position":[[0,10],[191,10]]},"121":{"position":[[5,12]]},"183":{"position":[[143,11]]}}}],["inject",{"_index":1952,"t":{"394":{"position":[[200,9]]},"403":{"position":[[204,9]]},"405":{"position":[[97,9]]},"408":{"position":[[102,9],[127,9]]},"410":{"position":[[252,9]]},"412":{"position":[[77,9],[333,9]]},"448":{"position":[[211,9]]}}}],["innov",{"_index":786,"t":{"113":{"position":[[155,10]]}}}],["input",{"_index":1056,"t":{"177":{"position":[[502,5],[1460,6],[1491,6],[2339,5]]},"179":{"position":[[100,5]]}}}],["inputmessag",{"_index":1052,"t":{"177":{"position":[[363,14],[471,12]]},"179":{"position":[[613,12]]}}}],["inputmessage.length",{"_index":1113,"t":{"179":{"position":[[445,19]]}}}],["insecur",{"_index":339,"t":{"34":{"position":[[288,8]]},"38":{"position":[[57,8]]}}}],["insert",{"_index":1716,"t":{"355":{"position":[[8,6],[473,7],[1469,6]]},"361":{"position":[[106,6],[445,6],[1416,9],[1523,9],[1617,6],[1658,6],[1793,9]]},"396":{"position":[[129,9]]}}}],["inspir",{"_index":1871,"t":{"372":{"position":[[169,8]]},"549":{"position":[[1254,12]]}}}],["instal",{"_index":99,"t":{"8":{"position":[[47,7],[101,7]]},"16":{"position":[[0,7],[122,7]]},"51":{"position":[[0,7],[81,7],[175,10]]},"53":{"position":[[501,7],[583,7],[680,10]]},"59":{"position":[[9,7],[142,12],[445,12],[1347,12]]},"61":{"position":[[214,12]]},"71":{"position":[[396,12]]},"79":{"position":[[4,7]]},"89":{"position":[[375,12]]},"109":{"position":[[244,9]]},"173":{"position":[[292,7],[399,7]]},"525":{"position":[[205,7],[341,7],[606,7]]},"537":{"position":[[17,9]]}}}],["instanc",{"_index":1795,"t":{"361":{"position":[[342,9]]},"368":{"position":[[92,9]]},"390":{"position":[[1018,9]]}}}],["instanceof",{"_index":428,"t":{"46":{"position":[[732,10]]}}}],["instead",{"_index":89,"t":{"6":{"position":[[1487,7]]},"101":{"position":[[283,7]]},"219":{"position":[[89,7]]},"438":{"position":[[283,8]]},"444":{"position":[[240,8]]},"523":{"position":[[230,8]]},"610":{"position":[[453,8]]},"622":{"position":[[1452,7]]},"648":{"position":[[116,7]]}}}],["institut",{"_index":2458,"t":{"582":{"position":[[1275,11]]},"586":{"position":[[50,9]]}}}],["instruct",{"_index":524,"t":{"59":{"position":[[1331,12],[2436,13]]},"144":{"position":[[59,12]]},"211":{"position":[[1771,12]]},"477":{"position":[[224,13]]},"485":{"position":[[138,12]]},"537":{"position":[[64,12]]},"596":{"position":[[856,8]]},"646":{"position":[[122,12],[323,12]]}}}],["instrument",{"_index":1575,"t":{"334":{"position":[[154,10]]}}}],["integ",{"_index":1422,"t":{"324":{"position":[[264,8]]},"644":{"position":[[382,7],[492,7]]}}}],["integr",{"_index":150,"t":{"16":{"position":[[34,11]]},"22":{"position":[[141,9]]},"48":{"position":[[306,9]]},"55":{"position":[[815,9]]},"59":{"position":[[1161,9],[1669,9]]},"171":{"position":[[210,9]]},"173":{"position":[[326,11]]},"183":{"position":[[1404,10]]},"209":{"position":[[825,12]]},"225":{"position":[[66,9]]},"285":{"position":[[44,9]]},"295":{"position":[[242,10]]},"299":{"position":[[192,10]]},"429":{"position":[[418,10]]},"545":{"position":[[164,9]]},"549":{"position":[[329,9]]}}}],["intellectu",{"_index":2371,"t":{"566":{"position":[[294,12]]}}}],["intend",{"_index":1362,"t":{"314":{"position":[[5,7]]},"450":{"position":[[53,8]]},"566":{"position":[[1042,8]]}}}],["intention",{"_index":1269,"t":{"223":{"position":[[104,13]]}}}],["inter",{"_index":1625,"t":{"336":{"position":[[1471,5]]}}}],["interact",{"_index":372,"t":{"36":{"position":[[56,13]]},"63":{"position":[[62,8]]},"81":{"position":[[62,8]]},"121":{"position":[[848,12]]},"142":{"position":[[182,8]]},"152":{"position":[[62,8]]},"185":{"position":[[95,11]]},"193":{"position":[[35,11]]},"263":{"position":[[94,11]]},"382":{"position":[[179,12]]},"403":{"position":[[635,12]]},"405":{"position":[[528,12]]},"423":{"position":[[335,11]]},"425":{"position":[[152,12],[291,12]]},"456":{"position":[[218,8]]},"483":{"position":[[100,8]]},"507":{"position":[[180,8]]},"509":{"position":[[89,8]]},"521":{"position":[[53,11]]},"549":{"position":[[346,12],[520,12]]},"588":{"position":[[478,8],[523,8]]},"604":{"position":[[29,8]]},"648":{"position":[[747,12]]}}}],["interconnect",{"_index":2080,"t":{"444":{"position":[[372,14]]}}}],["interest",{"_index":702,"t":{"101":{"position":[[120,10]]},"273":{"position":[[155,9]]},"275":{"position":[[74,8],[112,10]]},"330":{"position":[[531,10]]},"454":{"position":[[684,8]]},"646":{"position":[[243,10]]}}}],["interfac",{"_index":1047,"t":{"177":{"position":[[19,9],[1157,11],[1987,9]]},"181":{"position":[[171,10]]},"473":{"position":[[160,9]]},"588":{"position":[[577,9]]}}}],["intern",{"_index":2408,"t":{"570":{"position":[[87,13]]},"582":{"position":[[1325,13],[1972,13]]}}}],["internet",{"_index":1304,"t":{"253":{"position":[[97,8],[135,8]]},"322":{"position":[[114,8]]},"340":{"position":[[541,8]]}}}],["interoper",{"_index":459,"t":{"53":{"position":[[190,17]]},"59":{"position":[[314,17]]},"417":{"position":[[25,16]]}}}],["interpret",{"_index":2477,"t":{"584":{"position":[[423,14]]}}}],["interv",{"_index":2527,"t":{"598":{"position":[[171,9],[181,8]]},"626":{"position":[[99,8],[122,8]]}}}],["interval=300",{"_index":2533,"t":{"598":{"position":[[523,12]]}}}],["introduc",{"_index":1152,"t":{"189":{"position":[[275,10]]},"342":{"position":[[151,11],[481,11]]},"370":{"position":[[12,10],[391,10]]}}}],["introduct",{"_index":1673,"t":{"344":{"position":[[136,12]]}}}],["invalid",{"_index":386,"t":{"38":{"position":[[81,7],[188,10]]},"370":{"position":[[243,8]]},"584":{"position":[[537,7]]}}}],["invest",{"_index":1779,"t":{"359":{"position":[[3175,8]]}}}],["investig",{"_index":388,"t":{"38":{"position":[[230,11]]},"431":{"position":[[462,14],[610,14],[696,11],[802,14]]}}}],["invoc",{"_index":2275,"t":{"529":{"position":[[54,10]]}}}],["involv",{"_index":828,"t":{"117":{"position":[[593,8]]},"195":{"position":[[113,8]]},"211":{"position":[[236,8]]},"213":{"position":[[478,8]]},"332":{"position":[[786,8]]},"364":{"position":[[766,8]]},"386":{"position":[[1045,9]]},"419":{"position":[[87,8]]}}}],["io4qdxtotg86ppck2kvmevcxc2advzwrxxsvnzeaoa0jhshbm5qed69rqz1s1mweeqj3aoklo_7eu9iibcpmveklcqbgmlkgny0ixnly3ayntzrmaeddbhk1gx6y_zv5dvw5qb3dtsommvhtzo1wsorrf2lol2ddwrwgimohxdha3uyaw",{"_index":2194,"t":{"495":{"position":[[218,177],[441,177]]},"558":{"position":[[618,177]]}}}],["ip",{"_index":60,"t":{"6":{"position":[[394,4],[1173,2]]},"101":{"position":[[99,2]]},"113":{"position":[[243,3]]},"115":{"position":[[513,2]]},"213":{"position":[[259,3]]},"454":{"position":[[534,2],[605,2],[712,2],[818,2]]},"543":{"position":[[567,3],[632,3]]},"554":{"position":[[352,4]]},"556":{"position":[[443,3],[669,3],[906,3]]},"560":{"position":[[526,4]]},"594":{"position":[[778,2]]},"610":{"position":[[103,2]]},"620":{"position":[[161,3]]},"636":{"position":[[226,3]]},"638":{"position":[[365,2],[389,2],[439,2],[481,2],[530,2]]}}}],["ip4/0.0.0.0/tcp/60000/p2p/16uiu2hamqcsh9v81xoqtwgut3qwkzwbwy1tttqwpr3djhu2tswmn",{"_index":2185,"t":{"489":{"position":[[391,80]]}}}],["ip4/0.0.0.0/tcp/60002/ws/p2p/16uiu2hakzjwwgeaxfegnmkfpspc6vgbrqcdtlg5q3gmk2v4pqw7h",{"_index":69,"t":{"6":{"position":[[528,86],[931,86]]},"10":{"position":[[307,86]]}}}],["ip4/0.0.0.0/tcp/60003/ws/p2p/16uiu2hamfba7lgtwy5wvvikdmxvo3cklqkmvvtudu63fe8safeqj",{"_index":70,"t":{"6":{"position":[[615,86],[1018,86]]},"10":{"position":[[394,86]]}}}],["ip4/0.0.0.0/tcp/8000/ws/p2p/16uiu2hamqcsh9v81xoqtwgut3qwkzwbwy1tttqwpr3djhu2tswmn",{"_index":2186,"t":{"489":{"position":[[502,82]]}}}],["ip4/1.2.3.4/tcp/1234/p2p/16uiu2ham",{"_index":954,"t":{"154":{"position":[[495,40]]},"183":{"position":[[1059,40]]}}}],["ipf",{"_index":542,"t":{"59":{"position":[[2640,4]]},"211":{"position":[[970,5],[1036,4]]},"372":{"position":[[81,5]]}}}],["ipt",{"_index":1570,"t":{"332":{"position":[[2005,3]]}}}],["ipv4",{"_index":2488,"t":{"594":{"position":[[18,4],[67,4]]},"620":{"position":[[294,4]]}}}],["irrecover",{"_index":662,"t":{"93":{"position":[[651,13]]}}}],["ish",{"_index":2062,"t":{"438":{"position":[[29,4],[92,4]]}}}],["isload",{"_index":1040,"t":{"175":{"position":[[791,9],[918,11]]},"177":{"position":[[641,9]]}}}],["isn't",{"_index":526,"t":{"59":{"position":[[1737,5]]}}}],["issu",{"_index":306,"t":{"28":{"position":[[15,6]]},"34":{"position":[[673,6],[909,6]]},"40":{"position":[[322,5],[397,6]]},"46":{"position":[[1097,7]]},"57":{"position":[[243,5]]},"59":{"position":[[2103,6]]},"85":{"position":[[561,6]]},"320":{"position":[[11,5]]},"322":{"position":[[1034,5],[1307,6],[1495,5]]},"330":{"position":[[824,5]]},"361":{"position":[[37,6]]},"390":{"position":[[549,7]]},"400":{"position":[[29,6]]},"427":{"position":[[485,6],[621,7]]},"431":{"position":[[480,7],[880,6],[912,5]]},"436":{"position":[[137,5]]},"485":{"position":[[17,6]]},"521":{"position":[[535,6]]},"543":{"position":[[1194,6]]}}}],["it'",{"_index":332,"t":{"34":{"position":[[176,4]]},"59":{"position":[[2510,4]]},"63":{"position":[[723,4]]},"326":{"position":[[802,4]]},"328":{"position":[[230,4]]},"336":{"position":[[740,4],[2255,4]]},"376":{"position":[[875,4]]},"446":{"position":[[461,4]]}}}],["item",{"_index":1104,"t":{"177":{"position":[[2313,6]]},"433":{"position":[[262,5]]}}}],["itself",{"_index":1626,"t":{"336":{"position":[[1526,7]]},"355":{"position":[[1359,6]]},"380":{"position":[[156,6]]},"442":{"position":[[273,6]]},"448":{"position":[[255,7]]},"505":{"position":[[458,7]]},"596":{"position":[[1559,7]]}}}],["iu4qbkyj8ovxwz4fialxz_1a8docu2wc",{"_index":2190,"t":{"493":{"position":[[212,32],[445,32]]}}}],["javascript",{"_index":324,"t":{"32":{"position":[[161,10]]},"48":{"position":[[23,10],[151,10]]},"59":{"position":[[70,10],[1453,10],[1722,10]]},"171":{"position":[[23,10]]},"588":{"position":[[594,10]]}}}],["jitter",{"_index":2529,"t":{"598":{"position":[[344,7],[413,7]]},"626":{"position":[[239,6],[318,6]]}}}],["jitter=20",{"_index":2535,"t":{"598":{"position":[[583,9]]}}}],["jmeter",{"_index":1750,"t":{"357":{"position":[[416,7],[584,6],[787,6]]}}}],["join",{"_index":2487,"t":{"592":{"position":[[3,4]]}}}],["jq",{"_index":2247,"t":{"525":{"position":[[240,2]]}}}],["js",{"_index":505,"t":{"57":{"position":[[112,3],[256,2]]},"75":{"position":[[1414,2]]},"111":{"position":[[266,2],[425,2]]},"169":{"position":[[878,2]]},"648":{"position":[[796,2]]}}}],["json",{"_index":474,"t":{"53":{"position":[[447,4]]},"59":{"position":[[425,5]]},"616":{"position":[[278,4]]}}}],["judg",{"_index":2445,"t":{"582":{"position":[[506,6]]}}}],["jump",{"_index":1562,"t":{"332":{"position":[[1342,4]]}}}],["juri",{"_index":2447,"t":{"582":{"position":[[615,4]]}}}],["jurisdict",{"_index":2381,"t":{"566":{"position":[[826,13]]},"582":{"position":[[650,14]]}}}],["k",{"_index":384,"t":{"38":{"position":[[50,1],[128,1]]},"103":{"position":[[17,1]]},"105":{"position":[[584,1],[595,1],[771,1],[829,1]]},"390":{"position":[[346,1],[404,1]]}}}],["kademlia'",{"_index":2648,"t":{"638":{"position":[[587,10]]}}}],["kb",{"_index":1723,"t":{"355":{"position":[[293,3]]}}}],["kb/",{"_index":1966,"t":{"403":{"position":[[141,4],[446,4],[480,4]]},"405":{"position":[[34,4],[339,4],[373,4]]},"408":{"position":[[176,6],[217,6]]},"412":{"position":[[274,6],[315,6]]}}}],["keen",{"_index":2016,"t":{"423":{"position":[[94,4]]},"431":{"position":[[361,4]]},"433":{"position":[[55,4],[180,4]]}}}],["keep",{"_index":203,"t":{"20":{"position":[[279,4]]},"59":{"position":[[866,7]]},"99":{"position":[[113,4]]},"123":{"position":[[177,4]]},"322":{"position":[[411,4]]},"359":{"position":[[1708,5]]},"390":{"position":[[98,5]]},"436":{"position":[[888,4]]},"529":{"position":[[136,4]]},"622":{"position":[[1257,4],[1281,4]]},"648":{"position":[[1088,4],[1271,4]]}}}],["kept",{"_index":2463,"t":{"582":{"position":[[1742,4]]}}}],["key",{"_index":157,"t":{"18":{"position":[[43,3],[157,4],[258,3],[641,3],[1265,3],[1357,3]]},"20":{"position":[[31,3],[64,3],[157,4],[274,4],[353,3],[374,4],[521,3],[792,3],[996,3],[1440,3]]},"22":{"position":[[313,3],[536,4],[855,3],[935,4],[1292,3],[1360,3],[1587,3],[1655,3],[2045,3],[2134,3],[2388,3],[2815,3],[2896,3],[3078,3]]},"24":{"position":[[27,4],[140,4],[187,3],[269,3],[364,4],[554,4],[658,4],[796,4]]},"32":{"position":[[89,4],[172,3]]},"101":{"position":[[379,5],[456,3]]},"105":{"position":[[244,4]]},"257":{"position":[[7,3],[55,3]]},"269":{"position":[[121,4]]},"299":{"position":[[104,3]]},"312":{"position":[[118,3]]},"361":{"position":[[624,3],[687,3]]},"403":{"position":[[21,3]]},"505":{"position":[[136,3]]},"556":{"position":[[284,5],[346,3]]},"600":{"position":[[26,3],[144,3],[215,4],[258,3],[495,3],[546,3],[629,3],[728,3],[829,3],[846,3],[1015,3]]},"602":{"position":[[461,3],[488,3],[707,3],[734,3],[1058,3],[1197,3]]},"614":{"position":[[182,4]]},"618":{"position":[[232,3]]},"622":{"position":[[477,3],[507,3],[551,3],[585,3],[837,3],[849,3]]},"642":{"position":[[213,3],[239,3]]}}}],["key={index",{"_index":1067,"t":{"177":{"position":[[1263,11]]}}}],["key]@[domain",{"_index":110,"t":{"8":{"position":[[442,12]]},"556":{"position":[[603,12]]}}}],["kind",{"_index":2366,"t":{"566":{"position":[[146,5]]},"616":{"position":[[211,4]]}}}],["know",{"_index":549,"t":{"63":{"position":[[570,4]]},"85":{"position":[[50,4]]},"93":{"position":[[379,4]]}}}],["knowledg",{"_index":1233,"t":{"211":{"position":[[1280,9]]},"277":{"position":[[58,9]]},"380":{"position":[[427,9]]},"382":{"position":[[134,10]]}}}],["known",{"_index":849,"t":{"121":{"position":[[222,5]]},"326":{"position":[[2080,5]]},"380":{"position":[[732,5]]},"582":{"position":[[2160,5]]}}}],["l",{"_index":2274,"t":{"527":{"position":[[197,1]]}}}],["laid",{"_index":2132,"t":{"462":{"position":[[240,4]]}}}],["languag",{"_index":2464,"t":{"582":{"position":[[1765,8]]}}}],["laptop",{"_index":1384,"t":{"322":{"position":[[88,6]]},"326":{"position":[[600,7]]}}}],["larg",{"_index":1227,"t":{"211":{"position":[[1052,6],[1173,5]]},"306":{"position":[[123,5]]},"415":{"position":[[132,5]]}}}],["larger",{"_index":797,"t":{"113":{"position":[[567,6]]}}}],["last",{"_index":1014,"t":{"169":{"position":[[710,4]]},"450":{"position":[[0,4]]},"562":{"position":[[0,4]]},"596":{"position":[[1246,4]]},"644":{"position":[[690,4]]}}}],["lastmessag",{"_index":995,"t":{"167":{"position":[[628,11]]}}}],["late",{"_index":1878,"t":{"376":{"position":[[122,4]]}}}],["latenc",{"_index":793,"t":{"113":{"position":[[411,8]]},"195":{"position":[[279,8]]},"213":{"position":[[186,8]]},"310":{"position":[[136,7]]},"332":{"position":[[1376,7]]},"334":{"position":[[453,7]]},"336":{"position":[[1482,7]]},"410":{"position":[[24,7],[111,7],[697,7],[733,7]]},"442":{"position":[[569,7]]}}}],["latency=100m",{"_index":1582,"t":{"334":{"position":[[430,14]]}}}],["later",{"_index":1172,"t":{"193":{"position":[[929,5]]},"203":{"position":[[121,6]]},"394":{"position":[[292,6]]}}}],["latest",{"_index":503,"t":{"57":{"position":[[76,6]]},"109":{"position":[[354,6]]},"417":{"position":[[80,6]]},"446":{"position":[[140,6]]},"479":{"position":[[139,6]]},"523":{"position":[[92,6]]}}}],["latitud",{"_index":1720,"t":{"355":{"position":[[241,8]]}}}],["launch",{"_index":2218,"t":{"517":{"position":[[0,6]]}}}],["law",{"_index":2378,"t":{"566":{"position":[[708,4],[976,5]]},"574":{"position":[[639,4]]},"580":{"position":[[6,3],[145,4]]},"582":{"position":[[66,3]]}}}],["lawsuit",{"_index":2470,"t":{"582":{"position":[[2241,7]]}}}],["layer",{"_index":940,"t":{"144":{"position":[[248,5]]},"217":{"position":[[16,6]]},"219":{"position":[[46,7]]},"549":{"position":[[741,5],[824,5],[908,5]]}}}],["lead",{"_index":1262,"t":{"219":{"position":[[283,7]]},"390":{"position":[[722,5]]},"600":{"position":[[50,7]]}}}],["leaf",{"_index":812,"t":{"115":{"position":[[402,4]]}}}],["leak",{"_index":1237,"t":{"211":{"position":[[1551,4]]}}}],["learn",{"_index":484,"t":{"55":{"position":[[68,5],[183,5],[360,5],[495,5],[629,5],[763,5],[898,5],[1051,5],[1180,5],[1304,5],[1436,5]]},"59":{"position":[[494,5],[628,5]]},"63":{"position":[[515,5]]},"77":{"position":[[0,5]]},"81":{"position":[[413,5]]},"95":{"position":[[308,5]]},"115":{"position":[[537,8]]},"117":{"position":[[443,5]]},"138":{"position":[[533,5]]},"183":{"position":[[1594,5]]},"211":{"position":[[121,5]]},"495":{"position":[[779,5]]},"509":{"position":[[51,5]]},"521":{"position":[[840,5]]},"531":{"position":[[182,5]]},"533":{"position":[[174,5]]},"543":{"position":[[1465,5]]},"545":{"position":[[321,5]]},"588":{"position":[[80,5]]}}}],["leav",{"_index":1510,"t":{"326":{"position":[[2514,7]]},"444":{"position":[[658,7]]}}}],["led",{"_index":1592,"t":{"334":{"position":[[834,3]]}}}],["legal",{"_index":2103,"t":{"452":{"position":[[212,5]]},"454":{"position":[[184,5]]},"564":{"position":[[152,5]]},"566":{"position":[[431,9],[785,7],[1565,6]]},"574":{"position":[[93,5]]}}}],["legal@free.technolog",{"_index":2149,"t":{"468":{"position":[[89,22]]},"584":{"position":[[902,22]]}}}],["legisl",{"_index":2113,"t":{"454":{"position":[[230,12]]},"460":{"position":[[713,12]]},"462":{"position":[[269,12]]}}}],["legitim",{"_index":2116,"t":{"454":{"position":[[673,10]]}}}],["leobago",{"_index":1417,"t":{"324":{"position":[[175,8]]}}}],["less",{"_index":931,"t":{"142":{"position":[[263,5]]},"326":{"position":[[437,5],[1085,4],[1803,4]]},"332":{"position":[[237,4],[248,4]]},"638":{"position":[[623,4]]}}}],["let",{"_index":2207,"t":{"503":{"position":[[232,4]]}}}],["let'",{"_index":1046,"t":{"177":{"position":[[0,5]]},"332":{"position":[[0,5]]},"340":{"position":[[14,5]]},"602":{"position":[[1303,5]]}}}],["level",{"_index":673,"t":{"95":{"position":[[98,5]]},"233":{"position":[[68,5]]},"332":{"position":[[64,6]]},"359":{"position":[[1723,5]]},"403":{"position":[[743,6]]},"405":{"position":[[636,6]]},"460":{"position":[[297,5]]},"487":{"position":[[113,6]]},"503":{"position":[[99,5]]},"616":{"position":[[35,5],[76,5],[105,7]]}}}],["leverag",{"_index":1302,"t":{"249":{"position":[[57,9]]},"255":{"position":[[64,9]]},"423":{"position":[[137,8]]}}}],["liabil",{"_index":2147,"t":{"464":{"position":[[179,9]]},"574":{"position":[[73,10],[484,9],[572,9]]}}}],["liabl",{"_index":2416,"t":{"572":{"position":[[498,6]]},"574":{"position":[[20,6]]}}}],["lib",{"_index":2259,"t":{"525":{"position":[[533,4]]}}}],["libp2p",{"_index":80,"t":{"6":{"position":[[1285,7]]},"8":{"position":[[632,7],[938,7]]},"10":{"position":[[670,7]]},"14":{"position":[[185,6]]},"28":{"position":[[86,6]]},"30":{"position":[[195,7]]},"32":{"position":[[277,6]]},"119":{"position":[[655,6]]},"148":{"position":[[117,6]]},"197":{"position":[[126,6]]},"211":{"position":[[298,6]]},"219":{"position":[[60,6]]},"247":{"position":[[0,6]]},"312":{"position":[[30,7]]},"318":{"position":[[0,6]]},"355":{"position":[[723,8]]},"408":{"position":[[21,6],[150,6],[191,6]]},"505":{"position":[[172,6]]},"560":{"position":[[890,6]]},"618":{"position":[[318,6],[753,6]]}}}],["libp2p'",{"_index":1363,"t":{"314":{"position":[[75,8]]}}}],["libp2p.getp",{"_index":127,"t":{"12":{"position":[[66,17]]}}}],["libp2p/bootstrap",{"_index":124,"t":{"10":{"position":[[157,20]]}}}],["libpq",{"_index":2254,"t":{"525":{"position":[[372,5]]}}}],["libpq.5.dylib",{"_index":2265,"t":{"525":{"position":[[678,13]]}}}],["libpq5",{"_index":2246,"t":{"525":{"position":[[233,6]]}}}],["libpqisbusi",{"_index":1786,"t":{"359":{"position":[[3639,13]]}}}],["librari",{"_index":616,"t":{"83":{"position":[[450,10]]},"285":{"position":[[16,10]]},"427":{"position":[[47,9]]},"431":{"position":[[392,8]]},"525":{"position":[[130,8]]}}}],["licenc",{"_index":2410,"t":{"570":{"position":[[138,7],[342,8]]}}}],["licens",{"_index":2150,"t":{"468":{"position":[[129,8]]},"570":{"position":[[101,7]]},"584":{"position":[[942,8]]}}}],["light",{"_index":174,"t":{"18":{"position":[[699,5]]},"20":{"position":[[850,5]]},"22":{"position":[[1750,5]]},"42":{"position":[[169,5],[211,5]]},"55":{"position":[[338,5],[402,5],[424,5],[551,5]]},"61":{"position":[[88,5],[126,5]]},"63":{"position":[[47,5],[161,5]]},"69":{"position":[[191,7]]},"73":{"position":[[49,5],[413,5]]},"75":{"position":[[1356,5],[1408,5],[1421,5]]},"81":{"position":[[47,5],[151,5]]},"101":{"position":[[23,5]]},"121":{"position":[[800,5]]},"146":{"position":[[165,5]]},"150":{"position":[[47,5]]},"152":{"position":[[47,5],[161,5]]},"169":{"position":[[816,5]]},"175":{"position":[[297,5],[437,5],[604,5],[759,5],[841,5]]},"177":{"position":[[609,5],[1078,5]]},"179":{"position":[[387,5]]},"191":{"position":[[289,5]]},"201":{"position":[[23,5]]},"205":{"position":[[0,5],[321,5]]},"227":{"position":[[522,5]]},"243":{"position":[[34,5]]},"249":{"position":[[2,5]]},"251":{"position":[[0,5],[34,5]]},"267":{"position":[[57,5]]},"326":{"position":[[723,5],[1573,5],[1689,5]]},"374":{"position":[[245,5],[292,5],[455,5],[526,5],[615,5],[677,5],[717,5]]},"378":{"position":[[16,5]]},"386":{"position":[[934,5]]},"400":{"position":[[459,5]]},"436":{"position":[[549,5]]},"606":{"position":[[25,5]]},"608":{"position":[[25,5],[51,5],[163,5]]}}}],["lightn",{"_index":1919,"t":{"386":{"position":[[674,10]]}}}],["lightnodeprovid",{"_index":1029,"t":{"175":{"position":[[90,17],[246,17],[484,18],[535,20]]}}}],["lightpush",{"_index":116,"t":{"8":{"position":[[529,10]]},"10":{"position":[[550,10]]},"374":{"position":[[281,10],[990,10]]},"400":{"position":[[475,10]]},"410":{"position":[[452,9]]},"608":{"position":[[81,9],[245,9],[400,9]]},"618":{"position":[[1054,10]]},"630":{"position":[[145,9],[172,9],[253,9]]},"644":{"position":[[1139,9]]}}}],["lightpush.send",{"_index":583,"t":{"73":{"position":[[110,16]]}}}],["lightpush=tru",{"_index":2587,"t":{"608":{"position":[[119,14]]}}}],["lightpushnod",{"_index":2588,"t":{"608":{"position":[[191,13]]},"630":{"position":[[209,13]]}}}],["lightpushnode=/dns4/nod",{"_index":2590,"t":{"608":{"position":[[464,24]]}}}],["lightpushnode=[light",{"_index":2589,"t":{"608":{"position":[[309,20]]}}}],["lightpush|filter|px|store|storev2|storev3",{"_index":2656,"t":{"644":{"position":[[321,41]]}}}],["lightweight",{"_index":692,"t":{"97":{"position":[[924,11]]},"201":{"position":[[149,11]]},"243":{"position":[[158,11]]},"470":{"position":[[11,11]]}}}],["like",{"_index":2316,"t":{"549":{"position":[[364,5]]}}}],["limit",{"_index":336,"t":{"34":{"position":[[228,11]]},"59":{"position":[[1784,12]]},"77":{"position":[[182,12]]},"113":{"position":[[720,7]]},"123":{"position":[[143,11]]},"134":{"position":[[72,12]]},"138":{"position":[[281,8]]},"146":{"position":[[87,7]]},"191":{"position":[[73,7],[347,7]]},"199":{"position":[[60,5],[153,5]]},"201":{"position":[[245,7]]},"205":{"position":[[57,7]]},"211":{"position":[[1219,8],[1251,8]]},"213":{"position":[[293,7]]},"217":{"position":[[314,12]]},"223":{"position":[[418,5]]},"249":{"position":[[27,7]]},"277":{"position":[[5,5],[93,8]]},"281":{"position":[[9,7]]},"283":{"position":[[63,5],[135,5]]},"291":{"position":[[130,7]]},"297":{"position":[[137,7]]},"304":{"position":[[90,5],[149,7]]},"310":{"position":[[168,8]]},"316":{"position":[[259,7]]},"320":{"position":[[277,5]]},"322":{"position":[[917,8],[994,7],[1396,5]]},"326":{"position":[[2435,7],[2774,5]]},"328":{"position":[[125,11]]},"338":{"position":[[115,8]]},"340":{"position":[[586,7],[2006,5]]},"342":{"position":[[80,8],[185,5],[243,5],[514,5]]},"344":{"position":[[82,5],[272,8],[457,6],[554,5],[907,6]]},"347":{"position":[[83,5]]},"355":{"position":[[676,11]]},"396":{"position":[[110,5]]},"429":{"position":[[533,11]]},"444":{"position":[[519,7]]},"454":{"position":[[10,5]]},"456":{"position":[[19,7]]},"462":{"position":[[40,5]]},"566":{"position":[[190,10]]},"574":{"position":[[513,7],[558,10]]},"576":{"position":[[228,10]]},"582":{"position":[[570,8],[2039,12]]},"584":{"position":[[402,6]]},"638":{"position":[[392,5],[484,5]]},"644":{"position":[[36,5],[105,5],[683,6],[898,5],[1175,8]]}}}],["limit=\"100/1",{"_index":2664,"t":{"644":{"position":[[1042,14]]}}}],["limit=\"filter:8/5m",{"_index":2672,"t":{"644":{"position":[[1380,19]]}}}],["limit=\"lightpush:0/0",{"_index":2665,"t":{"644":{"position":[[1114,22]]}}}],["limit=\"px:10/1h",{"_index":2670,"t":{"644":{"position":[[1303,16]]}}}],["limit=\"store:130/1500m",{"_index":2666,"t":{"644":{"position":[[1191,24]]}}}],["line",{"_index":1485,"t":{"326":{"position":[[832,5]]},"497":{"position":[[83,4],[314,4]]},"499":{"position":[[51,4],[272,4]]},"501":{"position":[[510,4]]},"503":{"position":[[699,4]]},"531":{"position":[[141,4]]},"588":{"position":[[859,4]]},"614":{"position":[[85,4]]}}}],["linea",{"_index":2160,"t":{"475":{"position":[[30,5],[111,5]]},"511":{"position":[[48,5],[129,5]]}}}],["link",{"_index":701,"t":{"101":{"position":[[94,4]]},"219":{"position":[[275,7]]},"221":{"position":[[110,7],[364,6],[502,6]]},"227":{"position":[[407,4],[501,4]]},"336":{"position":[[827,5]]},"376":{"position":[[351,6]]},"403":{"position":[[68,5]]},"464":{"position":[[37,5]]},"525":{"position":[[670,4]]},"566":{"position":[[613,6]]},"572":{"position":[[39,5],[182,7]]}}}],["linkabl",{"_index":1284,"t":{"227":{"position":[[284,8]]}}}],["linux",{"_index":2233,"t":{"523":{"position":[[319,5]]},"525":{"position":[[169,5]]},"600":{"position":[[287,6],[462,6]]}}}],["list",{"_index":48,"t":{"6":{"position":[[23,4],[478,4],[881,4]]},"8":{"position":[[213,4],[239,4],[402,4]]},"10":{"position":[[257,4]]},"113":{"position":[[462,4],[574,4],[745,6],[880,8]]},"160":{"position":[[220,4]]},"162":{"position":[[191,4]]},"181":{"position":[[394,4]]},"213":{"position":[[416,4]]},"380":{"position":[[1096,4]]},"543":{"position":[[203,4]]},"556":{"position":[[190,4],[366,4],[884,5]]},"636":{"position":[[119,4]]}}}],["listen",{"_index":570,"t":{"69":{"position":[[1195,6]]},"83":{"position":[[619,6]]},"91":{"position":[[80,9]]},"93":{"position":[[358,9]]},"209":{"position":[[485,9]]},"257":{"position":[[86,9]]},"487":{"position":[[63,9]]},"489":{"position":[[40,9],[118,9],[359,9],[474,9]]},"495":{"position":[[668,9]]},"505":{"position":[[152,6]]},"543":{"position":[[1127,10]]},"588":{"position":[[1652,9]]},"602":{"position":[[286,9],[636,9]]},"604":{"position":[[229,9],[348,9],[793,9],[839,9]]},"618":{"position":[[258,6],[296,9],[383,9]]},"632":{"position":[[106,9],[163,9]]},"634":{"position":[[123,9],[188,9]]},"638":{"position":[[122,9]]},"642":{"position":[[114,9]]}}}],["litig",{"_index":2441,"t":{"582":{"position":[[277,10],[474,10]]}}}],["live",{"_index":1584,"t":{"334":{"position":[[541,4]]},"386":{"position":[[832,5]]},"398":{"position":[[162,4]]},"433":{"position":[[32,5]]}}}],["ln",{"_index":2268,"t":{"525":{"position":[[746,2]]}}}],["load",{"_index":821,"t":{"117":{"position":[[268,4]]},"146":{"position":[[536,4]]},"237":{"position":[[129,4]]},"517":{"position":[[144,6]]},"549":{"position":[[991,5]]},"614":{"position":[[43,5]]}}}],["local",{"_index":58,"t":{"6":{"position":[[383,5],[1432,5],[1579,8],[1635,7]]},"24":{"position":[[290,5]]},"32":{"position":[[57,5]]},"34":{"position":[[499,8]]},"355":{"position":[[223,7]]},"359":{"position":[[735,8]]},"364":{"position":[[636,5]]},"392":{"position":[[47,5]]},"446":{"position":[[214,7]]},"541":{"position":[[36,8]]},"543":{"position":[[181,7]]},"554":{"position":[[341,5]]},"560":{"position":[[515,5]]},"566":{"position":[[970,5]]},"602":{"position":[[887,5]]}}}],["localhost",{"_index":347,"t":{"34":{"position":[[516,9]]},"632":{"position":[[629,12]]}}}],["locat",{"_index":36,"t":{"4":{"position":[[90,6]]},"121":{"position":[[171,6]]},"187":{"position":[[35,8]]},"231":{"position":[[136,6]]},"265":{"position":[[30,7]]},"322":{"position":[[1560,9]]},"481":{"position":[[168,6]]},"521":{"position":[[101,8],[175,8],[349,8]]},"556":{"position":[[379,9]]},"588":{"position":[[1798,6]]}}}],["lock",{"_index":1865,"t":{"370":{"position":[[448,4]]}}}],["log",{"_index":298,"t":{"26":{"position":[[59,4]]},"28":{"position":[[47,4],[140,4]]},"30":{"position":[[16,4],[112,4],[167,4],[246,4]]},"32":{"position":[[14,4],[230,4],[290,4],[321,4]]},"36":{"position":[[435,3]]},"55":{"position":[[1357,4]]},"59":{"position":[[2044,4]]},"487":{"position":[[109,3],[177,4]]},"489":{"position":[[13,3],[73,3]]},"493":{"position":[[13,3],[82,3]]},"495":{"position":[[13,3],[85,3]]},"503":{"position":[[95,3],[179,7]]},"517":{"position":[[208,4],[281,4]]},"588":{"position":[[634,4],[693,4],[742,4],[1712,4]]},"616":{"position":[[31,3],[72,3],[162,3],[219,4]]},"634":{"position":[[238,7],[266,8]]}}}],["log(1000)/log(6",{"_index":1556,"t":{"332":{"position":[[1029,16]]}}}],["log(total_nodes)/log(d)=5",{"_index":2073,"t":{"442":{"position":[[492,25]]}}}],["logging.logformat.text",{"_index":2604,"t":{"616":{"position":[[173,22]]}}}],["logging.loglevel.info",{"_index":2600,"t":{"616":{"position":[[41,21]]}}}],["logic",{"_index":1312,"t":{"261":{"position":[[91,5]]}}}],["logo",{"_index":2099,"t":{"452":{"position":[[135,5],[238,5],[350,8],[417,5]]},"564":{"position":[[75,5],[179,5],[291,8],[368,5]]}}}],["long",{"_index":1225,"t":{"211":{"position":[[804,4],[1059,4]]},"332":{"position":[[1321,4]]},"340":{"position":[[233,4]]},"386":{"position":[[827,4]]},"431":{"position":[[721,4]]},"547":{"position":[[297,4]]},"596":{"position":[[278,4]]}}}],["longer",{"_index":2072,"t":{"442":{"position":[[321,8]]}}}],["look",{"_index":269,"t":{"24":{"position":[[175,4],[1076,4]]},"42":{"position":[[125,4]]},"55":{"position":[[7,4]]},"61":{"position":[[202,4]]},"63":{"position":[[459,4]]},"71":{"position":[[375,4]]},"75":{"position":[[1396,4]]},"81":{"position":[[357,4]]},"89":{"position":[[354,4]]},"95":{"position":[[266,4]]},"117":{"position":[[407,4]]},"138":{"position":[[634,4]]},"142":{"position":[[82,4],[299,4]]},"144":{"position":[[7,4]]},"169":{"position":[[860,4]]},"183":{"position":[[1320,4],[1488,4]]},"361":{"position":[[19,4]]},"489":{"position":[[0,4]]},"493":{"position":[[0,4]]},"495":{"position":[[0,4],[733,4]]},"505":{"position":[[633,4]]},"521":{"position":[[763,4]]},"531":{"position":[[221,4]]},"533":{"position":[[125,4]]},"543":{"position":[[1416,4]]},"549":{"position":[[1161,7]]},"568":{"position":[[37,7],[213,7],[549,7]]},"644":{"position":[[1557,4]]}}}],["lookup",{"_index":805,"t":{"115":{"position":[[4,6],[169,6],[320,6]]},"638":{"position":[[637,6]]}}}],["lose",{"_index":1648,"t":{"340":{"position":[[746,6],[1535,6]]}}}],["loss",{"_index":1731,"t":{"355":{"position":[[661,4]]}}}],["lost",{"_index":1729,"t":{"355":{"position":[[612,4],[930,4]]},"574":{"position":[[127,4]]}}}],["lot",{"_index":827,"t":{"117":{"position":[[569,4]]},"312":{"position":[[51,3]]}}}],["low",{"_index":792,"t":{"113":{"position":[[407,3],[420,3]]},"146":{"position":[[386,3]]},"191":{"position":[[99,3]]},"213":{"position":[[182,3],[195,3]]},"223":{"position":[[343,3]]},"322":{"position":[[475,4]]},"326":{"position":[[355,3],[546,3]]},"342":{"position":[[344,3]]},"364":{"position":[[559,3]]}}}],["lower",{"_index":1546,"t":{"332":{"position":[[487,5]]},"336":{"position":[[678,5],[1836,6],[2129,5]]}}}],["lowest",{"_index":1508,"t":{"326":{"position":[[2240,6],[2308,6],[2450,6]]}}}],["luckili",{"_index":2076,"t":{"444":{"position":[[132,8]]}}}],["m",{"_index":1533,"t":{"330":{"position":[[210,1],[284,2]]},"332":{"position":[[1859,1]]},"390":{"position":[[297,1],[397,2]]}}}],["machin",{"_index":1765,"t":{"359":{"position":[[936,7],[2008,7]]},"361":{"position":[[1066,7]]},"519":{"position":[[137,8]]}}}],["maco",{"_index":2234,"t":{"523":{"position":[[329,6]]},"525":{"position":[[175,5]]}}}],["made",{"_index":1408,"t":{"322":{"position":[[1261,5]]},"521":{"position":[[299,4]]},"566":{"position":[[1057,4]]},"570":{"position":[[33,4]]}}}],["magnitud",{"_index":1507,"t":{"326":{"position":[[2183,9],[3022,9]]}}}],["main",{"_index":1182,"t":{"195":{"position":[[301,4]]},"259":{"position":[[98,4]]},"322":{"position":[[912,4]]},"340":{"position":[[935,4]]},"417":{"position":[[87,4]]},"436":{"position":[[156,4],[579,4]]}}}],["main.jsx",{"_index":1028,"t":{"175":{"position":[[7,8]]}}}],["mainli",{"_index":1401,"t":{"322":{"position":[[986,7]]},"334":{"position":[[144,6]]}}}],["maintain",{"_index":1317,"t":{"275":{"position":[[155,8]]},"376":{"position":[[880,10]]},"421":{"position":[[142,8]]},"433":{"position":[[63,8]]},"458":{"position":[[128,8]]},"470":{"position":[[105,8]]},"549":{"position":[[414,8]]},"600":{"position":[[86,8]]},"622":{"position":[[1072,8]]}}}],["mainten",{"_index":1245,"t":{"213":{"position":[[374,11]]}}}],["major",{"_index":2272,"t":{"527":{"position":[[104,5]]}}}],["make",{"_index":1180,"t":{"195":{"position":[[191,4]]},"203":{"position":[[75,6]]},"227":{"position":[[237,6]]},"306":{"position":[[114,6],[153,5],[448,5]]},"342":{"position":[[399,4]]},"349":{"position":[[178,5]]},"357":{"position":[[433,4]]},"361":{"position":[[1462,6],[1569,6],[1840,6]]},"456":{"position":[[138,6]]},"515":{"position":[[242,4]]},"525":{"position":[[83,5]]},"529":{"position":[[24,4],[49,4],[121,4],[179,4]]},"533":{"position":[[24,4]]},"541":{"position":[[163,4]]},"566":{"position":[[367,4],[716,4]]},"582":{"position":[[97,4],[953,7]]},"648":{"position":[[638,4]]}}}],["malici",{"_index":1348,"t":{"306":{"position":[[477,9]]}}}],["manag",{"_index":152,"t":{"16":{"position":[[100,8]]},"42":{"position":[[38,6]]},"44":{"position":[[145,6]]},"46":{"position":[[1211,7]]},"51":{"position":[[59,8]]},"53":{"position":[[561,8]]},"55":{"position":[[1403,6],[1449,6]]},"59":{"position":[[2143,6],[2353,6]]},"132":{"position":[[262,10]]},"173":{"position":[[377,8]]},"235":{"position":[[68,10]]},"622":{"position":[[441,11]]}}}],["mani",{"_index":873,"t":{"126":{"position":[[184,4]]},"197":{"position":[[350,4]]},"223":{"position":[[89,4]]},"273":{"position":[[191,4]]},"279":{"position":[[213,4]]},"342":{"position":[[366,4]]},"370":{"position":[[362,4]]}}}],["manner",{"_index":1536,"t":{"330":{"position":[[429,7]]},"582":{"position":[[388,7]]}}}],["manual",{"_index":544,"t":{"59":{"position":[[2731,8]]},"359":{"position":[[872,6],[1944,6]]}}}],["map",{"_index":2300,"t":{"543":{"position":[[1060,8]]},"622":{"position":[[1577,3]]}}}],["margin",{"_index":1083,"t":{"177":{"position":[[1963,7],[2212,6],[2396,6]]}}}],["market",{"_index":2320,"t":{"549":{"position":[[851,7]]},"568":{"position":[[181,7],[620,6]]}}}],["marketplac",{"_index":2313,"t":{"549":{"position":[[242,13]]}}}],["master",{"_index":2271,"t":{"527":{"position":[[70,7]]}}}],["match",{"_index":356,"t":{"34":{"position":[[728,5]]},"193":{"position":[[588,5],[983,8],[1095,5]]},"374":{"position":[[885,5]]},"378":{"position":[[329,7]]}}}],["matrix",{"_index":1824,"t":{"364":{"position":[[54,7]]}}}],["matter",{"_index":1559,"t":{"332":{"position":[[1102,6]]},"427":{"position":[[330,6]]},"440":{"position":[[51,6]]},"566":{"position":[[1475,7]]},"568":{"position":[[437,7],[1123,7]]}}}],["max",{"_index":1986,"t":{"410":{"position":[[709,3]]},"618":{"position":[[708,3],[909,3],[978,3]]},"628":{"position":[[297,3],[400,3]]}}}],["maximum",{"_index":1373,"t":{"320":{"position":[[33,7],[109,7],[239,7]]},"322":{"position":[[1406,7],[1589,7]]},"326":{"position":[[69,7]]},"332":{"position":[[891,7]]},"340":{"position":[[1033,7]]},"344":{"position":[[182,7],[718,7]]},"355":{"position":[[0,7],[444,7],[1461,7]]},"566":{"position":[[669,7]]},"574":{"position":[[600,7]]},"618":{"position":[[727,7],[1108,7]]},"628":{"position":[[321,7],[418,7]]},"638":{"position":[[401,7],[492,7]]}}}],["maxmessages",{"_index":1686,"t":{"344":{"position":[[683,15]]}}}],["mayb",{"_index":630,"t":{"85":{"position":[[484,5]]}}}],["mb/gb",{"_index":2505,"t":{"596":{"position":[[543,6]]}}}],["mbp",{"_index":1375,"t":{"320":{"position":[[56,4],[289,4]]},"322":{"position":[[960,4],[1484,5],[1610,4]]},"324":{"position":[[93,4],[332,5],[428,4],[489,6],[503,6],[734,6],[755,6],[829,4],[844,4],[859,4]]},"326":{"position":[[1993,4],[2302,5],[2368,5],[2572,5],[2786,4]]},"340":{"position":[[1220,4],[1423,5],[1696,6]]},"344":{"position":[[1059,4],[1268,4]]}}}],["mean",{"_index":433,"t":{"46":{"position":[[1119,4]]},"193":{"position":[[140,5]]},"221":{"position":[[10,5]]},"326":{"position":[[1367,7],[1484,7]]},"330":{"position":[[573,5]]},"344":{"position":[[644,7],[706,7]]},"357":{"position":[[52,5]]},"440":{"position":[[228,5]]},"460":{"position":[[197,5]]},"562":{"position":[[362,5]]},"582":{"position":[[43,7]]},"584":{"position":[[760,4]]},"644":{"position":[[765,5]]},"648":{"position":[[447,5]]}}}],["meant",{"_index":1497,"t":{"326":{"position":[[1869,5]]}}}],["measur",{"_index":1282,"t":{"225":{"position":[[149,8]]},"330":{"position":[[716,8]]},"332":{"position":[[1406,8]]},"334":{"position":[[182,7],[514,13]]},"357":{"position":[[769,8]]},"398":{"position":[[105,7]]},"410":{"position":[[35,8]]},"412":{"position":[[112,12]]},"454":{"position":[[788,8]]},"458":{"position":[[101,8]]}}}],["mechan",{"_index":17,"t":{"2":{"position":[[198,10]]},"117":{"position":[[55,9]]},"121":{"position":[[146,9],[961,11]]},"132":{"position":[[416,10]]},"187":{"position":[[135,11],[187,10]]},"189":{"position":[[313,9]]},"223":{"position":[[226,9]]},"237":{"position":[[27,9]]},"239":{"position":[[34,9]]},"267":{"position":[[34,9]]},"289":{"position":[[25,9]]},"299":{"position":[[117,10]]},"314":{"position":[[28,10]]},"342":{"position":[[89,10]]},"372":{"position":[[185,11]]},"380":{"position":[[1170,10]]},"386":{"position":[[1084,10]]},"390":{"position":[[975,9]]},"436":{"position":[[53,9]]},"481":{"position":[[80,10]]},"549":{"position":[[682,9]]},"552":{"position":[[184,10]]},"588":{"position":[[1314,10]]},"592":{"position":[[136,11]]}}}],["media",{"_index":539,"t":{"59":{"position":[[2536,5],[2603,5]]},"549":{"position":[[1004,5],[1101,5]]}}}],["median",{"_index":1423,"t":{"324":{"position":[[287,6],[718,6],[741,6]]},"334":{"position":[[637,6]]}}}],["meet",{"_index":676,"t":{"95":{"position":[[225,4]]},"326":{"position":[[1208,4],[1544,7],[1608,7]]},"582":{"position":[[305,5]]}}}],["member",{"_index":775,"t":{"111":{"position":[[577,7]]},"211":{"position":[[1631,7]]},"436":{"position":[[906,7]]},"446":{"position":[[257,7],[344,7],[404,7]]}}}],["membership",{"_index":928,"t":{"142":{"position":[[213,10],[495,11]]},"344":{"position":[[295,11],[478,11]]},"436":{"position":[[367,10],[488,11]]},"517":{"position":[[130,10]]},"622":{"position":[[307,10],[772,10]]}}}],["memori",{"_index":1321,"t":{"281":{"position":[[110,7]]},"322":{"position":[[584,7]]},"340":{"position":[[1760,7]]},"438":{"position":[[366,6]]},"448":{"position":[[70,6]]},"596":{"position":[[897,6]]}}}],["mempool",{"_index":2321,"t":{"549":{"position":[[874,9]]}}}],["menduist",{"_index":1577,"t":{"334":{"position":[[250,9]]}}}],["mention",{"_index":1649,"t":{"340":{"position":[[835,7]]}}}],["merchant",{"_index":2368,"t":{"566":{"position":[[219,16]]}}}],["merg",{"_index":770,"t":{"111":{"position":[[489,5]]},"394":{"position":[[93,5]]}}}],["mesh",{"_index":823,"t":{"117":{"position":[[384,4]]},"121":{"position":[[368,5],[418,5]]},"334":{"position":[[237,5]]},"412":{"position":[[221,5]]}}}],["messag",{"_index":135,"t":{"14":{"position":[[114,8],[134,7],[444,7]]},"18":{"position":[[51,7],[325,9],[354,7],[383,7],[505,7],[584,7],[660,8],[685,7],[774,8],[815,7],[847,8],[972,7],[1058,8],[1157,8]]},"20":{"position":[[463,9],[489,7],[538,7],[653,7],[732,7],[811,8],[836,7],[925,8],[963,7],[1016,8],[1134,7],[1218,8],[1317,8],[1545,7]]},"22":{"position":[[0,7],[62,9],[102,8],[189,8],[458,7],[487,7],[871,8],[904,7],[990,7],[1145,8],[1235,7],[1311,8],[1376,8],[1445,8],[1527,7],[1606,8],[1671,8],[1727,8],[2190,7],[2404,8],[2465,7],[2553,8],[2717,7],[2786,7],[3014,7],[3206,7],[3264,7]]},"24":{"position":[[51,7],[1014,8]]},"42":{"position":[[154,8]]},"44":{"position":[[93,8],[241,7]]},"46":{"position":[[401,8],[681,7]]},"53":{"position":[[24,7],[142,7]]},"55":{"position":[[152,8],[213,8],[323,8],[390,8],[465,8],[539,8],[620,8],[718,8]]},"59":{"position":[[232,7],[382,9],[548,8],[589,8],[672,8],[753,9],[782,7],[879,8],[946,8],[1012,8],[1121,8]]},"61":{"position":[[107,8],[159,8]]},"63":{"position":[[588,9]]},"69":{"position":[[57,7],[235,7],[411,8],[520,7],[569,8],[1082,8],[1173,8]]},"71":{"position":[[26,7],[67,7],[130,7]]},"73":{"position":[[8,8],[83,7],[153,7],[249,8],[296,7],[399,7]]},"75":{"position":[[11,8],[78,7],[278,7],[710,8],[1179,8],[1315,8]]},"77":{"position":[[30,8]]},"83":{"position":[[57,7],[221,7],[430,8],[506,8],[597,8]]},"85":{"position":[[184,9],[589,8]]},"87":{"position":[[136,8],[336,9],[717,9]]},"89":{"position":[[26,7],[109,7]]},"91":{"position":[[40,9],[285,7],[356,7]]},"93":{"position":[[8,8],[53,7],[91,7],[187,8],[234,7],[340,7],[393,8],[512,8],[643,7],[760,10],[925,7],[1077,7],[1210,8]]},"95":{"position":[[66,8],[150,8],[203,8]]},"97":{"position":[[317,9],[420,7],[632,9]]},"103":{"position":[[172,9],[290,7],[454,7],[490,7],[614,7]]},"105":{"position":[[124,9],[407,8],[550,8]]},"111":{"position":[[338,7]]},"121":{"position":[[74,7],[460,8]]},"138":{"position":[[33,9],[95,10],[467,7]]},"150":{"position":[[98,8]]},"156":{"position":[[41,8],[75,7],[226,7]]},"158":{"position":[[142,9]]},"160":{"position":[[120,8],[291,7],[380,9],[448,9],[769,8]]},"162":{"position":[[90,8],[262,7],[348,9],[456,8],[530,8],[554,8],[778,8]]},"165":{"position":[[213,8],[312,8]]},"167":{"position":[[62,9],[132,8],[252,8],[461,8],[496,8],[755,8],[771,7]]},"169":{"position":[[57,8],[117,8],[294,8],[591,7],[656,7],[720,8],[802,8]]},"177":{"position":[[41,8],[67,9],[417,10],[678,7],[867,7],[1064,7],[1291,9],[1571,11],[1737,7],[1849,7],[2141,8],[2330,8]]},"179":{"position":[[8,8],[373,7],[496,7],[604,8],[647,7]]},"181":{"position":[[11,8],[138,9],[271,8],[313,9],[402,8]]},"183":{"position":[[11,8],[201,9],[337,8],[354,9],[430,8],[472,9],[567,8],[1341,8]]},"189":{"position":[[98,8],[150,7],[227,8]]},"191":{"position":[[206,9],[257,8],[312,7]]},"193":{"position":[[157,8],[251,8],[343,9],[444,8],[574,8],[661,7],[769,7],[915,8],[974,8],[1081,8]]},"197":{"position":[[89,8],[193,9]]},"199":{"position":[[162,8]]},"201":{"position":[[72,8],[416,9]]},"203":{"position":[[42,8],[206,8],[403,8]]},"205":{"position":[[167,9],[275,8]]},"207":{"position":[[5,7],[51,8],[205,7],[397,7],[506,8]]},"211":{"position":[[156,9],[219,8],[550,7],[619,9],[684,8],[866,10],[1020,9],[1387,7],[1497,8],[1586,7],[1696,8]]},"221":{"position":[[270,7],[323,8],[390,9]]},"223":{"position":[[94,9]]},"225":{"position":[[180,7]]},"233":{"position":[[40,8],[98,7]]},"243":{"position":[[83,8]]},"251":{"position":[[54,8]]},"261":{"position":[[28,7],[97,7],[228,7]]},"271":{"position":[[115,7]]},"273":{"position":[[47,9],[87,8],[131,8]]},"275":{"position":[[189,8]]},"279":{"position":[[98,7]]},"283":{"position":[[144,8]]},"287":{"position":[[56,8],[123,8]]},"293":{"position":[[5,7],[38,8]]},"295":{"position":[[5,7],[181,7]]},"297":{"position":[[58,9]]},"304":{"position":[[170,9]]},"310":{"position":[[128,7]]},"322":{"position":[[289,9]]},"328":{"position":[[77,7],[182,7],[262,7],[318,8],[416,7],[485,7],[558,8]]},"330":{"position":[[86,8],[166,8],[202,7],[339,8],[480,8],[586,7],[681,7],[779,7],[886,7],[1009,7]]},"332":{"position":[[17,7],[187,7],[391,7],[580,7],[683,7],[921,7],[1134,8],[1290,7],[1465,9],[1490,8],[1639,7],[1654,7],[1705,8],[1758,7],[1851,7],[1946,7],[2094,7]]},"334":{"position":[[73,7],[804,8],[855,9]]},"336":{"position":[[31,7],[167,7],[372,8],[783,7],[1062,8],[1207,8],[1518,7],[1554,7],[1599,9],[1683,9],[2179,7]]},"340":{"position":[[753,8],[814,9],[1250,8],[1542,9]]},"342":{"position":[[272,7],[371,8],[450,8],[535,8]]},"344":{"position":[[90,8],[200,8],[726,7],[830,8],[942,7],[1117,7]]},"347":{"position":[[58,8],[146,7],[237,8]]},"349":{"position":[[48,7]]},"355":{"position":[[161,8],[271,7],[381,9],[599,8],[653,7],[779,8],[916,8],[950,7],[1031,8]]},"359":{"position":[[219,8],[428,8]]},"361":{"position":[[310,8],[452,7],[1426,8],[1533,8],[1803,8]]},"374":{"position":[[863,8],[947,8],[1035,7]]},"378":{"position":[[53,8],[303,7],[316,7],[508,9]]},"382":{"position":[[377,8]]},"394":{"position":[[35,9],[183,9],[215,8]]},"396":{"position":[[121,7]]},"400":{"position":[[265,7],[347,8]]},"403":{"position":[[179,7],[196,7],[301,7],[579,9],[729,9]]},"405":{"position":[[72,7],[89,7],[194,7],[472,9],[622,9]]},"408":{"position":[[82,8],[119,7]]},"410":{"position":[[4,7],[68,7],[202,8],[226,7],[244,7],[677,7],[713,7]]},"412":{"position":[[69,7],[227,7],[325,7]]},"436":{"position":[[395,7],[722,8],[786,8]]},"440":{"position":[[74,8],[208,7],[267,8],[476,8]]},"442":{"position":[[172,7],[302,7],[413,8]]},"444":{"position":[[473,8]]},"446":{"position":[[304,9]]},"448":{"position":[[180,8]]},"473":{"position":[[190,8]]},"505":{"position":[[332,9],[423,8],[450,7]]},"507":{"position":[[240,9]]},"517":{"position":[[59,9]]},"521":{"position":[[231,8]]},"545":{"position":[[115,9]]},"547":{"position":[[156,9],[371,10]]},"549":{"position":[[471,7]]},"596":{"position":[[10,7],[151,8],[212,7],[283,8],[712,7],[764,8],[904,7],[1030,7],[1092,7],[1221,8],[1319,7],[1365,7],[1524,8],[1551,7],[1675,8],[1719,9]]},"598":{"position":[[393,7]]},"604":{"position":[[506,7],[1201,7]]},"606":{"position":[[265,8],[454,8]]},"608":{"position":[[268,8],[423,8]]},"614":{"position":[[202,7]]},"622":{"position":[[1105,7]]},"624":{"position":[[133,7],[170,7],[354,7],[449,7],[556,7]]},"626":{"position":[[298,7]]},"628":{"position":[[137,8]]},"630":{"position":[[276,8]]},"632":{"position":[[262,7]]},"648":{"position":[[678,8]]}}}],["message'",{"_index":1223,"t":{"211":{"position":[[750,9]]}}}],["message/payload",{"_index":970,"t":{"160":{"position":[[540,15]]},"162":{"position":[[655,15]]}}}],["message/proto",{"_index":691,"t":{"97":{"position":[[752,13]]}}}],["messageid",{"_index":659,"t":{"93":{"position":[[558,9],[689,10],[891,10],[1043,10]]}}}],["messageindex\\\"\\ndetail",{"_index":1808,"t":{"361":{"position":[[661,25]]}}}],["messageobj",{"_index":596,"t":{"75":{"position":[[334,10],[382,10]]}}}],["messages.map((messag",{"_index":1066,"t":{"177":{"position":[[1222,23]]}}}],["messages.push(wakumessag",{"_index":993,"t":{"167":{"position":[[303,27]]}}}],["messages/minut",{"_index":2083,"t":{"444":{"position":[[487,16]]}}}],["messages[messages.length",{"_index":996,"t":{"167":{"position":[[642,24]]}}}],["messagespromis",{"_index":977,"t":{"162":{"position":[[482,16]]}}}],["messagespromises.map(async",{"_index":980,"t":{"162":{"position":[[584,26]]}}}],["messeng",{"_index":2307,"t":{"549":{"position":[[5,11],[1033,11]]}}}],["meta",{"_index":1205,"t":{"207":{"position":[[238,4]]}}}],["metadata",{"_index":671,"t":{"95":{"position":[[19,8]]},"293":{"position":[[110,8]]},"618":{"position":[[1072,9]]}}}],["metal",{"_index":1766,"t":{"359":{"position":[[944,6],[2016,6]]},"361":{"position":[[1074,6]]}}}],["method",{"_index":35,"t":{"4":{"position":[[56,6],[226,6]]},"14":{"position":[[161,8],[270,6],[471,8]]},"18":{"position":[[1326,7]]},"20":{"position":[[1480,8]]},"22":{"position":[[352,7],[3129,7]]},"24":{"position":[[1060,8]]},"59":{"position":[[1066,8],[1492,6]]},"63":{"position":[[444,7],[526,7]]},"81":{"position":[[342,7],[424,7]]},"109":{"position":[[63,8]]},"113":{"position":[[287,6]]},"132":{"position":[[221,7]]},"154":{"position":[[28,6]]},"160":{"position":[[73,6],[310,8]]},"162":{"position":[[281,8]]},"179":{"position":[[282,6]]},"211":{"position":[[383,6],[577,7]]},"231":{"position":[[109,7]]},"259":{"position":[[117,6]]},"261":{"position":[[202,7]]},"295":{"position":[[169,7]]},"304":{"position":[[131,7]]},"372":{"position":[[98,7]]},"388":{"position":[[17,7]]},"497":{"position":[[66,8],[265,6]]},"499":{"position":[[86,8]]},"501":{"position":[[471,6]]},"503":{"position":[[660,6]]},"531":{"position":[[341,7]]},"582":{"position":[[1602,7]]},"588":{"position":[[776,7],[969,7]]},"602":{"position":[[32,6]]},"618":{"position":[[460,6]]},"644":{"position":[[1588,7]]}}}],["metric",{"_index":1662,"t":{"340":{"position":[[1948,6]]},"398":{"position":[[52,7]]},"403":{"position":[[37,7]]},"448":{"position":[[151,7]]},"503":{"position":[[171,7]]},"507":{"position":[[258,7]]},"517":{"position":[[85,7]]},"519":{"position":[[75,7]]},"634":{"position":[[31,7],[63,7],[90,7],[148,7],[163,7],[215,7],[230,7],[258,7]]}}}],["mgs/epoch",{"_index":1676,"t":{"344":{"position":[[371,9]]}}}],["migrat",{"_index":943,"t":{"144":{"position":[[407,7]]},"624":{"position":[[567,9],[598,9]]},"646":{"position":[[112,9]]},"648":{"position":[[590,7],[1305,9]]}}}],["million",{"_index":1747,"t":{"357":{"position":[[233,7]]}}}],["min",{"_index":2674,"t":{"644":{"position":[[1476,4]]}}}],["mind",{"_index":700,"t":{"99":{"position":[[121,5]]},"123":{"position":[[185,5]]}}}],["mine",{"_index":1854,"t":{"370":{"position":[[133,5]]}}}],["miner",{"_index":1853,"t":{"370":{"position":[[93,6],[168,6]]},"376":{"position":[[459,6]]}}}],["mini",{"_index":2067,"t":{"440":{"position":[[381,4]]}}}],["minim",{"_index":469,"t":{"53":{"position":[[384,9]]},"431":{"position":[[545,7]]}}}],["minimum",{"_index":2232,"t":{"523":{"position":[[246,7]]}}}],["minor",{"_index":1590,"t":{"334":{"position":[[771,5]]},"448":{"position":[[159,5]]}}}],["minu",{"_index":1967,"t":{"403":{"position":[[146,6]]},"405":{"position":[[39,6]]}}}],["minut",{"_index":2091,"t":{"446":{"position":[[421,7]]},"626":{"position":[[114,7]]},"628":{"position":[[182,7]]}}}],["misbehav",{"_index":1833,"t":{"364":{"position":[[274,11]]}}}],["misbehaviour",{"_index":1867,"t":{"370":{"position":[[532,13]]}}}],["miss",{"_index":960,"t":{"158":{"position":[[135,6]]},"203":{"position":[[199,6]]},"287":{"position":[[116,6]]},"364":{"position":[[580,4]]}}}],["mitig",{"_index":1344,"t":{"306":{"position":[[219,10]]}}}],["mix",{"_index":1980,"t":{"410":{"position":[[368,5],[773,5]]}}}],["mkdir",{"_index":2267,"t":{"525":{"position":[[716,5]]}}}],["mobil",{"_index":1143,"t":{"187":{"position":[[315,6]]},"253":{"position":[[192,6]]},"326":{"position":[[1751,7]]}}}],["model",{"_index":1253,"t":{"217":{"position":[[140,6]]},"306":{"position":[[509,5]]},"388":{"position":[[100,5]]}}}],["modern",{"_index":320,"t":{"32":{"position":[[122,6]]}}}],["modif",{"_index":1522,"t":{"326":{"position":[[2957,14]]},"334":{"position":[[777,12]]}}}],["modifi",{"_index":254,"t":{"22":{"position":[[2678,6]]},"32":{"position":[[46,6]]},"113":{"position":[[478,9]]},"177":{"position":[[77,6],[1888,6]]},"179":{"position":[[48,6]]},"213":{"position":[[430,9]]},"334":{"position":[[127,8]]},"466":{"position":[[7,6]]},"570":{"position":[[168,6]]},"578":{"position":[[7,6]]},"584":{"position":[[386,7]]}}}],["modular",{"_index":1139,"t":{"187":{"position":[[81,7]]},"195":{"position":[[13,7]]},"247":{"position":[[12,7]]},"310":{"position":[[206,7]]},"374":{"position":[[49,7]]}}}],["monetari",{"_index":1827,"t":{"364":{"position":[[85,8],[151,8],[192,8]]},"368":{"position":[[337,8]]},"370":{"position":[[54,8],[297,8],[411,8]]},"376":{"position":[[221,8],[289,8],[674,8],[725,8]]}}}],["money",{"_index":1940,"t":{"390":{"position":[[645,6]]}}}],["monitor",{"_index":2154,"t":{"470":{"position":[[93,7]]},"473":{"position":[[221,10]]},"507":{"position":[[317,7]]},"509":{"position":[[76,8]]},"519":{"position":[[46,10]]},"535":{"position":[[132,10]]}}}],["more",{"_index":519,"t":{"59":{"position":[[500,5]]},"63":{"position":[[521,4]]},"81":{"position":[[419,4]]},"95":{"position":[[314,5]]},"105":{"position":[[459,4]]},"117":{"position":[[449,5]]},"134":{"position":[[91,4]]},"138":{"position":[[539,4]]},"140":{"position":[[420,4]]},"162":{"position":[[45,4]]},"183":{"position":[[1600,5]]},"187":{"position":[[361,5]]},"199":{"position":[[320,4]]},"211":{"position":[[1492,4]]},"271":{"position":[[178,5]]},"304":{"position":[[290,4]]},"306":{"position":[[722,4],[810,4]]},"326":{"position":[[370,4]]},"332":{"position":[[289,4],[1503,4],[1609,4]]},"336":{"position":[[745,4],[981,4],[2373,4]]},"349":{"position":[[295,4]]},"355":{"position":[[1162,4]]},"359":{"position":[[278,4],[1438,4],[2196,4],[2533,4],[2809,4]]},"361":{"position":[[1634,4],[1700,4],[1911,4]]},"376":{"position":[[561,4]]},"386":{"position":[[773,4],[807,4],[856,4],[1129,4]]},"388":{"position":[[4,4]]},"390":{"position":[[837,4]]},"392":{"position":[[9,4]]},"403":{"position":[[775,4]]},"405":{"position":[[668,4]]},"531":{"position":[[188,4]]},"543":{"position":[[726,4]]},"545":{"position":[[298,4]]},"592":{"position":[[85,4]]}}}],["moreov",{"_index":1846,"t":{"368":{"position":[[253,9]]},"386":{"position":[[1095,9]]}}}],["mostli",{"_index":1156,"t":{"191":{"position":[[116,6]]},"253":{"position":[[0,6]]},"316":{"position":[[235,6]]},"326":{"position":[[935,6]]}}}],["motiv",{"_index":2155,"t":{"470":{"position":[[246,12]]}}}],["mount",{"_index":1709,"t":{"349":{"position":[[226,7]]},"355":{"position":[[96,8]]}}}],["move",{"_index":1208,"t":{"209":{"position":[[16,4]]}}}],["mpb",{"_index":1501,"t":{"326":{"position":[[2025,5],[2461,5]]}}}],["mpt=ipt_1+ipt_2+ipt_3+ipt_4",{"_index":1569,"t":{"332":{"position":[[1971,27]]}}}],["ms",{"_index":1529,"t":{"328":{"position":[[383,3]]},"336":{"position":[[1113,3],[1233,3],[1318,3]]}}}],["msg",{"_index":982,"t":{"162":{"position":[[626,3]]}}}],["msg/",{"_index":1974,"t":{"408":{"position":[[226,5]]}}}],["msg/10",{"_index":1977,"t":{"408":{"position":[[246,7]]}}}],["msg/second",{"_index":1692,"t":{"344":{"position":[[1009,10],[1241,10]]}}}],["msg1",{"_index":1166,"t":{"193":{"position":[[382,4],[638,4],[752,5],[859,4],[1054,4]]}}}],["msgs/epoch",{"_index":1678,"t":{"344":{"position":[[394,10],[417,10]]}}}],["msgs/sec",{"_index":1739,"t":{"355":{"position":[[1138,9],[1224,8]]}}}],["mu",{"_index":1605,"t":{"336":{"position":[[304,2]]}}}],["much",{"_index":1669,"t":{"342":{"position":[[324,4]]},"355":{"position":[[1157,4]]},"359":{"position":[[3007,4]]},"368":{"position":[[231,4]]},"442":{"position":[[385,4]]}}}],["multi",{"_index":96,"t":{"6":{"position":[[1613,5]]},"549":{"position":[[556,5],[587,5]]}}}],["multiaddr",{"_index":49,"t":{"6":{"position":[[31,9],[290,13]]},"36":{"position":[[209,9]]},"40":{"position":[[114,9]]},"113":{"position":[[257,10]]},"148":{"position":[[68,9],[288,11]]},"154":{"position":[[539,9]]},"183":{"position":[[1103,9]]},"554":{"position":[[213,9],[247,9]]},"560":{"position":[[200,9],[340,9]]},"594":{"position":[[167,10],[550,9]]},"596":{"position":[[1609,10]]},"600":{"position":[[71,11]]},"606":{"position":[[332,10]]},"608":{"position":[[340,10]]},"610":{"position":[[140,9],[163,9],[206,10],[243,9],[317,9],[436,9]]},"618":{"position":[[557,9],[649,9]]},"620":{"position":[[89,10],[182,10]]},"622":{"position":[[1196,9]]},"628":{"position":[[95,9]]},"630":{"position":[[232,9]]},"640":{"position":[[139,9]]}}}],["multiaddr=[multiaddr",{"_index":2596,"t":{"610":{"position":[[271,20]]}}}],["multiaddress",{"_index":2614,"t":{"618":{"position":[[576,14],[693,14]]},"624":{"position":[[93,12]]}}}],["multimedia",{"_index":2323,"t":{"549":{"position":[[1137,10]]}}}],["multipl",{"_index":723,"t":{"103":{"position":[[191,8]]},"105":{"position":[[377,8]]},"121":{"position":[[937,8]]},"191":{"position":[[145,8]]},"209":{"position":[[284,8]]},"322":{"position":[[380,8]]},"330":{"position":[[605,8]]},"332":{"position":[[599,8]]},"355":{"position":[[355,8]]},"378":{"position":[[213,8]]},"382":{"position":[[317,8]]},"394":{"position":[[72,8]]},"444":{"position":[[454,8]]},"552":{"position":[[160,8]]},"554":{"position":[[117,8]]},"556":{"position":[[495,8]]},"558":{"position":[[249,8]]},"592":{"position":[[112,8]]},"644":{"position":[[649,8]]}}}],["multipli",{"_index":1651,"t":{"340":{"position":[[1270,10]]}}}],["mvp",{"_index":2037,"t":{"431":{"position":[[38,3],[334,4]]}}}],["my_private_key.pem",{"_index":2546,"t":{"600":{"position":[[683,18],[747,18]]}}}],["n",{"_index":1718,"t":{"355":{"position":[[105,3]]},"361":{"position":[[951,1]]},"390":{"position":[[228,2],[394,2]]}}}],["n1",{"_index":1567,"t":{"332":{"position":[[1891,2]]}}}],["n5",{"_index":1568,"t":{"332":{"position":[[1909,2]]}}}],["n_1...n_i",{"_index":1535,"t":{"330":{"position":[[249,9]]}}}],["name",{"_index":111,"t":{"8":{"position":[[455,7]]},"34":{"position":[[745,5]]},"87":{"position":[[29,5]]},"97":{"position":[[125,5],[150,4],[341,5],[360,4]]},"113":{"position":[[144,5],[341,4],[499,5],[614,5],[684,5]]},"189":{"position":[[22,4]]},"239":{"position":[[116,5]]},"340":{"position":[[119,4]]},"499":{"position":[[175,5],[301,4]]},"501":{"position":[[78,4]]},"556":{"position":[[275,4],[403,4],[431,4],[508,4],[616,5],[640,4],[657,4],[708,4],[1105,4],[1143,4]]},"594":{"position":[[34,4],[112,4],[248,5],[287,4],[444,4],[584,5],[744,4],[851,4],[912,4]]},"600":{"position":[[663,4]]},"610":{"position":[[385,4]]},"614":{"position":[[0,4]]},"616":{"position":[[0,4]]},"618":{"position":[[0,4]]},"620":{"position":[[0,4],[110,4],[149,4],[242,4],[258,4]]},"622":{"position":[[0,4]]},"624":{"position":[[0,4]]},"626":{"position":[[0,4]]},"628":{"position":[[0,4]]},"630":{"position":[[2,4]]},"632":{"position":[[0,4]]},"634":{"position":[[0,4]]},"636":{"position":[[0,4],[175,4],[214,4]]},"638":{"position":[[0,4]]},"640":{"position":[[0,4]]},"642":{"position":[[0,4]]},"644":{"position":[[0,4]]},"648":{"position":[[395,5]]}}}],["name=[domain",{"_index":2493,"t":{"594":{"position":[[235,12]]}}}],["name=nwakunode.com",{"_index":2494,"t":{"594":{"position":[[371,18]]}}}],["name}/{encod",{"_index":679,"t":{"97":{"position":[[96,16]]}}}],["name}/{version}/{cont",{"_index":678,"t":{"97":{"position":[[65,24]]}}}],["nascent",{"_index":2015,"t":{"423":{"position":[[10,7]]}}}],["nat",{"_index":2290,"t":{"543":{"position":[[597,4]]},"610":{"position":[[365,3]]},"618":{"position":[[444,3]]}}}],["nat=ani",{"_index":2291,"t":{"543":{"position":[[604,7]]}}}],["nat=extip:[your",{"_index":2288,"t":{"543":{"position":[[544,15]]}}}],["nativ",{"_index":328,"t":{"34":{"position":[[15,6]]},"48":{"position":[[84,7],[125,6]]},"171":{"position":[[84,7],[125,6]]},"370":{"position":[[47,6],[464,6]]},"376":{"position":[[29,6]]}}}],["natur",{"_index":888,"t":{"132":{"position":[[307,7]]},"582":{"position":[[908,6]]}}}],["nearest",{"_index":1421,"t":{"324":{"position":[[256,7]]}}}],["necessari",{"_index":1882,"t":{"376":{"position":[[814,9]]},"431":{"position":[[436,9],[574,9]]},"515":{"position":[[251,9]]}}}],["need",{"_index":79,"t":{"6":{"position":[[1237,7]]},"24":{"position":[[332,4]]},"34":{"position":[[956,4]]},"63":{"position":[[561,5]]},"79":{"position":[[93,7]]},"87":{"position":[[4,4],[235,4]]},"105":{"position":[[568,6]]},"113":{"position":[[521,4]]},"126":{"position":[[229,4]]},"179":{"position":[[40,4]]},"181":{"position":[[43,4]]},"183":{"position":[[38,4]]},"322":{"position":[[243,4]]},"332":{"position":[[2136,4],[2199,4]]},"340":{"position":[[1648,5]]},"342":{"position":[[592,5]]},"347":{"position":[[435,6]]},"425":{"position":[[219,5],[424,6]]},"440":{"position":[[284,4]]},"446":{"position":[[543,4]]},"454":{"position":[[306,4],[403,6]]},"470":{"position":[[239,6]]},"485":{"position":[[27,4]]},"525":{"position":[[20,4]]},"547":{"position":[[116,4]]},"648":{"position":[[169,4],[310,4],[629,4]]}}}],["neglig",{"_index":2090,"t":{"446":{"position":[[376,11]]},"574":{"position":[[54,11]]}}}],["negoti",{"_index":1283,"t":{"225":{"position":[[325,11]]},"380":{"position":[[127,11],[489,12]]},"382":{"position":[[211,11],[287,10]]},"384":{"position":[[217,11]]}}}],["neighbor",{"_index":1837,"t":{"364":{"position":[[528,9],[672,10]]}}}],["neighbour",{"_index":2355,"t":{"560":{"position":[[948,12]]}}}],["neighbourhood",{"_index":947,"t":{"146":{"position":[[365,14]]}}}],["netflix",{"_index":1429,"t":{"324":{"position":[[437,7]]},"326":{"position":[[2119,7]]}}}],["network",{"_index":11,"t":{"2":{"position":[[113,7],[371,8],[497,7]]},"14":{"position":[[314,8]]},"34":{"position":[[154,7]]},"40":{"position":[[22,10]]},"44":{"position":[[71,8]]},"46":{"position":[[1060,7]]},"55":{"position":[[1643,8],[1769,7]]},"59":{"position":[[900,8],[1422,7],[2495,8]]},"63":{"position":[[85,8],[631,7]]},"65":{"position":[[36,7]]},"67":{"position":[[92,8]]},"69":{"position":[[599,7],[682,7],[748,7],[861,7]]},"73":{"position":[[31,7]]},"75":{"position":[[841,7],[907,7],[1020,7],[1338,7]]},"81":{"position":[[85,8]]},"85":{"position":[[92,8],[658,7]]},"93":{"position":[[1233,7]]},"103":{"position":[[40,7]]},"111":{"position":[[606,7]]},"113":{"position":[[354,8]]},"117":{"position":[[78,8],[336,8]]},"121":{"position":[[197,8],[446,7]]},"136":{"position":[[99,7]]},"138":{"position":[[9,7],[43,7],[559,8],[577,8]]},"140":{"position":[[82,8],[200,7],[351,8],[467,8]]},"142":{"position":[[548,8]]},"144":{"position":[[108,8],[190,7],[434,7]]},"146":{"position":[[222,8],[293,7]]},"148":{"position":[[426,8]]},"152":{"position":[[85,8]]},"154":{"position":[[410,8],[689,8]]},"179":{"position":[[153,7],[671,7]]},"183":{"position":[[974,8],[1253,8]]},"185":{"position":[[87,7]]},"187":{"position":[[67,8]]},"189":{"position":[[60,8],[167,8],[247,8]]},"193":{"position":[[91,8],[171,7]]},"197":{"position":[[327,7]]},"199":{"position":[[202,8],[277,7]]},"201":{"position":[[197,8]]},"203":{"position":[[66,8],[435,8]]},"205":{"position":[[297,8],[408,7]]},"207":{"position":[[72,8],[477,7]]},"209":{"position":[[43,7],[150,7]]},"211":{"position":[[427,8],[704,8],[1348,7]]},"225":{"position":[[353,8]]},"231":{"position":[[63,8],[162,8]]},"237":{"position":[[161,7]]},"241":{"position":[[136,8]]},"243":{"position":[[206,8]]},"245":{"position":[[94,8]]},"247":{"position":[[20,7],[141,7]]},"249":{"position":[[101,8]]},"251":{"position":[[76,7]]},"253":{"position":[[153,8]]},"255":{"position":[[83,7]]},"263":{"position":[[58,7]]},"265":{"position":[[89,8]]},"267":{"position":[[122,8]]},"269":{"position":[[54,7]]},"271":{"position":[[64,7]]},"279":{"position":[[190,7]]},"283":{"position":[[201,7]]},"287":{"position":[[72,8],[157,8]]},"289":{"position":[[17,7]]},"291":{"position":[[258,8]]},"293":{"position":[[59,8]]},"295":{"position":[[114,8]]},"297":{"position":[[9,7],[68,7]]},"306":{"position":[[671,7]]},"310":{"position":[[285,7]]},"314":{"position":[[215,8],[298,8]]},"326":{"position":[[415,7],[443,7],[738,7],[1139,7]]},"328":{"position":[[102,7],[141,7]]},"332":{"position":[[1066,7]]},"334":{"position":[[481,8]]},"336":{"position":[[109,7]]},"338":{"position":[[35,7]]},"340":{"position":[[1171,8],[1617,7]]},"342":{"position":[[104,7],[646,8]]},"344":{"position":[[233,7],[601,7],[983,8]]},"366":{"position":[[40,8]]},"368":{"position":[[23,8]]},"370":{"position":[[80,8]]},"372":{"position":[[35,8]]},"374":{"position":[[125,8],[1056,8]]},"376":{"position":[[106,9],[550,7],[837,7]]},"388":{"position":[[295,7]]},"398":{"position":[[167,8]]},"403":{"position":[[512,7]]},"405":{"position":[[405,7]]},"408":{"position":[[65,7]]},"410":{"position":[[132,7],[289,7]]},"412":{"position":[[44,7],[147,7]]},"415":{"position":[[143,8],[170,7]]},"436":{"position":[[280,7]]},"438":{"position":[[117,7]]},"442":{"position":[[561,7]]},"444":{"position":[[441,7],[600,7]]},"481":{"position":[[187,7]]},"495":{"position":[[831,8]]},"507":{"position":[[212,7]]},"521":{"position":[[333,8]]},"543":{"position":[[883,7]]},"547":{"position":[[31,7],[320,8]]},"549":{"position":[[983,7]]},"552":{"position":[[108,8]]},"560":{"position":[[925,7],[1018,7]]},"592":{"position":[[17,8]]},"596":{"position":[[44,7]]},"604":{"position":[[61,8]]},"618":{"position":[[199,7],[611,8]]},"622":{"position":[[1528,7],[1560,8]]},"638":{"position":[[250,8]]}}}],["networkconfig",{"_index":557,"t":{"63":{"position":[[870,14]]},"65":{"position":[[185,14]]},"69":{"position":[[769,13],[958,14],[1021,15]]},"75":{"position":[[928,13]]}}}],["never",{"_index":1936,"t":{"390":{"position":[[372,5]]}}}],["new",{"_index":420,"t":{"46":{"position":[[397,3]]},"57":{"position":[[83,5],[202,3]]},"71":{"position":[[182,3]]},"73":{"position":[[79,3],[149,3]]},"75":{"position":[[706,3]]},"89":{"position":[[161,3]]},"93":{"position":[[87,3]]},"109":{"position":[[13,3]]},"169":{"position":[[188,3],[218,3]]},"177":{"position":[[919,3]]},"179":{"position":[[492,3]]},"183":{"position":[[563,3]]},"193":{"position":[[911,3]]},"390":{"position":[[583,3],[764,3]]},"415":{"position":[[52,3]]},"433":{"position":[[206,3],[340,3],[400,3]]},"436":{"position":[[613,3],[731,3],[825,3]]},"466":{"position":[[148,3]]},"505":{"position":[[127,3]]},"543":{"position":[[15,3]]},"549":{"position":[[1122,4]]},"578":{"position":[[174,3]]},"600":{"position":[[15,3]]},"648":{"position":[[79,3],[1182,3]]}}}],["newer",{"_index":465,"t":{"53":{"position":[[350,5]]},"646":{"position":[[159,5]]}}}],["newli",{"_index":1121,"t":{"183":{"position":[[186,5]]},"370":{"position":[[127,5]]}}}],["newseq[protectedshard](0",{"_index":2598,"t":{"614":{"position":[[134,25]]}}}],["next",{"_index":421,"t":{"46":{"position":[[461,5]]},"55":{"position":[[962,4]]},"107":{"position":[[53,4]]},"109":{"position":[[164,5]]},"167":{"position":[[169,4],[742,4]]},"173":{"position":[[286,5]]},"175":{"position":[[579,5]]},"177":{"position":[[1882,5]]},"349":{"position":[[16,4]]},"355":{"position":[[323,4]]},"359":{"position":[[364,4],[815,4],[1887,4]]}}}],["nft",{"_index":2312,"t":{"549":{"position":[[238,3],[285,3]]}}}],["nim",{"_index":1695,"t":{"347":{"position":[[4,3]]},"361":{"position":[[219,3],[1121,3]]},"470":{"position":[[34,3]]}}}],["node",{"_index":5,"t":{"2":{"position":[[58,4],[180,4],[214,4],[266,4],[325,5],[395,5],[514,5]]},"4":{"position":[[193,4],[239,4]]},"6":{"position":[[58,4],[205,4],[235,4],[332,4],[718,4],[752,4],[851,4],[1114,4],[1157,5],[1254,4],[1464,5],[1647,4],[1660,4]]},"8":{"position":[[15,4],[234,4],[397,4],[473,4],[570,4],[601,4],[738,4],[876,4],[907,4]]},"10":{"position":[[28,4],[494,4],[591,4],[639,4]]},"12":{"position":[[51,4],[174,4],[303,4]]},"14":{"position":[[213,4],[221,4]]},"34":{"position":[[1069,4]]},"36":{"position":[[195,4]]},"42":{"position":[[77,4]]},"46":{"position":[[1255,4]]},"55":{"position":[[408,5],[557,5],[1026,5],[1079,4],[1488,4],[1538,4],[1597,5],[1667,5],[1786,5]]},"59":{"position":[[1442,6],[1583,5],[1653,5],[2722,5],[2753,4]]},"61":{"position":[[94,4]]},"63":{"position":[[53,4],[167,4],[178,4],[301,4],[390,4],[481,5],[547,6],[556,4],[771,4],[815,4]]},"65":{"position":[[98,4],[130,4]]},"67":{"position":[[53,4]]},"81":{"position":[[53,4],[157,4],[168,4],[288,4],[379,5],[445,6]]},"85":{"position":[[9,4],[67,4]]},"87":{"position":[[702,4]]},"113":{"position":[[39,4],[208,4],[582,5],[752,5]]},"115":{"position":[[151,4],[301,4]]},"117":{"position":[[232,6],[305,5],[374,5]]},"119":{"position":[[72,4]]},"121":{"position":[[25,5],[284,4],[736,4]]},"138":{"position":[[439,6]]},"140":{"position":[[330,5],[425,4]]},"142":{"position":[[111,4],[166,4]]},"144":{"position":[[91,4],[133,4]]},"146":{"position":[[171,5],[205,5],[301,5],[451,5],[554,6]]},"148":{"position":[[383,6]]},"150":{"position":[[53,4]]},"152":{"position":[[53,4],[167,4],[178,4]]},"154":{"position":[[51,4],[290,5],[352,4],[398,4],[425,4],[573,4],[634,4]]},"158":{"position":[[100,5],[177,5]]},"160":{"position":[[99,5]]},"162":{"position":[[120,5]]},"169":{"position":[[822,4]]},"175":{"position":[[303,4],[443,4],[610,4],[765,4],[778,5],[819,6],[847,4],[901,4],[952,4]]},"177":{"position":[[615,4],[628,5]]},"179":{"position":[[294,4],[343,5]]},"181":{"position":[[362,5]]},"183":{"position":[[401,5],[521,5],[887,5],[937,4],[962,4],[989,4],[1137,4],[1198,4]]},"187":{"position":[[50,5]]},"191":{"position":[[336,5]]},"193":{"position":[[287,4],[353,4],[421,4],[522,4],[621,4],[682,4],[692,4],[721,4],[729,4],[807,5],[832,4],[840,4],[867,4],[941,4],[1025,4],[1033,4]]},"197":{"position":[[355,5]]},"201":{"position":[[29,5]]},"203":{"position":[[294,4]]},"205":{"position":[[46,5]]},"209":{"position":[[345,6],[416,5],[457,5],[524,6],[608,5]]},"211":{"position":[[145,5],[326,4],[334,4],[1442,5],[1747,5]]},"213":{"position":[[58,4],[170,5],[254,4],[328,5],[411,4]]},"215":{"position":[[61,4],[122,5]]},"227":{"position":[[164,5],[398,4],[492,4],[528,4]]},"231":{"position":[[46,4]]},"235":{"position":[[124,6]]},"239":{"position":[[146,4]]},"241":{"position":[[9,4],[77,6],[191,4]]},"243":{"position":[[40,5]]},"249":{"position":[[8,4],[75,5]]},"251":{"position":[[40,5]]},"255":{"position":[[2,4]]},"257":{"position":[[2,4],[141,5]]},"263":{"position":[[23,5]]},"265":{"position":[[25,4]]},"267":{"position":[[63,5],[109,5]]},"269":{"position":[[37,4]]},"271":{"position":[[42,5]]},"279":{"position":[[218,5]]},"291":{"position":[[168,4]]},"306":{"position":[[620,4]]},"314":{"position":[[46,6],[261,4]]},"320":{"position":[[154,5]]},"322":{"position":[[69,4],[312,4],[536,5],[834,5],[881,4]]},"326":{"position":[[400,6],[591,5],[642,5],[1197,4],[1501,4],[1534,5],[1598,5]]},"328":{"position":[[43,5]]},"330":{"position":[[148,5],[243,5],[325,4],[441,5],[542,5],[640,6],[760,4],[804,4]]},"332":{"position":[[220,6],[321,5],[337,5],[429,4],[522,5],[780,5],[865,5],[953,5],[1084,5],[1115,4],[1175,6],[1217,5],[1392,6],[1535,5],[1689,4],[1886,4],[2057,4]]},"334":{"position":[[720,5]]},"336":{"position":[[581,4],[633,5],[911,4],[1346,5],[1477,4],[1730,6],[1933,4],[2096,4]]},"340":{"position":[[327,5],[380,4],[707,4],[1154,5],[1329,4],[1888,4]]},"347":{"position":[[13,5],[118,5],[276,5]]},"349":{"position":[[264,4]]},"355":{"position":[[38,4],[109,5],[140,5],[209,5],[364,5],[758,5],[1115,4],[1190,4],[1488,4]]},"357":{"position":[[102,4],[163,4],[265,4],[347,4],[493,5],[530,5],[706,4]]},"359":{"position":[[102,4],[684,5],[1234,4]]},"361":{"position":[[100,5],[228,5],[1130,5],[1705,6]]},"364":{"position":[[172,4],[217,5],[516,5],[574,5],[645,4],[699,4]]},"374":{"position":[[402,4],[485,4],[591,5],[621,5],[667,4],[683,4]]},"403":{"position":[[275,6],[333,6],[380,6],[399,4],[549,6]]},"405":{"position":[[168,6],[226,6],[273,6],[292,4],[442,6]]},"408":{"position":[[16,4],[54,4]]},"410":{"position":[[89,6],[343,5],[386,6],[417,6],[489,5],[545,6],[561,5],[596,5],[757,6],[784,6],[830,6]]},"412":{"position":[[59,5],[165,5]]},"436":{"position":[[334,6]]},"438":{"position":[[134,5]]},"440":{"position":[[246,4]]},"442":{"position":[[459,5]]},"444":{"position":[[387,6],[588,4],[651,6]]},"448":{"position":[[25,5]]},"470":{"position":[[64,5],[124,5]]},"473":{"position":[[30,4],[105,4],[237,4]]},"475":{"position":[[240,5]]},"477":{"position":[[109,4],[179,4]]},"481":{"position":[[10,4],[106,4],[151,4]]},"483":{"position":[[119,4],[130,4],[196,4],[259,5]]},"485":{"position":[[170,4]]},"487":{"position":[[23,5],[160,4],[204,4]]},"489":{"position":[[144,5]]},"491":{"position":[[8,4],[66,4]]},"493":{"position":[[162,5],[410,4]]},"495":{"position":[[168,5],[406,4],[720,5]]},"497":{"position":[[5,5]]},"499":{"position":[[0,4],[234,4]]},"501":{"position":[[0,5],[316,4],[344,4]]},"503":{"position":[[0,5]]},"505":{"position":[[91,4],[131,4],[598,4],[645,4]]},"507":{"position":[[104,4],[198,4],[299,4],[329,5]]},"509":{"position":[[23,4],[105,5]]},"511":{"position":[[191,4],[276,5]]},"517":{"position":[[32,5],[220,4]]},"519":{"position":[[70,4]]},"521":{"position":[[11,4],[317,4],[555,4],[712,4],[775,4]]},"523":{"position":[[52,4]]},"531":{"position":[[255,4],[322,4]]},"533":{"position":[[137,4]]},"535":{"position":[[60,4]]},"537":{"position":[[149,4],[234,5]]},"543":{"position":[[230,4],[866,4],[1214,4],[1381,4],[1428,4]]},"552":{"position":[[56,4],[148,4]]},"554":{"position":[[40,4],[290,4]]},"556":{"position":[[35,5],[126,4],[185,4],[828,4],[879,4]]},"558":{"position":[[28,5],[115,4],[160,5],[205,5],[465,4],[863,4]]},"560":{"position":[[35,5],[126,4],[183,4],[224,4],[405,5],[459,5],[476,5],[555,4],[640,4],[961,6]]},"588":{"position":[[21,5],[124,5],[179,4],[314,5],[349,4],[434,5],[509,5],[553,4],[650,4],[688,4],[808,6],[839,5],[950,4],[1052,4],[1087,4],[1134,4],[1259,4],[1349,6],[1429,5],[1577,5],[1647,4],[1754,4],[1810,4]]},"590":{"position":[[56,4]]},"592":{"position":[[26,5]]},"594":{"position":[[85,4],[333,5],[398,5],[424,5],[494,5],[926,5]]},"596":{"position":[[268,4],[869,4],[1163,4],[1489,4],[1650,4]]},"600":{"position":[[0,5],[1010,4]]},"602":{"position":[[47,5],[221,4],[416,4],[841,4],[1001,4],[1375,5]]},"604":{"position":[[47,4],[176,4],[998,4],[1145,4]]},"606":{"position":[[228,4],[414,4]]},"608":{"position":[[229,4],[381,4]]},"612":{"position":[[23,4]]},"618":{"position":[[64,4],[84,4],[150,4],[219,4]]},"632":{"position":[[510,4]]},"636":{"position":[[70,5],[114,4]]},"638":{"position":[[73,5],[83,4],[145,4],[180,4],[216,5],[419,5],[510,5]]},"640":{"position":[[129,4]]},"644":{"position":[[1503,4],[1569,4]]},"646":{"position":[[82,5]]},"648":{"position":[[241,4],[898,4],[1034,5],[1098,4]]}}}],["node'",{"_index":1286,"t":{"227":{"position":[[425,6]]},"269":{"position":[[107,6]]},"306":{"position":[[80,6]]},"364":{"position":[[309,6],[384,6]]},"376":{"position":[[367,6]]},"481":{"position":[[180,6]]},"588":{"position":[[1606,6],[1705,6]]},"594":{"position":[[141,6],[771,6]]},"620":{"position":[[280,6]]}}}],["node.createdecod",{"_index":615,"t":{"83":{"position":[[323,20]]}}}],["node.createencod",{"_index":614,"t":{"83":{"position":[[265,20]]}}}],["node.dial(multiaddr",{"_index":85,"t":{"6":{"position":[[1372,22]]}}}],["node.events.addeventlistener(\"waku:health",{"_index":625,"t":{"85":{"position":[[250,43]]}}}],["node.filter.createsubscript",{"_index":416,"t":{"46":{"position":[[224,32]]},"75":{"position":[[533,32]]}}}],["node.filter.createsubscription(networkconfig",{"_index":600,"t":{"75":{"position":[[1062,46]]}}}],["node.lightpush.send(eciesencod",{"_index":245,"t":{"22":{"position":[[1952,33]]}}}],["node.lightpush.send(encod",{"_index":176,"t":{"18":{"position":[[716,28]]},"20":{"position":[[867,28]]},"73":{"position":[[430,28]]}}}],["node.lightpush.send(symmetricencod",{"_index":243,"t":{"22":{"position":[[1838,37]]}}}],["node.start",{"_index":547,"t":{"63":{"position":[[242,13]]},"152":{"position":[[242,13]]}}}],["node.stop",{"_index":548,"t":{"63":{"position":[[315,12]]}}}],["node.store.querygenerator([decod",{"_index":976,"t":{"162":{"position":[[403,37]]},"165":{"position":[[520,35]]},"169":{"position":[[495,35]]}}}],["node.store.querywithorderedcallback([decod",{"_index":185,"t":{"18":{"position":[[1189,46]]},"20":{"position":[[1349,46]]},"160":{"position":[[635,46]]},"165":{"position":[[434,46]]},"167":{"position":[[543,46],[833,46]]},"169":{"position":[[409,46]]}}}],["node.waitforp",{"_index":129,"t":{"12":{"position":[[238,20]]},"67":{"position":[[8,19],[148,20]]},"154":{"position":[[8,19]]}}}],["node.waitforpeers([protocols.lightpush",{"_index":564,"t":{"67":{"position":[[370,39]]}}}],["node.waitforpeers([protocols.stor",{"_index":951,"t":{"154":{"position":[[171,37]]}}}],["node=/ip4/0.0.0.0/tcp/60000/p2p/16uiu2hamlce6zvqcs6kmqqrbbhyojjfyzgr1q3thtsbykzibqkfr",{"_index":2353,"t":{"560":{"position":[[751,85]]}}}],["node=[discv5",{"_index":2347,"t":{"558":{"position":[[342,12],[399,12]]}}}],["node=[p",{"_index":2350,"t":{"560":{"position":[[329,10]]}}}],["node=enr",{"_index":2348,"t":{"558":{"position":[[608,9]]}}}],["node_a",{"_index":1745,"t":{"357":{"position":[[84,7],[321,7],[671,6]]}}}],["node_b",{"_index":1746,"t":{"357":{"position":[[145,7],[403,7],[628,6]]}}}],["node_c",{"_index":1748,"t":{"357":{"position":[[247,7],[499,7]]}}}],["node_d",{"_index":1749,"t":{"357":{"position":[[329,7],[511,8]]}}}],["node_opt",{"_index":1033,"t":{"175":{"position":[[322,12]]}}}],["node_requir",{"_index":113,"t":{"8":{"position":[[497,17],[686,20],[1018,19]]},"10":{"position":[[518,17],[755,20]]}}}],["nodej",{"_index":302,"t":{"26":{"position":[[109,6]]},"30":{"position":[[38,7]]},"55":{"position":[[1161,6],[1250,6]]},"59":{"position":[[1691,6],[1762,6],[1878,6]]},"123":{"position":[[96,6],[258,7]]},"126":{"position":[[54,6],[157,6],[210,7]]},"130":{"position":[[98,6]]},"132":{"position":[[94,7],[169,6],[338,7],[455,6]]},"134":{"position":[[28,6]]},"136":{"position":[[29,6],[119,6]]}}}],["nodekey",{"_index":2537,"t":{"600":{"position":[[157,7]]},"618":{"position":[[207,7]]}}}],["nodekey=286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8",{"_index":2552,"t":{"600":{"position":[[1050,72]]}}}],["nodekey=[nod",{"_index":2538,"t":{"600":{"position":[[193,13]]}}}],["nodelearn",{"_index":2302,"t":{"545":{"position":[[288,9]]}}}],["nodes=1000",{"_index":1589,"t":{"334":{"position":[[698,11]]}}}],["nois",{"_index":137,"t":{"14":{"position":[[192,5]]},"59":{"position":[[1049,5]]},"211":{"position":[[305,5]]},"225":{"position":[[204,5],[278,5]]},"299":{"position":[[5,5],[41,5]]}}}],["non",{"_index":1848,"t":{"368":{"position":[[333,3]]},"376":{"position":[[585,3]]},"400":{"position":[[333,3]]},"410":{"position":[[495,3],[575,3],[804,3]]},"566":{"position":[[274,3]]},"572":{"position":[[419,3]]}}}],["none",{"_index":2508,"t":{"596":{"position":[[600,4]]},"618":{"position":[[527,5]]},"624":{"position":[[332,4]]}}}],["nonetheless",{"_index":2131,"t":{"462":{"position":[[117,12]]}}}],["normal",{"_index":1740,"t":{"355":{"position":[[1176,6],[1513,6]]}}}],["north",{"_index":1431,"t":{"324":{"position":[[542,5]]},"326":{"position":[[2678,5]]}}}],["note",{"_index":333,"t":{"34":{"position":[[194,4]]},"79":{"position":[[45,4]]},"219":{"position":[[156,4]]},"312":{"position":[[162,7]]},"322":{"position":[[1156,4]]},"324":{"position":[[212,5]]},"326":{"position":[[1588,4],[2901,5]]},"332":{"position":[[260,4]]},"334":{"position":[[274,4]]},"336":{"position":[[202,4],[356,5],[1693,4]]},"344":{"position":[[756,5]]},"429":{"position":[[317,4]]},"431":{"position":[[339,4],[408,4]]},"497":{"position":[[216,4]]},"521":{"position":[[271,4]]},"543":{"position":[[846,4]]},"582":{"position":[[520,4]]}}}],["noth",{"_index":2045,"t":{"431":{"position":[[831,7]]},"448":{"position":[[232,7]]},"566":{"position":[[1628,7]]}}}],["notic",{"_index":1560,"t":{"332":{"position":[[1182,6]]},"349":{"position":[[156,6]]},"359":{"position":[[658,6],[2119,6],[2456,6],[2732,6],[3472,7],[3733,6]]},"466":{"position":[[81,7]]},"568":{"position":[[1392,6]]},"578":{"position":[[87,7]]},"582":{"position":[[870,6],[1108,6]]},"616":{"position":[[133,7]]}}}],["notif",{"_index":688,"t":{"97":{"position":[[601,13]]},"103":{"position":[[147,13],[652,12]]}}}],["notificationpayload",{"_index":729,"t":{"103":{"position":[[462,19],[632,19]]}}}],["novemb",{"_index":1790,"t":{"359":{"position":[[3820,8]]}}}],["now",{"_index":648,"t":{"87":{"position":[[480,3]]},"148":{"position":[[339,3]]},"334":{"position":[[918,5]]},"446":{"position":[[35,3]]},"648":{"position":[[165,3]]}}}],["npm",{"_index":101,"t":{"8":{"position":[[88,3],[97,3]]},"16":{"position":[[109,3],[118,3]]},"51":{"position":[[68,3],[77,3]]},"53":{"position":[[570,3],[579,3]]},"59":{"position":[[107,4]]},"79":{"position":[[0,3]]},"109":{"position":[[72,3]]},"173":{"position":[[160,3],[169,3],[386,3],[395,3]]}}}],["npx",{"_index":748,"t":{"109":{"position":[[81,3],[334,3]]}}}],["ns1.google.com",{"_index":2295,"t":{"543":{"position":[[680,15]]}}}],["nullifi",{"_index":903,"t":{"138":{"position":[[290,11]]},"199":{"position":[[66,10]]},"211":{"position":[[1228,10],[1260,9]]},"223":{"position":[[424,10]]},"277":{"position":[[11,10]]},"283":{"position":[[69,10]]},"304":{"position":[[96,10]]},"310":{"position":[[177,10]]}}}],["num",{"_index":2636,"t":{"622":{"position":[[1514,3]]}}}],["number",{"_index":606,"t":{"77":{"position":[[172,6]]},"87":{"position":[[198,6]]},"105":{"position":[[618,6]]},"211":{"position":[[1686,6]]},"213":{"position":[[318,6]]},"306":{"position":[[129,6]]},"322":{"position":[[1474,6]]},"324":{"position":[[228,7]]},"326":{"position":[[131,7],[310,7],[2232,7],[2912,6]]},"355":{"position":[[452,6]]},"359":{"position":[[452,7]]},"440":{"position":[[466,6]]},"442":{"position":[[335,6]]},"446":{"position":[[319,8]]},"618":{"position":[[436,7],[743,6]]},"622":{"position":[[1536,6]]},"628":{"position":[[329,6],[426,6]]},"644":{"position":[[410,6]]}}}],["numer",{"_index":1219,"t":{"211":{"position":[[103,8]]}}}],["nutshel",{"_index":1345,"t":{"306":{"position":[[308,9]]}}}],["nwaku",{"_index":88,"t":{"6":{"position":[[1458,5]]},"26":{"position":[[179,6]]},"34":{"position":[[0,5]]},"36":{"position":[[189,5]]},"40":{"position":[[333,6]]},"55":{"position":[[1397,5]]},"59":{"position":[[1818,5],[2115,5]]},"128":{"position":[[128,5]]},"134":{"position":[[137,5]]},"136":{"position":[[53,5]]},"144":{"position":[[23,5],[85,5]]},"211":{"position":[[1787,5]]},"328":{"position":[[37,5]]},"330":{"position":[[941,5]]},"334":{"position":[[103,5],[677,5],[749,5]]},"347":{"position":[[19,6],[197,5],[282,5]]},"349":{"position":[[34,5],[197,5],[258,5]]},"357":{"position":[[96,5],[157,5],[259,5],[341,5],[524,5]]},"359":{"position":[[678,5],[795,5],[1798,5],[1818,5],[3220,5],[3369,5]]},"361":{"position":[[1390,5],[1497,5],[1767,5]]},"403":{"position":[[49,5]]},"415":{"position":[[56,5]]},"417":{"position":[[52,5]]},"419":{"position":[[4,5],[196,5]]},"436":{"position":[[328,5]]},"444":{"position":[[366,5]]},"470":{"position":[[0,5],[130,5]]},"473":{"position":[[99,5]]},"477":{"position":[[78,5],[246,5]]},"479":{"position":[[146,5]]},"487":{"position":[[29,5]]},"489":{"position":[[67,5]]},"491":{"position":[[2,5]]},"493":{"position":[[76,5]]},"495":{"position":[[79,5],[714,5]]},"505":{"position":[[85,5]]},"507":{"position":[[0,5],[98,5]]},"511":{"position":[[185,5]]},"513":{"position":[[55,5]]},"517":{"position":[[26,5],[156,5],[289,5]]},"521":{"position":[[5,5],[80,5],[157,5],[706,5],[863,5]]},"523":{"position":[[46,5],[154,6],[289,6],[296,5]]},"525":{"position":[[9,6]]},"527":{"position":[[166,5]]},"529":{"position":[[10,5]]},"531":{"position":[[0,5],[207,6],[249,5],[264,5],[296,5]]},"533":{"position":[[83,5],[197,5]]},"535":{"position":[[54,5],[166,5]]},"537":{"position":[[143,5]]},"539":{"position":[[4,5]]},"541":{"position":[[136,5]]},"543":{"position":[[4,5],[261,5],[1375,5],[1488,5]]},"552":{"position":[[50,5],[142,5]]},"554":{"position":[[34,5],[284,5]]},"556":{"position":[[29,5],[728,5],[822,5]]},"558":{"position":[[22,5],[459,5],[857,5]]},"560":{"position":[[29,5],[399,5],[549,5],[634,5],[842,5]]},"588":{"position":[[45,5],[173,5],[343,5],[503,5],[547,5],[644,5],[750,6],[802,5],[833,5],[1046,5],[1343,5],[1423,5],[1600,5]]},"590":{"position":[[50,5]]},"592":{"position":[[97,5]]},"594":{"position":[[327,5]]},"596":{"position":[[1157,5],[1421,5],[1644,5]]},"600":{"position":[[1023,6]]},"602":{"position":[[101,5],[835,5],[995,5],[1369,5]]},"604":{"position":[[0,5],[992,5],[1139,5]]},"606":{"position":[[10,5],[138,5],[408,5]]},"608":{"position":[[10,5],[152,5],[375,5]]},"610":{"position":[[117,5]]},"618":{"position":[[144,5]]},"646":{"position":[[27,6]]}}}],["nwaku'",{"_index":2687,"t":{"648":{"position":[[765,7]]}}}],["nwaku+postgr",{"_index":1714,"t":{"353":{"position":[[89,14]]}}}],["nwaku+sqlit",{"_index":1715,"t":{"353":{"position":[[108,13]]}}}],["nwakunode.com",{"_index":392,"t":{"40":{"position":[[197,13],[255,14]]},"594":{"position":[[292,14]]}}}],["o",{"_index":2293,"t":{"543":{"position":[[656,1]]}}}],["o.myaddr.l.google.com",{"_index":2294,"t":{"543":{"position":[[658,21]]}}}],["object",{"_index":582,"t":{"73":{"position":[[91,6],[161,6]]},"91":{"position":[[232,6]]},"93":{"position":[[99,6]]},"146":{"position":[[12,9]]},"179":{"position":[[504,6]]},"462":{"position":[[831,6]]}}}],["oblig",{"_index":2120,"t":{"460":{"position":[[7,7]]},"566":{"position":[[1222,10]]}}}],["observ",{"_index":1526,"t":{"328":{"position":[[301,7],[399,7]]}}}],["obtain",{"_index":933,"t":{"142":{"position":[[348,6]]},"144":{"position":[[153,8]]},"227":{"position":[[256,8]]},"306":{"position":[[357,6]]},"359":{"position":[[833,8],[1905,8]]},"361":{"position":[[1036,8]]}}}],["occasion",{"_index":403,"t":{"44":{"position":[[0,13]]},"253":{"position":[[115,12]]}}}],["occur",{"_index":1042,"t":{"175":{"position":[[887,6]]},"460":{"position":[[669,5]]},"622":{"position":[[965,5]]}}}],["oceania",{"_index":1458,"t":{"324":{"position":[[657,7]]},"326":{"position":[[2737,7]]}}}],["oct",{"_index":1427,"t":{"324":{"position":[[372,3]]}}}],["off",{"_index":1177,"t":{"195":{"position":[[108,4]]}}}],["offer",{"_index":819,"t":{"117":{"position":[[194,6]]},"185":{"position":[[43,6]]},"217":{"position":[[23,5]]},"225":{"position":[[227,5]]},"342":{"position":[[318,5],[566,6]]},"549":{"position":[[298,6]]},"566":{"position":[[1685,5],[1725,5]]}}}],["offic",{"_index":2101,"t":{"452":{"position":[[190,6]]},"564":{"position":[[130,6]]}}}],["offlin",{"_index":623,"t":{"85":{"position":[[199,8]]},"191":{"position":[[123,7]]},"203":{"position":[[156,7]]},"253":{"position":[[7,7],[64,7]]},"287":{"position":[[90,7]]}}}],["offline/resourc",{"_index":1367,"t":{"316":{"position":[[242,16]]}}}],["offset",{"_index":2530,"t":{"598":{"position":[[363,6]]},"626":{"position":[[268,6]]}}}],["old",{"_index":2675,"t":{"646":{"position":[[45,3]]}}}],["older",{"_index":464,"t":{"53":{"position":[[340,5]]},"648":{"position":[[1109,5]]}}}],["oldest",{"_index":984,"t":{"162":{"position":[[771,6]]},"165":{"position":[[132,6],[305,6]]}}}],["omit",{"_index":1000,"t":{"167":{"position":[[947,4]]},"336":{"position":[[409,8]]},"556":{"position":[[685,4]]},"596":{"position":[[645,4],[926,4]]},"602":{"position":[[309,4]]},"604":{"position":[[278,4],[394,4],[528,4]]},"606":{"position":[[709,4]]}}}],["on",{"_index":27,"t":{"2":{"position":[[345,4]]},"55":{"position":[[1617,4]]},"205":{"position":[[202,3]]},"273":{"position":[[184,3]]},"322":{"position":[[147,3]]},"326":{"position":[[1497,3]]},"332":{"position":[[123,3],[846,3]]},"340":{"position":[[301,3],[956,3],[1015,3]]},"357":{"position":[[92,3],[153,3],[255,3],[337,3]]},"361":{"position":[[61,3]]},"374":{"position":[[451,3]]},"427":{"position":[[301,3]]},"436":{"position":[[346,3]]},"444":{"position":[[400,3]]},"497":{"position":[[286,3]]},"574":{"position":[[532,4]]},"582":{"position":[[1652,3],[2085,3]]},"618":{"position":[[514,3]]},"644":{"position":[[521,3],[695,3]]},"646":{"position":[[361,4]]}}}],["onboard",{"_index":2052,"t":{"433":{"position":[[328,7]]}}}],["onc",{"_index":850,"t":{"121":{"position":[[246,4]]},"231":{"position":[[72,4]]},"336":{"position":[[2329,4]]},"403":{"position":[[678,4]]},"405":{"position":[[571,4]]},"433":{"position":[[0,4]]},"446":{"position":[[476,5]]},"481":{"position":[[0,4]]},"644":{"position":[[630,5]]}}}],["onchain",{"_index":2078,"t":{"444":{"position":[[264,7]]},"622":{"position":[[341,7]]}}}],["onchange={handleinputchang",{"_index":1076,"t":{"177":{"position":[[1519,28]]}}}],["onclick={sendmessage}>send.example.com",{"_index":809,"t":{"115":{"position":[[218,17]]}}}],["round",{"_index":1420,"t":{"324":{"position":[[241,7]]}}}],["rout",{"_index":550,"t":{"63":{"position":[[582,5]]},"144":{"position":[[240,7]]},"193":{"position":[[149,7]]},"209":{"position":[[172,8]]},"289":{"position":[[114,8]]},"330":{"position":[[21,7],[79,6]]},"558":{"position":[[181,7],[509,7],[905,7]]},"638":{"position":[[452,7],[543,7]]}}}],["row",{"_index":1672,"t":{"342":{"position":[[464,5]]},"355":{"position":[[814,4]]},"357":{"position":[[241,5]]}}}],["rpc",{"_index":2161,"t":{"475":{"position":[[44,3],[125,3]]},"511":{"position":[[62,3],[143,3]]}}}],["rule",{"_index":351,"t":{"34":{"position":[[587,5]]},"209":{"position":[[110,5]]},"211":{"position":[[922,5]]},"271":{"position":[[23,5]]},"423":{"position":[[277,5]]},"582":{"position":[[1316,5],[1386,5],[1963,5]]}}}],["run",{"_index":28,"t":{"2":{"position":[[385,7]]},"6":{"position":[[1571,7],[1643,3]]},"55":{"position":[[1142,3],[1657,7]]},"59":{"position":[[1810,7]]},"63":{"position":[[293,7]]},"134":{"position":[[129,7]]},"140":{"position":[[320,3]]},"144":{"position":[[19,3],[75,7]]},"154":{"position":[[329,7]]},"183":{"position":[[914,7]]},"211":{"position":[[134,3]]},"213":{"position":[[164,3]]},"314":{"position":[[42,3],[255,3]]},"316":{"position":[[150,3]]},"320":{"position":[[138,3]]},"322":{"position":[[58,3],[327,7],[603,3],[828,3],[875,3]]},"326":{"position":[[386,3],[577,3],[652,3]]},"328":{"position":[[49,7]]},"334":{"position":[[284,7]]},"340":{"position":[[321,3],[364,3],[518,3],[1882,3]]},"355":{"position":[[215,7]]},"357":{"position":[[536,7]]},"359":{"position":[[690,3],[845,7],[1917,7]]},"361":{"position":[[1113,7]]},"374":{"position":[[407,7],[490,7]]},"390":{"position":[[618,7]]},"417":{"position":[[119,3]]},"436":{"position":[[233,7]]},"470":{"position":[[49,7],[116,7]]},"473":{"position":[[19,3]]},"477":{"position":[[242,3]]},"479":{"position":[[51,3]]},"481":{"position":[[18,8]]},"487":{"position":[[152,7]]},"499":{"position":[[221,7],[329,3]]},"501":{"position":[[303,7],[385,3]]},"503":{"position":[[552,3]]},"505":{"position":[[522,3]]},"507":{"position":[[109,7]]},"509":{"position":[[71,4]]},"511":{"position":[[175,7],[255,7]]},"517":{"position":[[247,7]]},"521":{"position":[[542,7]]},"529":{"position":[[117,3]]},"531":{"position":[[68,3],[199,7],[243,3],[260,3],[292,3]]},"533":{"position":[[0,3]]},"535":{"position":[[48,3],[162,3]]},"537":{"position":[[133,7],[213,7]]},"543":{"position":[[0,3],[44,3],[257,3],[312,3],[794,3],[805,3],[856,7],[985,3],[1201,7]]},"588":{"position":[[10,3],[41,3],[118,3],[167,3],[304,7],[333,7],[413,7],[495,7],[539,7],[655,7],[1064,8]]},"618":{"position":[[72,7]]},"622":{"position":[[897,4],[956,3]]},"646":{"position":[[34,7],[183,7],[295,7]]},"648":{"position":[[232,3],[888,7]]}}}],["runstmt",{"_index":1803,"t":{"361":{"position":[[526,8]]}}}],["rustup",{"_index":2238,"t":{"525":{"position":[[100,7],[638,6]]}}}],["s",{"_index":1985,"t":{"410":{"position":[[705,3],[741,3]]},"525":{"position":[[505,1],[750,1]]}}}],["sa",{"_index":2152,"t":{"468":{"position":[[150,3]]},"584":{"position":[[963,3]]}}}],["sacrific",{"_index":871,"t":{"126":{"position":[[146,10]]}}}],["safeti",{"_index":2119,"t":{"458":{"position":[[141,6]]}}}],["same",{"_index":57,"t":{"6":{"position":[[378,4]]},"87":{"position":[[131,4]]},"219":{"position":[[244,4]]},"275":{"position":[[130,4]]},"326":{"position":[[1276,5],[1417,5],[3008,4]]},"359":{"position":[[703,4],[1718,4]]},"361":{"position":[[260,4],[326,4],[1745,4]]},"448":{"position":[[0,4]]},"460":{"position":[[512,4]]},"554":{"position":[[336,4]]},"560":{"position":[[510,4]]},"638":{"position":[[434,4],[525,4]]},"644":{"position":[[669,4]]}}}],["sampl",{"_index":820,"t":{"117":{"position":[[255,8],[487,8]]},"146":{"position":[[439,8]]},"549":{"position":[[1223,6]]}}}],["sandbox",{"_index":1764,"t":{"359":{"position":[[928,7],[2000,7]]},"361":{"position":[[1058,7]]}}}],["saniti",{"_index":2011,"t":{"419":{"position":[[164,6]]}}}],["save",{"_index":2310,"t":{"549":{"position":[[173,4],[313,8]]}}}],["scaffold",{"_index":492,"t":{"55":{"position":[[860,8]]}}}],["scalabl",{"_index":667,"t":{"93":{"position":[[1278,8]]},"113":{"position":[[728,12]]},"138":{"position":[[126,8],[302,11]]},"144":{"position":[[472,12]]},"195":{"position":[[262,12]]},"213":{"position":[[301,12]]},"245":{"position":[[42,8]]},"297":{"position":[[36,8]]},"322":{"position":[[1289,12]]},"549":{"position":[[961,12]]}}}],["scale",{"_index":1186,"t":{"197":{"position":[[311,6]]},"279":{"position":[[174,6]]},"326":{"position":[[761,5]]},"336":{"position":[[1746,5]]},"376":{"position":[[827,5]]},"421":{"position":[[187,6]]},"427":{"position":[[268,9]]}}}],["scenario",{"_index":1157,"t":{"191":{"position":[[131,9]]},"355":{"position":[[27,8]]},"357":{"position":[[75,8]]},"359":{"position":[[990,8],[1309,8],[1484,8],[1735,8],[2062,8],[2396,8],[2672,8]]}}}],["scene",{"_index":2306,"t":{"545":{"position":[[401,7]]}}}],["sceneri",{"_index":1792,"t":{"361":{"position":[[171,7]]}}}],["scheme",{"_index":2492,"t":{"594":{"position":[[195,7]]}}}],["scope",{"_index":1364,"t":{"314":{"position":[[84,6]]}}}],["score",{"_index":1272,"t":{"223":{"position":[[218,7],[268,6],[347,7]]},"364":{"position":[[622,6],[658,6],[719,7]]},"438":{"position":[[208,7]]},"444":{"position":[[313,8]]}}}],["screaming_snake_cas",{"_index":2203,"t":{"501":{"position":[[137,20]]}}}],["script",{"_index":479,"t":{"53":{"position":[[837,6],[848,7]]},"79":{"position":[[101,7],[245,9]]},"355":{"position":[[328,6]]}}}],["sd",{"_index":669,"t":{"93":{"position":[[1297,5]]}}}],["sdk",{"_index":438,"t":{"48":{"position":[[39,3],[167,3]]},"55":{"position":[[240,3]]},"59":{"position":[[81,3],[1225,3],[1464,3],[1733,3]]},"77":{"position":[[57,3]]},"171":{"position":[[39,3]]},"211":{"position":[[112,4]]},"285":{"position":[[0,4]]},"588":{"position":[[610,4]]}}}],["seamless",{"_index":2318,"t":{"549":{"position":[[462,8]]}}}],["seamlessli",{"_index":445,"t":{"48":{"position":[[295,10]]},"55":{"position":[[804,10]]},"132":{"position":[[80,10]]}}}],["second",{"_index":1597,"t":{"334":{"position":[[1025,7],[1065,7]]},"336":{"position":[[861,7],[1423,7]]},"342":{"position":[[288,8],[552,8]]},"344":{"position":[[107,8],[674,8]]},"361":{"position":[[1484,7],[1591,7],[1862,7]]},"436":{"position":[[412,7]]},"438":{"position":[[39,6],[103,8],[189,8]]},"440":{"position":[[183,7],[489,7]]},"442":{"position":[[108,7],[595,7]]},"444":{"position":[[538,8]]},"448":{"position":[[193,7]]},"501":{"position":[[450,6]]},"596":{"position":[[400,8],[1257,7]]},"598":{"position":[[233,7],[302,7],[424,7]]},"606":{"position":[[498,7],[766,7]]},"626":{"position":[[249,7]]},"628":{"position":[[253,8]]}}}],["secp256k1",{"_index":1306,"t":{"257":{"position":[[16,9]]},"600":{"position":[[240,9],[668,9]]}}}],["secreci",{"_index":1332,"t":{"299":{"position":[[218,8]]}}}],["secret",{"_index":2216,"t":{"515":{"position":[[353,7]]},"622":{"position":[[500,6]]}}}],["section",{"_index":2303,"t":{"545":{"position":[[327,8]]},"584":{"position":[[289,8]]},"588":{"position":[[1769,7]]}}}],["secur",{"_index":204,"t":{"20":{"position":[[284,6]]},"24":{"position":[[237,6]]},"34":{"position":[[63,6],[260,6],[327,6]]},"197":{"position":[[225,6]]},"209":{"position":[[531,6],[574,6],[716,9]]},"217":{"position":[[52,8],[97,8],[131,8],[290,8],[342,8]]},"225":{"position":[[140,8],[310,6]]},"255":{"position":[[101,6]]},"259":{"position":[[65,6],[135,9]]},"279":{"position":[[66,6]]},"285":{"position":[[70,7]]},"291":{"position":[[29,7]]},"295":{"position":[[69,6]]},"299":{"position":[[97,6]]},"310":{"position":[[232,6]]},"454":{"position":[[779,8]]},"458":{"position":[[36,8],[92,8]]},"519":{"position":[[235,9]]},"545":{"position":[[247,8]]},"547":{"position":[[245,6]]},"549":{"position":[[654,8]]},"560":{"position":[[1005,8]]},"566":{"position":[[1764,9]]},"586":{"position":[[8,8],[117,8],[299,7]]},"594":{"position":[[453,6],[676,6]]},"602":{"position":[[362,6],[386,6],[454,6],[471,6],[508,6],[526,6],[666,6],[700,6],[758,6],[1019,6],[1156,6],[1190,6],[1232,6]]},"642":{"position":[[139,6],[167,6],[206,6],[222,6],[278,6],[295,6]]}}}],["security@free.technolog",{"_index":2482,"t":{"586":{"position":[[140,25]]}}}],["see",{"_index":1517,"t":{"326":{"position":[[2826,3]]},"328":{"position":[[581,3]]},"332":{"position":[[348,3],[483,3]]},"334":{"position":[[416,4],[528,3]]},"336":{"position":[[1270,3],[1541,3]]},"359":{"position":[[1121,3]]},"361":{"position":[[384,3]]},"374":{"position":[[696,4]]},"380":{"position":[[618,4]]},"384":{"position":[[17,3],[87,3],[160,3],[231,3]]},"388":{"position":[[27,3],[133,3],[221,3],[317,3]]},"392":{"position":[[66,3],[137,3]]},"396":{"position":[[48,3],[141,3]]},"400":{"position":[[38,3],[194,3],[358,3],[500,3]]},"410":{"position":[[632,3]]},"444":{"position":[[358,3],[554,3],[642,4]]},"477":{"position":[[238,3]]},"505":{"position":[[469,3]]},"531":{"position":[[119,3]]},"535":{"position":[[154,3]]}}}],["seek",{"_index":397,"t":{"40":{"position":[[349,7]]},"57":{"position":[[34,4]]},"121":{"position":[[303,4],[741,5]]},"582":{"position":[[989,8]]}}}],["seem",{"_index":2065,"t":{"440":{"position":[[0,5],[333,5]]},"442":{"position":[[140,5],[202,5],[342,5]]}}}],["seen",{"_index":1015,"t":{"169":{"position":[[715,4]]}}}],["select",{"_index":674,"t":{"95":{"position":[[118,11]]},"109":{"position":[[170,6]]},"119":{"position":[[577,7]]},"138":{"position":[[372,9]]},"201":{"position":[[38,11]]},"233":{"position":[[88,9]]},"243":{"position":[[49,11]]},"361":{"position":[[917,6],[964,6],[1472,7],[1579,7],[1850,7]]},"390":{"position":[[864,7]]},"470":{"position":[[182,6]]},"543":{"position":[[92,8]]}}}],["sell",{"_index":2389,"t":{"566":{"position":[[1701,5],[1741,4]]}}}],["semi",{"_index":1916,"t":{"386":{"position":[[556,4]]}}}],["send",{"_index":162,"t":{"18":{"position":[[310,4],[374,4],[676,4]]},"20":{"position":[[448,4],[529,4],[827,4],[1522,7]]},"22":{"position":[[1705,4]]},"42":{"position":[[137,4]]},"55":{"position":[[135,4],[196,4],[306,4],[373,4]]},"59":{"position":[[2460,4]]},"61":{"position":[[102,4]]},"69":{"position":[[1065,4]]},"73":{"position":[[3,4],[390,4]]},"77":{"position":[[13,4]]},"83":{"position":[[489,4]]},"85":{"position":[[176,7],[568,7]]},"93":{"position":[[3,4],[331,4],[503,4],[755,4]]},"97":{"position":[[619,4]]},"121":{"position":[[82,8]]},"177":{"position":[[33,7],[1055,4],[2418,5]]},"179":{"position":[[3,4],[364,4]]},"197":{"position":[[64,7]]},"205":{"position":[[159,7]]},"211":{"position":[[197,7],[1487,4]]},"251":{"position":[[49,4]]},"271":{"position":[[123,8]]},"273":{"position":[[82,4]]},"279":{"position":[[106,7]]},"336":{"position":[[656,7]]},"342":{"position":[[441,4]]},"374":{"position":[[743,5]]},"378":{"position":[[96,5],[143,5],[454,4]]},"380":{"position":[[839,5],[1030,5]]},"390":{"position":[[791,5]]},"400":{"position":[[325,7]]},"440":{"position":[[260,4]]},"446":{"position":[[299,4]]},"473":{"position":[[173,4]]},"507":{"position":[[223,4]]},"582":{"position":[[852,4]]},"640":{"position":[[152,4]]},"648":{"position":[[670,7]]}}}],["send/rec",{"_index":1386,"t":{"322":{"position":[[276,12]]}}}],["sender",{"_index":166,"t":{"18":{"position":[[401,6]]},"20":{"position":[[394,6],[556,6]]},"22":{"position":[[547,8],[976,6]]},"73":{"position":[[232,7]]},"91":{"position":[[277,7]]},"93":{"position":[[170,7]]},"207":{"position":[[426,7]]},"332":{"position":[[1552,6]]},"336":{"position":[[574,6]]},"400":{"position":[[273,8]]},"444":{"position":[[223,6]]}}}],["senderid",{"_index":646,"t":{"87":{"position":[[435,8],[628,9]]}}}],["sendmessag",{"_index":1060,"t":{"177":{"position":[[1095,11]]},"179":{"position":[[59,13],[404,11]]}}}],["sens",{"_index":1708,"t":{"349":{"position":[[184,5]]}}}],["sent",{"_index":140,"t":{"14":{"position":[[300,4]]},"22":{"position":[[3046,4]]},"75":{"position":[[1297,4]]},"93":{"position":[[411,4],[868,6],[933,5],[1192,4]]},"193":{"position":[[672,4]]},"207":{"position":[[232,5]]},"211":{"position":[[413,4]]},"336":{"position":[[381,4],[851,4]]},"340":{"position":[[1265,4]]},"344":{"position":[[221,4],[843,4]]},"521":{"position":[[240,4]]}}}],["separ",{"_index":1310,"t":{"259":{"position":[[55,9]]},"380":{"position":[[530,8]]},"386":{"position":[[45,8]]},"464":{"position":[[97,8]]},"644":{"position":[[1284,11]]}}}],["sepolia",{"_index":919,"t":{"142":{"position":[[9,7],[103,7],[246,7],[278,7],[320,7],[355,7],[400,7],[437,7]]},"144":{"position":[[125,7]]},"436":{"position":[[473,7]]},"446":{"position":[[95,8]]},"475":{"position":[[36,7],[117,7]]},"511":{"position":[[54,7],[135,7]]}}}],["sequenti",{"_index":964,"t":{"158":{"position":[[234,13]]}}}],["serial",{"_index":1110,"t":{"179":{"position":[[85,9]]}}}],["serialis",{"_index":589,"t":{"73":{"position":[[282,9]]},"93":{"position":[[220,9]]},"97":{"position":[[440,13]]},"179":{"position":[[633,9]]}}}],["serialisedmessag",{"_index":590,"t":{"73":{"position":[[325,17],[470,18]]},"93":{"position":[[263,17]]}}}],["serious",{"_index":2118,"t":{"458":{"position":[[45,9]]},"586":{"position":[[17,9]]}}}],["serv",{"_index":346,"t":{"34":{"position":[[492,6]]},"175":{"position":[[28,6]]},"185":{"position":[[130,5]]},"193":{"position":[[128,6],[294,6]]},"209":{"position":[[705,5]]},"261":{"position":[[67,7]]},"275":{"position":[[33,6]]},"596":{"position":[[30,5],[163,5]]},"602":{"position":[[110,5]]},"606":{"position":[[19,5]]},"608":{"position":[[19,5]]},"628":{"position":[[310,5],[348,5]]},"644":{"position":[[1338,5]]}}}],["server",{"_index":94,"t":{"6":{"position":[[1561,6]]},"119":{"position":[[94,7]]},"148":{"position":[[87,7]]},"187":{"position":[[348,8]]},"322":{"position":[[726,6]]},"374":{"position":[[339,6],[390,6],[427,6],[545,6],[764,7],[778,6],[842,6],[922,6],[1005,6]]},"378":{"position":[[124,7],[136,6],[432,6]]},"380":{"position":[[867,6],[917,6],[1023,6]]},"382":{"position":[[102,6],[172,6]]},"386":{"position":[[127,6],[761,7],[1189,7]]},"390":{"position":[[36,6],[142,7],[192,6],[246,6],[475,6],[587,6],[699,7],[768,7],[874,6],[1063,6],[1135,7]]},"394":{"position":[[81,7],[149,7]]},"400":{"position":[[184,7]]},"410":{"position":[[443,8],[474,8]]},"543":{"position":[[1163,9]]},"556":{"position":[[408,6],[436,6],[513,8],[662,6],[713,6],[769,7]]},"560":{"position":[[427,6],[541,7]]},"604":{"position":[[162,6],[263,7],[379,7],[786,6],[832,6],[1029,6]]},"610":{"position":[[27,6]]},"620":{"position":[[115,6],[154,6]]},"632":{"position":[[64,7],[141,6],[195,6],[525,7]]},"634":{"position":[[39,6],[71,7],[98,6],[156,6],[171,6],[223,6]]},"636":{"position":[[180,6],[219,6],[314,6]]}}}],["server'",{"_index":1903,"t":{"380":{"position":[[810,8]]},"386":{"position":[[260,8],[913,8]]},"390":{"position":[[117,8],[314,8],[946,8]]},"610":{"position":[[94,8]]}}}],["server=8.8.4.4",{"_index":2346,"t":{"556":{"position":[[1148,14]]}}}],["server=8.8.8.8",{"_index":2345,"t":{"556":{"position":[[1110,14]]}}}],["server=[dn",{"_index":2339,"t":{"556":{"position":[[645,11]]}}}],["servic",{"_index":906,"t":{"138":{"position":[[406,8]]},"140":{"position":[[451,8]]},"209":{"position":[[449,7],[600,7]]},"217":{"position":[[39,8]]},"227":{"position":[[93,8],[248,7]]},"249":{"position":[[67,7]]},"306":{"position":[[10,7],[87,7],[344,7],[414,7],[656,7],[708,8]]},"314":{"position":[[207,7]]},"326":{"position":[[1912,9],[2086,9]]},"340":{"position":[[881,8]]},"357":{"position":[[66,8]]},"388":{"position":[[111,7],[199,7]]},"574":{"position":[[176,9]]},"618":{"position":[[778,7],[852,7],[1021,7]]}}}],["set",{"_index":15,"t":{"2":{"position":[[161,3]]},"6":{"position":[[3,3]]},"30":{"position":[[55,3]]},"59":{"position":[[1618,7],[2740,3]]},"61":{"position":[[75,7]]},"63":{"position":[[372,3]]},"81":{"position":[[270,3]]},"95":{"position":[[36,3]]},"117":{"position":[[366,4]]},"173":{"position":[[7,3]]},"175":{"position":[[79,3],[289,3]]},"191":{"position":[[16,3]]},"209":{"position":[[632,3]]},"211":{"position":[[1644,3]]},"271":{"position":[[16,3]]},"320":{"position":[[25,3]]},"326":{"position":[[1147,4],[2565,3],[2926,3]]},"332":{"position":[[166,4]]},"340":{"position":[[1025,3],[1143,3],[1625,4],[1778,3]]},"355":{"position":[[751,3]]},"374":{"position":[[893,3]]},"398":{"position":[[136,9]]},"423":{"position":[[300,3]]},"477":{"position":[[157,8]]},"481":{"position":[[58,3],[137,8]]},"501":{"position":[[169,3]]},"519":{"position":[[191,7]]},"543":{"position":[[927,3]]},"582":{"position":[[888,7]]},"588":{"position":[[1561,7]]},"594":{"position":[[8,3]]},"596":{"position":[[581,3],[812,7]]},"616":{"position":[[63,4]]},"624":{"position":[[325,3]]},"644":{"position":[[229,8],[270,3],[602,3],[658,3],[735,4],[858,7],[904,7],[1016,8],[1092,3]]}}}],["setinputmessag",{"_index":1053,"t":{"177":{"position":[[378,16]]},"179":{"position":[[851,20]]}}}],["setinputmessage(e.target.valu",{"_index":1058,"t":{"177":{"position":[[551,32]]}}}],["setmessag",{"_index":1054,"t":{"177":{"position":[[428,12]]}}}],["setmessages(allmessages.map((wakumessag",{"_index":1125,"t":{"183":{"position":[[652,41]]}}}],["setmessages(filtermessages.map((wakumessag",{"_index":1119,"t":{"181":{"position":[[429,44]]}}}],["setup",{"_index":92,"t":{"6":{"position":[[1522,5]]},"93":{"position":[[352,5]]},"330":{"position":[[983,5]]},"473":{"position":[[65,5]]},"477":{"position":[[218,5]]},"507":{"position":[[47,5]]},"535":{"position":[[119,5]]}}}],["sever",{"_index":698,"t":{"99":{"position":[[94,7]]},"328":{"position":[[447,8]]},"361":{"position":[[87,7]]},"584":{"position":[[581,9]]}}}],["sh",{"_index":2251,"t":{"525":{"position":[[303,2],[450,2],[598,2]]}}}],["shadow",{"_index":1573,"t":{"334":{"position":[[6,6],[871,6]]},"336":{"position":[[2212,6],[2334,6]]}}}],["shall",{"_index":2383,"t":{"566":{"position":[[1264,5]]},"576":{"position":[[4,5]]},"582":{"position":[[841,5]]}}}],["shape",{"_index":1251,"t":{"217":{"position":[[77,7]]}}}],["shard",{"_index":553,"t":{"63":{"position":[[670,7],[786,8]]},"65":{"position":[[78,9],[115,8],[216,7]]},"69":{"position":[[801,7]]},"75":{"position":[[960,7]]},"138":{"position":[[317,8],[366,5]]},"241":{"position":[[248,7]]},"320":{"position":[[76,5],[304,6]]},"322":{"position":[[151,6],[389,7],[462,5],[1428,6]]},"326":{"position":[[114,6],[2801,6]]},"338":{"position":[[75,5]]},"340":{"position":[[418,6]]},"344":{"position":[[1230,7],[1256,6],[1277,6]]},"614":{"position":[[128,5],[160,6]]},"622":{"position":[[1425,5],[1460,5],[1466,5],[1518,6],[1546,6],[1599,6]]},"648":{"position":[[95,5],[401,8],[526,8],[852,8],[987,8],[1232,8]]}}}],["shard:pubkey",{"_index":2599,"t":{"614":{"position":[[222,13]]}}}],["shard:public_key",{"_index":2682,"t":{"648":{"position":[[187,16]]}}}],["shard=\"4:your_public_key",{"_index":2684,"t":{"648":{"position":[[361,25]]}}}],["share",{"_index":156,"t":{"18":{"position":[[36,6],[1388,6]]},"20":{"position":[[1421,5]]},"59":{"position":[[2654,7]]},"69":{"position":[[1096,6]]},"83":{"position":[[520,6]]},"101":{"position":[[44,5]]},"103":{"position":[[209,5]]},"138":{"position":[[22,6]]},"140":{"position":[[127,6]]},"144":{"position":[[233,6],[365,6]]},"312":{"position":[[43,5]]},"361":{"position":[[1680,6]]},"366":{"position":[[65,8]]},"368":{"position":[[15,7],[269,5]]},"372":{"position":[[145,7]]},"376":{"position":[[98,7]]},"515":{"position":[[415,6]]},"549":{"position":[[1148,8]]}}}],["shift",{"_index":2609,"t":{"618":{"position":[[404,5],[418,5]]}}}],["shift=1",{"_index":2352,"t":{"560":{"position":[[725,7]]}}}],["short",{"_index":1160,"t":{"191":{"position":[[369,5]]},"205":{"position":[[79,5]]},"211":{"position":[[992,6]]},"543":{"position":[[649,6]]},"547":{"position":[[343,6]]}}}],["shouldn't",{"_index":1499,"t":{"326":{"position":[[1928,9]]},"442":{"position":[[363,9]]}}}],["show",{"_index":308,"t":{"28":{"position":[[135,4]]},"85":{"position":[[390,4],[610,4]]},"93":{"position":[[795,4],[939,4],[1121,4]]},"324":{"position":[[21,5]]},"336":{"position":[[21,5],[79,7],[429,4]]},"357":{"position":[[759,5]]},"359":{"position":[[325,5],[1213,5]]},"361":{"position":[[161,5],[1368,5]]}}}],["shown",{"_index":1504,"t":{"326":{"position":[[2099,5]]},"334":{"position":[[599,5]]},"336":{"position":[[324,6]]}}}],["sia",{"_index":1869,"t":{"372":{"position":[[66,4]]}}}],["side",{"_index":876,"t":{"128":{"position":[[32,4]]},"374":{"position":[[434,4],[507,4]]},"640":{"position":[[97,6],[226,5]]}}}],["sign",{"_index":134,"t":{"14":{"position":[[104,4]]},"22":{"position":[[8,7],[181,7],[478,4],[863,7],[912,7],[1139,5],[1368,7],[1439,5],[1663,7],[2396,7],[2547,5],[3035,6],[3218,6],[3280,6]]},"24":{"position":[[59,7],[1002,6]]},"55":{"position":[[610,4],[708,4]]},"59":{"position":[[941,4],[1111,4]]},"295":{"position":[[161,7]]},"556":{"position":[[355,6]]}}}],["signatur",{"_index":218,"t":{"22":{"position":[[87,9],[2020,9],[2725,9],[2794,9],[2826,9],[2906,9]]},"225":{"position":[[122,11],[266,11]]},"549":{"position":[[533,9],[562,9],[593,9],[629,10]]}}}],["signaturepublickey",{"_index":247,"t":{"22":{"position":[[2049,20],[2859,18],[2947,18]]}}}],["signifi",{"_index":1207,"t":{"207":{"position":[[364,10]]},"306":{"position":[[18,9]]}}}],["signific",{"_index":475,"t":{"53":{"position":[[463,11]]},"334":{"position":[[319,11]]}}}],["significantli",{"_index":1012,"t":{"169":{"position":[[569,13]]}}}],["sigprivkey",{"_index":229,"t":{"22":{"position":[[406,10],[1320,11],[1615,11],[2644,11]]}}}],["similar",{"_index":1631,"t":{"336":{"position":[[1873,7]]},"340":{"position":[[1977,7]]},"359":{"position":[[1629,7]]},"361":{"position":[[1883,7]]},"386":{"position":[[648,8]]},"452":{"position":[[373,7]]},"564":{"position":[[324,7]]}}}],["similarli",{"_index":1287,"t":{"227":{"position":[[468,10]]}}}],["simpl",{"_index":276,"t":{"24":{"position":[[339,6]]},"386":{"position":[[753,7]]},"473":{"position":[[149,6]]},"507":{"position":[[161,6]]}}}],["simpler",{"_index":869,"t":{"126":{"position":[[70,7]]},"386":{"position":[[1006,7]]}}}],["simplest",{"_index":1839,"t":{"364":{"position":[[752,8]]},"380":{"position":[[248,8]]},"588":{"position":[[90,8]]}}}],["simpli",{"_index":653,"t":{"91":{"position":[[67,6]]},"349":{"position":[[0,6]]}}}],["simplic",{"_index":881,"t":{"130":{"position":[[134,10]]}}}],["simplifi",{"_index":1293,"t":{"235":{"position":[[41,10]]},"380":{"position":[[355,10],[607,10]]},"382":{"position":[[150,10]]}}}],["simul",{"_index":1353,"t":{"308":{"position":[[31,11]]},"328":{"position":[[585,10]]},"330":{"position":[[947,10]]},"332":{"position":[[2204,12]]},"334":{"position":[[13,10],[64,8],[297,10],[402,10],[738,10],[927,8]]},"336":{"position":[[66,12],[393,11],[1709,11],[2270,9]]},"355":{"position":[[346,8]]},"398":{"position":[[126,9]]},"410":{"position":[[173,10]]},"415":{"position":[[123,8]]},"421":{"position":[[158,9],[270,10],[286,9]]},"436":{"position":[[241,11],[264,10]]},"438":{"position":[[323,11]]},"440":{"position":[[100,10]]},"444":{"position":[[339,11]]},"448":{"position":[[5,10]]}}}],["simultan",{"_index":123,"t":{"10":{"position":[[70,15]]},"355":{"position":[[170,14],[788,15]]},"552":{"position":[[195,15]]}}}],["singl",{"_index":155,"t":{"18":{"position":[[28,7]]},"103":{"position":[[394,6]]},"105":{"position":[[27,6],[703,6]]},"322":{"position":[[455,6]]},"340":{"position":[[411,6]]},"347":{"position":[[291,6]]},"359":{"position":[[3229,6]]},"361":{"position":[[65,6]]},"421":{"position":[[194,6]]}}}],["site",{"_index":2145,"t":{"464":{"position":[[86,5]]},"566":{"position":[[607,5]]}}}],["site.thes",{"_index":2377,"t":{"566":{"position":[[628,10]]}}}],["sixti",{"_index":2453,"t":{"582":{"position":[[1062,5]]}}}],["size",{"_index":468,"t":{"53":{"position":[[378,5]]},"59":{"position":[[415,4]]},"328":{"position":[[85,6],[270,4],[493,5]]},"332":{"position":[[1453,4],[1647,6]]},"336":{"position":[[175,6],[791,6],[1250,4]]},"340":{"position":[[1288,5]]},"344":{"position":[[662,4],[734,4],[1125,4]]},"382":{"position":[[356,4]]},"403":{"position":[[187,4]]},"405":{"position":[[80,4]]},"410":{"position":[[234,5]]},"412":{"position":[[235,4]]},"440":{"position":[[62,4]]},"442":{"position":[[180,5]]},"596":{"position":[[503,4]]},"624":{"position":[[286,4]]}}}],["size:10gb",{"_index":2507,"t":{"596":{"position":[[570,10]]}}}],["size:512mb",{"_index":2506,"t":{"596":{"position":[[556,10]]}}}],["size:{new",{"_index":1068,"t":{"177":{"position":[[1301,10]]}}}],["spawn",{"_index":1758,"t":{"359":{"position":[[564,5]]}}}],["special",{"_index":523,"t":{"59":{"position":[[1213,11]]},"543":{"position":[[919,7]]},"574":{"position":[[193,8]]}}}],["specialis",{"_index":1137,"t":{"185":{"position":[[136,11]]}}}],["specif",{"_index":195,"t":{"18":{"position":[[1417,8]]},"65":{"position":[[27,8]]},"67":{"position":[[345,8]]},"95":{"position":[[230,8],[291,13]]},"97":{"position":[[351,8]]},"103":{"position":[[124,8]]},"117":{"position":[[426,13]]},"121":{"position":[[709,8],[762,8]]},"154":{"position":[[383,8]]},"183":{"position":[[849,8],[953,8]]},"187":{"position":[[263,8]]},"201":{"position":[[63,8]]},"207":{"position":[[323,8]]},"211":{"position":[[913,8]]},"233":{"position":[[140,8]]},"241":{"position":[[32,13]]},"243":{"position":[[74,8]]},"293":{"position":[[135,8]]},"322":{"position":[[1465,8]]},"332":{"position":[[2085,8],[2161,8]]},"410":{"position":[[613,8]]},"417":{"position":[[176,8]]},"425":{"position":[[364,8]]},"427":{"position":[[204,8]]},"454":{"position":[[144,8]]},"460":{"position":[[429,8]]},"523":{"position":[[124,8]]},"527":{"position":[[208,8]]},"539":{"position":[[154,8]]},"568":{"position":[[1290,9]]},"584":{"position":[[828,8]]},"644":{"position":[[91,8]]}}}],["specifi",{"_index":563,"t":{"67":{"position":[[207,7]]},"69":{"position":[[395,7]]},"154":{"position":[[222,7],[591,9]]},"160":{"position":[[242,7]]},"162":{"position":[[213,7]]},"165":{"position":[[25,9]]},"167":{"position":[[18,9]]},"169":{"position":[[22,9]]},"183":{"position":[[1155,9]]},"207":{"position":[[13,9],[454,10]]},"261":{"position":[[210,9]]},"299":{"position":[[16,9]]},"320":{"position":[[222,7]]},"378":{"position":[[232,9]]},"499":{"position":[[95,7]]},"503":{"position":[[241,7],[349,7]]},"505":{"position":[[60,10]]},"610":{"position":[[185,10]]},"616":{"position":[[196,9]]},"618":{"position":[[452,7]]},"632":{"position":[[397,9],[453,7]]}}}],["speed",{"_index":1509,"t":{"326":{"position":[[2264,5],[2330,5]]},"334":{"position":[[644,6]]}}}],["speedtest",{"_index":1425,"t":{"324":{"position":[[349,9]]}}}],["spend",{"_index":1303,"t":{"253":{"position":[[39,5]]},"440":{"position":[[292,5]]}}}],["split",{"_index":1840,"t":{"366":{"position":[[7,5]]},"378":{"position":[[202,5]]},"386":{"position":[[1019,9]]}}}],["spread",{"_index":1819,"t":{"361":{"position":[[1639,6]]}}}],["sqlalchemi",{"_index":2511,"t":{"596":{"position":[[780,10]]}}}],["sqlite",{"_index":1700,"t":{"347":{"position":[[219,6],[326,6]]},"355":{"position":[[491,6],[573,6],[866,6],[1425,6]]},"357":{"position":[[189,7],[215,6],[721,6]]},"359":{"position":[[762,6],[1134,6],[1227,6],[1460,6],[1688,6],[1765,6],[2991,6],[3411,6]]},"624":{"position":[[527,6]]}}}],["sqlite://store.sqlite3",{"_index":2514,"t":{"596":{"position":[[963,23]]},"624":{"position":[[369,22]]}}}],["src/app.css",{"_index":1082,"t":{"177":{"position":[[1943,11]]}}}],["src/app.jsx",{"_index":1039,"t":{"175":{"position":[[669,11]]},"177":{"position":[[132,11]]},"179":{"position":[[196,11]]},"181":{"position":[[182,11]]},"183":{"position":[[211,11]]}}}],["src/main.jsx",{"_index":1032,"t":{"175":{"position":[[224,12]]}}}],["src=\"https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js\">{message.message}/ Security | Waku Documentation - - - + + + @@ -16,9 +16,9 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Security

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
    +

    Please report any discovered vulnerabilities in our bounty programme at HackenProof to help ensure our protocols and software remain secure.

    \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index b3e8cbe..84a693e 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.waku.org/guides/js-waku/weekly0.5https://docs.waku.org/guides/js-waku/configure-discoveryweekly0.5https://docs.waku.org/guides/js-waku/debug-waku-dappweekly0.5https://docs.waku.org/guides/js-waku/faqweekly0.5https://docs.waku.org/guides/js-waku/light-send-receiveweekly0.5https://docs.waku.org/guides/js-waku/manage-filterweekly0.5https://docs.waku.org/guides/js-waku/message-encryptionweekly0.5https://docs.waku.org/guides/js-waku/reliable-channelsweekly0.5https://docs.waku.org/guides/js-waku/run-waku-nodejsweekly0.5https://docs.waku.org/guides/js-waku/store-retrieve-messagesweekly0.5https://docs.waku.org/guides/js-waku/use-waku-create-appweekly0.5https://docs.waku.org/guides/js-waku/use-waku-reactweekly0.5https://docs.waku.org/guides/nwaku/build-sourceweekly0.5https://docs.waku.org/guides/nwaku/config-methodsweekly0.5https://docs.waku.org/guides/nwaku/config-optionsweekly0.5https://docs.waku.org/guides/nwaku/configure-discoveryweekly0.5https://docs.waku.org/guides/nwaku/configure-nwakuweekly0.5https://docs.waku.org/guides/nwaku/faqweekly0.5https://docs.waku.org/guides/nwaku/find-node-addressweekly0.5https://docs.waku.org/guides/nwaku/run-dockerweekly0.5https://docs.waku.org/guides/nwaku/run-docker-composeweekly0.5https://docs.waku.org/guides/nwaku/run-nodeweekly0.5https://docs.waku.org/guides/nwaku/upgrade-instructionsweekly0.5https://docs.waku.org/learn/concepts/content-topicsweekly0.5https://docs.waku.org/learn/concepts/discv5weekly0.5https://docs.waku.org/learn/concepts/dns-discoveryweekly0.5https://docs.waku.org/learn/concepts/network-domainsweekly0.5https://docs.waku.org/learn/concepts/peer-discoveryweekly0.5https://docs.waku.org/learn/concepts/peer-exchangeweekly0.5https://docs.waku.org/learn/concepts/protocolsweekly0.5https://docs.waku.org/learn/concepts/static-peersweekly0.5https://docs.waku.org/learn/concepts/transportsweekly0.5https://docs.waku.org/learn/faqweekly0.5https://docs.waku.org/learn/glossaryweekly0.5https://docs.waku.org/learn/researchweekly0.5https://docs.waku.org/learn/security-featuresweekly0.5https://docs.waku.org/learn/waku-networkweekly0.5https://docs.waku.org/learn/waku-vs-libp2pweekly0.5https://docs.waku.org/migrations/js-waku/migration_v0.026_0.027weekly0.5https://docs.waku.org/privacy-policyweekly0.5https://docs.waku.org/research/weekly0.5https://docs.waku.org/research/benchmarks/postgres-adoptionweekly0.5https://docs.waku.org/research/benchmarks/test-results-summaryweekly0.5https://docs.waku.org/research/research-and-studies/capped-bandwidthweekly0.5https://docs.waku.org/research/research-and-studies/incentivisationweekly0.5https://docs.waku.org/research/research-and-studies/maximum-bandwidthweekly0.5https://docs.waku.org/research/research-and-studies/message-propagationweekly0.5https://docs.waku.org/research/research-and-studies/rln-key-benchmarksweekly0.5https://docs.waku.org/rules-of-engagementweekly0.5https://docs.waku.org/securityweekly0.5https://docs.waku.org/termsweekly0.5https://docs.waku.org/weekly0.5 \ No newline at end of file +https://docs.waku.org/build/javascript/weekly0.5https://docs.waku.org/build/javascript/configure-discoveryweekly0.5https://docs.waku.org/build/javascript/debug-waku-dappweekly0.5https://docs.waku.org/build/javascript/faqweekly0.5https://docs.waku.org/build/javascript/light-send-receiveweekly0.5https://docs.waku.org/build/javascript/manage-filterweekly0.5https://docs.waku.org/build/javascript/message-encryptionweekly0.5https://docs.waku.org/build/javascript/reliable-channelsweekly0.5https://docs.waku.org/build/javascript/run-waku-nodejsweekly0.5https://docs.waku.org/build/javascript/store-retrieve-messagesweekly0.5https://docs.waku.org/build/javascript/use-waku-create-appweekly0.5https://docs.waku.org/build/javascript/use-waku-reactweekly0.5https://docs.waku.org/learn/weekly0.5https://docs.waku.org/learn/concepts/content-topicsweekly0.5https://docs.waku.org/learn/concepts/discv5weekly0.5https://docs.waku.org/learn/concepts/dns-discoveryweekly0.5https://docs.waku.org/learn/concepts/network-domainsweekly0.5https://docs.waku.org/learn/concepts/peer-discoveryweekly0.5https://docs.waku.org/learn/concepts/peer-exchangeweekly0.5https://docs.waku.org/learn/concepts/protocolsweekly0.5https://docs.waku.org/learn/concepts/static-peersweekly0.5https://docs.waku.org/learn/concepts/transportsweekly0.5https://docs.waku.org/learn/faqweekly0.5https://docs.waku.org/learn/glossaryweekly0.5https://docs.waku.org/learn/research/weekly0.5https://docs.waku.org/learn/research/benchmarks/postgres-adoptionweekly0.5https://docs.waku.org/learn/research/benchmarks/test-results-summaryweekly0.5https://docs.waku.org/learn/research/research-and-studies/capped-bandwidthweekly0.5https://docs.waku.org/learn/research/research-and-studies/incentivisationweekly0.5https://docs.waku.org/learn/research/research-and-studies/maximum-bandwidthweekly0.5https://docs.waku.org/learn/research/research-and-studies/message-propagationweekly0.5https://docs.waku.org/learn/research/research-and-studies/rln-key-benchmarksweekly0.5https://docs.waku.org/learn/security-featuresweekly0.5https://docs.waku.org/learn/waku-vs-libp2pweekly0.5https://docs.waku.org/privacy-policyweekly0.5https://docs.waku.org/rules-of-engagementweekly0.5https://docs.waku.org/run-node/weekly0.5https://docs.waku.org/run-node/build-sourceweekly0.5https://docs.waku.org/run-node/config-methodsweekly0.5https://docs.waku.org/run-node/config-optionsweekly0.5https://docs.waku.org/run-node/configure-discoveryweekly0.5https://docs.waku.org/run-node/configure-nwakuweekly0.5https://docs.waku.org/run-node/faqweekly0.5https://docs.waku.org/run-node/find-node-addressweekly0.5https://docs.waku.org/run-node/run-dockerweekly0.5https://docs.waku.org/run-node/run-docker-composeweekly0.5https://docs.waku.org/run-node/upgrade-instructionsweekly0.5https://docs.waku.org/securityweekly0.5https://docs.waku.org/termsweekly0.5https://docs.waku.org/weekly0.5 \ No newline at end of file diff --git a/terms/index.html b/terms/index.html index bda6799..d50cb05 100644 --- a/terms/index.html +++ b/terms/index.html @@ -4,9 +4,9 @@ Terms of Use | Waku Documentation - - - + + + @@ -16,7 +16,7 @@ .lsd-dropdown--error ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error - ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Terms of Use

    + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

    Terms of Use

    Last updated: 14 February 2024

    These website terms of use ('Website Terms of Use') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website.

    It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use.

    @@ -59,6 +59,6 @@

    The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use.

    If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them.

    If you have any specific questions about these Website Terms of Use, please contact us at legal@free.technology.

    -

    This document is licensed under CC-BY-SA.

    +

    This document is licensed under CC-BY-SA.

    \ No newline at end of file